diff --git a/404.html b/404.html index c99d7c6da3..83c685dfb1 100644 --- a/404.html +++ b/404.html @@ -12,7 +12,7 @@ - + diff --git a/assets/js/b225fd81.456c67ab.js b/assets/js/b225fd81.c0840773.js similarity index 57% rename from assets/js/b225fd81.456c67ab.js rename to assets/js/b225fd81.c0840773.js index b52524b90c..0cf2a6109c 100644 --- a/assets/js/b225fd81.456c67ab.js +++ b/assets/js/b225fd81.c0840773.js @@ -1 +1 @@ -"use strict";(self.webpackChunkchaos_mesh_website=self.webpackChunkchaos_mesh_website||[]).push([[7193],{51191:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>t,default:()=>d,frontMatter:()=>r,metadata:()=>a,toc:()=>c});var i=s(11527),o=s(7463);const r={title:"Configure the Development Environment"},t=void 0,a={id:"configure-development-environment",title:"Configure the Development Environment",description:"This document describes how to configure a local development environment for Chaos Mesh.",source:"@site/versioned_docs/version-2.6.2/configure-development-environment.md",sourceDirName:".",slug:"/configure-development-environment",permalink:"/docs/configure-development-environment",draft:!1,unlisted:!1,editUrl:"https://github.com/chaos-mesh/website/edit/master/versioned_docs/version-2.6.2/configure-development-environment.md",tags:[],version:"2.6.2",frontMatter:{title:"Configure the Development Environment"},sidebar:"docs",previous:{title:"Developer Guide Overview",permalink:"/docs/developer-guide-overview"},next:{title:"Add a New Chaos Experiment Type",permalink:"/docs/add-new-chaos-experiment-type"}},l={},c=[{value:"Configuration Requirements",id:"configuration-requirements",level:2},{value:"Compiling Chaos Mesh",id:"compiling-chaos-mesh",level:2},{value:"Run Chaos Mesh in local minkube Kubernetes cluster",id:"run-chaos-mesh-in-local-minkube-kubernetes-cluster",level:2},{value:"Debug Chaos Mesh in local environment",id:"debug-chaos-mesh-in-local-environment",level:2},{value:"What's Next",id:"whats-next",level:2},{value:"FAQ",id:"faq",level:2},{value:"Run make fail with error obtaining VCS status: exit status 128 in MacOS",id:"run-make-fail-with-error-obtaining-vcs-status-exit-status-128-in-macos",level:3}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:"This document describes how to configure a local development environment for Chaos Mesh."}),"\n",(0,i.jsxs)(n.p,{children:["Most components of Chaos Mesh are ",(0,i.jsx)(n.strong,{children:"only designed for Linux"}),", so we suggest that you also configure your development environment to run on Linux. For example, use a virtual machine or WSL 2 and use VSCode Remote as your editor."]}),"\n",(0,i.jsx)(n.p,{children:"This document assumes that you are using Linux, without the limitations of specific Linux distributions. If you insist on using Windows/MacOS, you may need some tricks to make it work for you (For example, some make targets may fail depending on the environment)."}),"\n",(0,i.jsx)(n.h2,{id:"configuration-requirements",children:"Configuration Requirements"}),"\n",(0,i.jsx)(n.p,{children:"Before configuring, it is recommended that you install the development tools listed below, most of them may already be installed in your environment:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://www.gnu.org/software/make/",children:"make"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://docs.docker.com/install/",children:"docker"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://go.dev/doc/install",children:"golang"}),", ",(0,i.jsx)(n.code,{children:"v1.18"})," or later versions"]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://gcc.gnu.org/",children:"gcc"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://helm.sh/",children:"helm"}),", ",(0,i.jsx)(n.code,{children:"v3.9.0"})," or later versions"]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://minikube.sigs.k8s.io/docs/start/",children:"minikube"})}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Optional:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://nodejs.org/en/",children:"nodejs"})," and ",(0,i.jsx)(n.a,{href:"https://pnpm.io/",children:"pnpm"}),", for developing Chaos Dashboard"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"compiling-chaos-mesh",children:"Compiling Chaos Mesh"}),"\n",(0,i.jsx)(n.p,{children:"After installing, follow the steps below to compile Chaos Mesh."}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Clone the Chaos Mesh repository to your local server:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"git clone https://github.com/chaos-mesh/chaos-mesh.git\ncd chaos-mesh\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Make sure that ",(0,i.jsx)(n.a,{href:"https://docs.docker.com/install/",children:"Docker"})," is installed and running."]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsx)(n.p,{children:"Chaos Mesh relies on Docker to build container images, this is for consistency with the production environment."})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Compile Chaos Mesh:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"UI=1 make image\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"UI=1"})," means that we will compile the user interface of Chaos Dashboard, if you don't need it, you can omit this env."]})}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["If you want to specify the tag of the image, you can use ",(0,i.jsx)(n.code,{children:"UI=1 make IMAGE_TAG=dev image"}),"."]})}),"\n",(0,i.jsx)(n.p,{children:"After compiling, you should get the following container images:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"ghcr.io/chaos-mesh/chaos-dashboard:latest"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"ghcr.io/chaos-mesh/chaos-mesh:latest"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"ghcr.io/chaos-mesh/chaos-daemon:latest"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"run-chaos-mesh-in-local-minkube-kubernetes-cluster",children:"Run Chaos Mesh in local minkube Kubernetes cluster"}),"\n",(0,i.jsx)(n.p,{children:"Now you can run Chaos Mesh in a local Kubernetes cluster after compiling."}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Start a local Kubernetes cluster with minkube:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"minikube start\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Load container images into minikube:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"minikube image load ghcr.io/chaos-mesh/chaos-dashboard:latest\nminikube image load ghcr.io/chaos-mesh/chaos-mesh:latest\nminikube image load ghcr.io/chaos-mesh/chaos-daemon:latest\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Install Chaos Mesh by Helm:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"helm upgrade --install chaos-mesh-debug ./helm/chaos-mesh --namespace=chaos-mesh-debug --create-namespace\n"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.admonition,{type:"tip",children:[(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"minikube image load"})," would cost lots of time, so here is a trick to avoid load images again and again during development. Using docker from minikube node instead of host's docker:"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:'minikube start --mount --mount-string "$(pwd):$(pwd)"\neval $(minikube -p minikube docker-env)\nUI=1 make image\n'})})]}),"\n",(0,i.jsx)(n.h2,{id:"debug-chaos-mesh-in-local-environment",children:"Debug Chaos Mesh in local environment"}),"\n",(0,i.jsxs)(n.p,{children:["We could use ",(0,i.jsx)(n.a,{href:"https://github.com/go-delve/delve",children:"delve"})," with remote debugging to debug the Chaos Mesh in local environment."]}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Compile Chaos Mesh with ",(0,i.jsx)(n.code,{children:"DEBUG=1"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"UI=1 DEBUG=1 make image\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Load container images into minikube:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"minikube image load ghcr.io/chaos-mesh/chaos-mesh:latest\nminikube image load ghcr.io/chaos-mesh/chaos-daemon:latest\nminikube image load ghcr.io/chaos-mesh/chaos-dashboard:latest\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Install Chaos Mesh and enable Remote Debugging:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"helm upgrade --install chaos-mesh-debug ./helm/chaos-mesh --namespace=chaos-mesh-debug --create-namespace --set chaosDlv.enable=true --set controllerManager.leaderElection.enabled=false\n"})}),"\n",(0,i.jsxs)(n.admonition,{type:"note",children:[(0,i.jsxs)(n.p,{children:["To ensure high availability, Chaos Mesh turns on ",(0,i.jsx)(n.code,{children:"leader-election"})," feature by default and will create 3 replicas for ",(0,i.jsx)(n.code,{children:"chaos-controller-manager"}),". We will use ",(0,i.jsx)(n.code,{children:"controllerManager.leaderElection.enabled=false"})," to ensure that Chaos Mesh only creates 1 instance of ",(0,i.jsx)(n.code,{children:"chaos-controller-manager"})," for easier debugging."]}),(0,i.jsxs)(n.p,{children:["For more details, see ",(0,i.jsx)(n.a,{href:"/docs/production-installation-using-helm#step-4-install-chaos-mesh-in-different-environments",children:"Install Chaos Mesh in different environments"}),"."]})]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Setup Port-Forwarding and Configure IDE To Connect the Remote Debugger:"}),"\n",(0,i.jsxs)(n.p,{children:["We could use ",(0,i.jsx)(n.code,{children:"kubectl port-forward"})," to forward the delve debugging server to a local port."]}),"\n",(0,i.jsxs)(n.p,{children:["For example, if we want to debug ",(0,i.jsx)(n.code,{children:"chaos-controller-manger"}),", we could execute the following command:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"kubectl -n chaos-mesh-debug port-forward chaos-controller-manager-766dc8488d-7n5bq 58000:8000\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Then we could access the remote delve debugger server with ",(0,i.jsx)(n.code,{children:"127.0.0.1:58000"}),"."]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["We always use ",(0,i.jsx)(n.code,{children:"8000"})," in the pod for serving the delve debug server, that's a convention. You could find that in helm templates files."]})}),"\n",(0,i.jsx)(n.p,{children:"Then we could configure our favorite IDE to connect to the remote debugger, below are some examples:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["For Goland, see ",(0,i.jsx)(n.a,{href:"https://www.jetbrains.com/help/go/attach-to-running-go-processes-with-debugger.html#attach-to-a-process-on-a-remote-machine",children:"Attach to running Go processes with the debugger#Attach to a process on a remote machine"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["For VSCode, see ",(0,i.jsx)(n.a,{href:"https://github.com/golang/vscode-go/blob/master/docs/debugging.md#remote-debugging",children:"vscode-go - Debugging#Remote Debugging"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["For more detailed information, see ",(0,i.jsx)(n.a,{href:"https://github.com/chaos-mesh/chaos-mesh/blob/master/images/chaos-dlv/README.md",children:"README.md for container image chaos-dlv"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"whats-next",children:"What's Next"}),"\n",(0,i.jsxs)(n.p,{children:["After finishing the above preparation, you can try to ",(0,i.jsx)(n.a,{href:"/docs/add-new-chaos-experiment-type",children:"Add a New Chaos Experiment Type"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"faq",children:"FAQ"}),"\n",(0,i.jsxs)(n.h3,{id:"run-make-fail-with-error-obtaining-vcs-status-exit-status-128-in-macos",children:["Run make fail with ",(0,i.jsx)(n.code,{children:"error obtaining VCS status: exit status 128"})," in MacOS"]}),"\n",(0,i.jsxs)(n.p,{children:["The reason is related to ",(0,i.jsx)(n.a,{href:"https://github.blog/2022-04-12-git-security-vulnerability-announced/",children:"https://github.blog/2022-04-12-git-security-vulnerability-announced/"}),". It's recommended you to read it first."]}),"\n",(0,i.jsxs)(n.p,{children:["Chaos Mesh will start the container (",(0,i.jsx)(n.code,{children:"dev-env"})," or ",(0,i.jsx)(n.code,{children:"build-env"}),") with the current user (when you call ",(0,i.jsx)(n.code,{children:"make"}),"). You can find the appropriate ",(0,i.jsx)(n.code,{children:"--user"})," flag in ",(0,i.jsx)(n.a,{href:"https://github.com/chaos-mesh/chaos-mesh/blob/813b650c02e0b065ae5c4707725c346929ab1847/build/get_env_shell.py#L81C10-L81C10",children:"get_env_shell.py#L81C10-L81C10"}),". So when Git is looking for a top-level ",(0,i.jsx)(n.code,{children:".git"})," directory, it will stop if its directory traversal changes ownership from the current user."]}),"\n",(0,i.jsxs)(n.p,{children:["A temporary solution for now is to comment out the line of ",(0,i.jsx)(n.code,{children:"--user"}),"."]})]})}function d(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},7463:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>t});var i=s(50959);const o={},r=i.createContext(o);function t(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:t(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkchaos_mesh_website=self.webpackChunkchaos_mesh_website||[]).push([[7193],{51191:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>t,default:()=>d,frontMatter:()=>r,metadata:()=>a,toc:()=>c});var i=s(11527),o=s(7463);const r={title:"Configure the Development Environment"},t=void 0,a={id:"configure-development-environment",title:"Configure the Development Environment",description:"This document describes how to configure a local development environment for Chaos Mesh.",source:"@site/versioned_docs/version-2.6.2/configure-development-environment.md",sourceDirName:".",slug:"/configure-development-environment",permalink:"/docs/configure-development-environment",draft:!1,unlisted:!1,editUrl:"https://github.com/chaos-mesh/website/edit/master/versioned_docs/version-2.6.2/configure-development-environment.md",tags:[],version:"2.6.2",frontMatter:{title:"Configure the Development Environment"},sidebar:"docs",previous:{title:"Developer Guide Overview",permalink:"/docs/developer-guide-overview"},next:{title:"Add a New Chaos Experiment Type",permalink:"/docs/add-new-chaos-experiment-type"}},l={},c=[{value:"Configuration Requirements",id:"configuration-requirements",level:2},{value:"Compiling Chaos Mesh",id:"compiling-chaos-mesh",level:2},{value:"Run Chaos Mesh in local minkube Kubernetes cluster",id:"run-chaos-mesh-in-local-minkube-kubernetes-cluster",level:2},{value:"Debug Chaos Mesh in local environment",id:"debug-chaos-mesh-in-local-environment",level:2},{value:"What's Next",id:"whats-next",level:2},{value:"FAQ",id:"faq",level:2},{value:"Run make fail with error obtaining VCS status: exit status 128 in MacOS",id:"run-make-fail-with-error-obtaining-vcs-status-exit-status-128-in-macos",level:3}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:"This document describes how to configure a local development environment for Chaos Mesh."}),"\n",(0,i.jsxs)(n.p,{children:["Most components of Chaos Mesh are ",(0,i.jsx)(n.strong,{children:"only designed for Linux"}),", so we suggest that you also configure your development environment to run on Linux. For example, use a virtual machine or WSL 2 and use VSCode Remote as your editor."]}),"\n",(0,i.jsx)(n.p,{children:"This document assumes that you are using Linux, without the limitations of specific Linux distributions. If you insist on using Windows/MacOS, you may need some tricks to make it work for you (For example, some make targets may fail depending on the environment)."}),"\n",(0,i.jsx)(n.h2,{id:"configuration-requirements",children:"Configuration Requirements"}),"\n",(0,i.jsx)(n.p,{children:"Before configuring, it is recommended that you install the development tools listed below, most of them may already be installed in your environment:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://www.gnu.org/software/make/",children:"make"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://docs.docker.com/install/",children:"docker"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://go.dev/doc/install",children:"golang"}),", ",(0,i.jsx)(n.code,{children:"v1.18"})," or later versions"]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://gcc.gnu.org/",children:"gcc"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://helm.sh/",children:"helm"}),", ",(0,i.jsx)(n.code,{children:"v3.9.0"})," or later versions"]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://minikube.sigs.k8s.io/docs/start/",children:"minikube"})}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Optional:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://nodejs.org/en/",children:"nodejs"})," and ",(0,i.jsx)(n.a,{href:"https://pnpm.io/",children:"pnpm"}),", for developing Chaos Dashboard"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"compiling-chaos-mesh",children:"Compiling Chaos Mesh"}),"\n",(0,i.jsx)(n.p,{children:"After installing, follow the steps below to compile Chaos Mesh."}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Clone the Chaos Mesh repository to your local server:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"git clone https://github.com/chaos-mesh/chaos-mesh.git\ncd chaos-mesh\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Make sure that ",(0,i.jsx)(n.a,{href:"https://docs.docker.com/install/",children:"Docker"})," is installed and running."]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsx)(n.p,{children:"Chaos Mesh relies on Docker to build container images, this is for consistency with the production environment."})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Compile Chaos Mesh:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"UI=1 make image\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"UI=1"})," means that we will compile the user interface of Chaos Dashboard, if you don't need it, you can omit this env."]})}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["If you want to specify the tag of the image, you can use ",(0,i.jsx)(n.code,{children:"UI=1 make IMAGE_TAG=dev image"}),"."]})}),"\n",(0,i.jsx)(n.p,{children:"After compiling, you should get the following container images:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"ghcr.io/chaos-mesh/chaos-dashboard:latest"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"ghcr.io/chaos-mesh/chaos-mesh:latest"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"ghcr.io/chaos-mesh/chaos-daemon:latest"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"run-chaos-mesh-in-local-minkube-kubernetes-cluster",children:"Run Chaos Mesh in local minkube Kubernetes cluster"}),"\n",(0,i.jsx)(n.p,{children:"Now you can run Chaos Mesh in a local Kubernetes cluster after compiling."}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Start a local Kubernetes cluster with minkube:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"minikube start\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Load container images into minikube:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"minikube image load ghcr.io/chaos-mesh/chaos-dashboard:latest\nminikube image load ghcr.io/chaos-mesh/chaos-mesh:latest\nminikube image load ghcr.io/chaos-mesh/chaos-daemon:latest\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Install Chaos Mesh by Helm:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"helm upgrade --install chaos-mesh-debug ./helm/chaos-mesh --namespace=chaos-mesh-debug --create-namespace\n"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.admonition,{type:"tip",children:[(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"minikube image load"})," would cost lots of time, so here is a trick to avoid load images again and again during development. Using docker from minikube node instead of host's docker:"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:'minikube start --mount --mount-string "$(pwd):$(pwd)"\neval $(minikube -p minikube docker-env)\nUI=1 make image\n'})})]}),"\n",(0,i.jsx)(n.h2,{id:"debug-chaos-mesh-in-local-environment",children:"Debug Chaos Mesh in local environment"}),"\n",(0,i.jsxs)(n.p,{children:["We could use ",(0,i.jsx)(n.a,{href:"https://github.com/go-delve/delve",children:"delve"})," with remote debugging to debug the Chaos Mesh in local environment."]}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Compile Chaos Mesh with ",(0,i.jsx)(n.code,{children:"DEBUGGER=1"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"UI=1 DEBUGGER=1 make image\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Load container images into minikube:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"minikube image load ghcr.io/chaos-mesh/chaos-mesh:latest\nminikube image load ghcr.io/chaos-mesh/chaos-daemon:latest\nminikube image load ghcr.io/chaos-mesh/chaos-dashboard:latest\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Install Chaos Mesh and enable Remote Debugging:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"helm upgrade --install chaos-mesh-debug ./helm/chaos-mesh --namespace=chaos-mesh-debug --create-namespace --set chaosDlv.enable=true --set controllerManager.leaderElection.enabled=false\n"})}),"\n",(0,i.jsxs)(n.admonition,{type:"note",children:[(0,i.jsxs)(n.p,{children:["To ensure high availability, Chaos Mesh turns on ",(0,i.jsx)(n.code,{children:"leader-election"})," feature by default and will create 3 replicas for ",(0,i.jsx)(n.code,{children:"chaos-controller-manager"}),". We will use ",(0,i.jsx)(n.code,{children:"controllerManager.leaderElection.enabled=false"})," to ensure that Chaos Mesh only creates 1 instance of ",(0,i.jsx)(n.code,{children:"chaos-controller-manager"})," for easier debugging."]}),(0,i.jsxs)(n.p,{children:["For more details, see ",(0,i.jsx)(n.a,{href:"/docs/production-installation-using-helm#step-4-install-chaos-mesh-in-different-environments",children:"Install Chaos Mesh in different environments"}),"."]})]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Setup Port-Forwarding and Configure IDE To Connect the Remote Debugger:"}),"\n",(0,i.jsxs)(n.p,{children:["We could use ",(0,i.jsx)(n.code,{children:"kubectl port-forward"})," to forward the delve debugging server to a local port."]}),"\n",(0,i.jsxs)(n.p,{children:["For example, if we want to debug ",(0,i.jsx)(n.code,{children:"chaos-controller-manger"}),", we could execute the following command:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"kubectl -n chaos-mesh-debug port-forward chaos-controller-manager-766dc8488d-7n5bq 58000:8000\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Then we could access the remote delve debugger server with ",(0,i.jsx)(n.code,{children:"127.0.0.1:58000"}),"."]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["We always use ",(0,i.jsx)(n.code,{children:"8000"})," in the pod for serving the delve debug server, that's a convention. You could find that in helm templates files."]})}),"\n",(0,i.jsx)(n.p,{children:"Then we could configure our favorite IDE to connect to the remote debugger, below are some examples:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["For Goland, see ",(0,i.jsx)(n.a,{href:"https://www.jetbrains.com/help/go/attach-to-running-go-processes-with-debugger.html#attach-to-a-process-on-a-remote-machine",children:"Attach to running Go processes with the debugger#Attach to a process on a remote machine"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["For VSCode, see ",(0,i.jsx)(n.a,{href:"https://github.com/golang/vscode-go/blob/master/docs/debugging.md#remote-debugging",children:"vscode-go - Debugging#Remote Debugging"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["For more detailed information, see ",(0,i.jsx)(n.a,{href:"https://github.com/chaos-mesh/chaos-mesh/blob/master/images/chaos-dlv/README.md",children:"README.md for container image chaos-dlv"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"whats-next",children:"What's Next"}),"\n",(0,i.jsxs)(n.p,{children:["After finishing the above preparation, you can try to ",(0,i.jsx)(n.a,{href:"/docs/add-new-chaos-experiment-type",children:"Add a New Chaos Experiment Type"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"faq",children:"FAQ"}),"\n",(0,i.jsxs)(n.h3,{id:"run-make-fail-with-error-obtaining-vcs-status-exit-status-128-in-macos",children:["Run make fail with ",(0,i.jsx)(n.code,{children:"error obtaining VCS status: exit status 128"})," in MacOS"]}),"\n",(0,i.jsxs)(n.p,{children:["The reason is related to ",(0,i.jsx)(n.a,{href:"https://github.blog/2022-04-12-git-security-vulnerability-announced/",children:"https://github.blog/2022-04-12-git-security-vulnerability-announced/"}),". It's recommended you to read it first."]}),"\n",(0,i.jsxs)(n.p,{children:["Chaos Mesh will start the container (",(0,i.jsx)(n.code,{children:"dev-env"})," or ",(0,i.jsx)(n.code,{children:"build-env"}),") with the current user (when you call ",(0,i.jsx)(n.code,{children:"make"}),"). You can find the appropriate ",(0,i.jsx)(n.code,{children:"--user"})," flag in ",(0,i.jsx)(n.a,{href:"https://github.com/chaos-mesh/chaos-mesh/blob/813b650c02e0b065ae5c4707725c346929ab1847/build/get_env_shell.py#L81C10-L81C10",children:"get_env_shell.py#L81C10-L81C10"}),". So when Git is looking for a top-level ",(0,i.jsx)(n.code,{children:".git"})," directory, it will stop if its directory traversal changes ownership from the current user."]}),"\n",(0,i.jsxs)(n.p,{children:["A temporary solution for now is to comment out the line of ",(0,i.jsx)(n.code,{children:"--user"}),"."]})]})}function d(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},7463:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>t});var i=s(50959);const o={},r=i.createContext(o);function t(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:t(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b516026a.47349b3d.js b/assets/js/b516026a.cbda959d.js similarity index 64% rename from assets/js/b516026a.47349b3d.js rename to assets/js/b516026a.cbda959d.js index 7a0307a97d..035b758183 100644 --- a/assets/js/b516026a.47349b3d.js +++ b/assets/js/b516026a.cbda959d.js @@ -1 +1 @@ -"use strict";(self.webpackChunkchaos_mesh_website=self.webpackChunkchaos_mesh_website||[]).push([[3903],{22757:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>r,metadata:()=>t,toc:()=>c});var o=s(11527),i=s(7463);const r={title:"Configure the Development Environment"},a=void 0,t={id:"configure-development-environment",title:"Configure the Development Environment",description:"This document describes how to configure a local development environment for Chaos Mesh.",source:"@site/versioned_docs/version-2.4.3/configure-development-environment.md",sourceDirName:".",slug:"/configure-development-environment",permalink:"/docs/2.4.3/configure-development-environment",draft:!1,unlisted:!1,editUrl:"https://github.com/chaos-mesh/website/edit/master/versioned_docs/version-2.4.3/configure-development-environment.md",tags:[],version:"2.4.3",frontMatter:{title:"Configure the Development Environment"},sidebar:"docs",previous:{title:"Developer Guide Overview",permalink:"/docs/2.4.3/developer-guide-overview"},next:{title:"Add New Chaos Experiment Type",permalink:"/docs/2.4.3/add-new-chaos-experiment-type"}},l={},c=[{value:"Configuration Requirements",id:"configuration-requirements",level:2},{value:"Compiling Chaos Mesh",id:"compiling-chaos-mesh",level:2},{value:"Run Chaos Mesh in Local minkube Kubernetes Cluster",id:"run-chaos-mesh-in-local-minkube-kubernetes-cluster",level:2},{value:"Debug Chaos Mesh in local environment",id:"debug-chaos-mesh-in-local-environment",level:2},{value:"Learn more",id:"learn-more",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,i.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.p,{children:"This document describes how to configure a local development environment for Chaos Mesh."}),"\n",(0,o.jsx)(n.p,{children:"Most components of Chaos Mesh are designed only for Linux, so we suggest that you also configure your development environment to run on Linux. For example, using a virtual machine or WSL 2, and using VSCode Remote as your editor."}),"\n",(0,o.jsx)(n.p,{children:"This document assumes that you use Linux, without the restriction on specific Linux distributions. If you persist to use Windows/MacOS, you might need some tricks to make it work by yourself."}),"\n",(0,o.jsx)(n.h2,{id:"configuration-requirements",children:"Configuration Requirements"}),"\n",(0,o.jsx)(n.p,{children:"Before configuring, we suggest to install the development tools for Chaos Mesh."}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"https://www.gnu.org/software/make/",children:"make"})}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"https://docs.docker.com/install/",children:"docker"})}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.a,{href:"https://go.dev/doc/install",children:"golang"}),", v1.18 or later versions"]}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"https://gcc.gnu.org/",children:"gcc"})}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.a,{href:"https://helm.sh/",children:"helm"}),", v3.9.0 or later versions"]}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"https://minikube.sigs.k8s.io/docs/start/",children:"minikube"})}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.a,{href:"https://nodejs.org/en/",children:"nodejs"})," and ",(0,o.jsx)(n.a,{href:"https://yarnpkg.com/lang/en/",children:"yarn"}),", for developing Chaos Dashboard"]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"compiling-chaos-mesh",children:"Compiling Chaos Mesh"}),"\n",(0,o.jsx)(n.p,{children:"After installing the above tools, follow the steps below to configure the toolchain for compiling Chaos Mesh."}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Clone the Chaos Mesh repository to your local server."}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"git clone https://github.com/chaos-mesh/chaos-mesh.git\ncd chaos-mesh\n"})}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Make sure that ",(0,o.jsx)(n.a,{href:"https://docs.docker.com/install/",children:"Docker"})," is installed and running in your environment."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Compile Chaos Mesh:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"UI=1 make\n"})}),"\n",(0,o.jsx)(n.p,{children:"You should get these container images:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.code,{children:"ghcr.io/chaos-mesh/chaos-dashboard:latest"})}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.code,{children:"ghcr.io/chaos-mesh/chaos-mesh:latest"})}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.code,{children:"ghcr.io/chaos-mesh/chaos-daemon:latest"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"run-chaos-mesh-in-local-minkube-kubernetes-cluster",children:"Run Chaos Mesh in Local minkube Kubernetes Cluster"}),"\n",(0,o.jsx)(n.p,{children:"After compiling Chaos Mesh, you can run Chaos Mesh in a local Kubernetes cluster."}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Start a local Kubernetes cluster with minkube."}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"minikube start\n"})}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Load container images into minikube"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"minikube image load ghcr.io/chaos-mesh/chaos-dashboard:latest\nminikube image load ghcr.io/chaos-mesh/chaos-mesh:latest\nminikube image load ghcr.io/chaos-mesh/chaos-daemon:latest\n"})}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Install Chaos Mesh by Helm"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"helm upgrade --install chaos-mesh-debug ./helm/chaos-mesh --namespace=chaos-mesh-debug --create-namespace\n"})}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.admonition,{type:"note",children:[(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.code,{children:"minikube image load"})," would cost lots of time, so here is a trick to avoid load images again and again. Using docker from minikube node instead of host's docker."]}),(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:'minikube start --mount --mount-string "$(pwd):$(pwd)"\neval $(minikube -p minikube docker-env)\nUI=1 make\n'})})]}),"\n",(0,o.jsx)(n.h2,{id:"debug-chaos-mesh-in-local-environment",children:"Debug Chaos Mesh in local environment"}),"\n",(0,o.jsxs)(n.p,{children:["We could use ",(0,o.jsx)(n.a,{href:"https://github.com/go-delve/delve",children:"delve"})," with remote debugging to debug the Chaos Mesh in local environment."]}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Compile Chaos Mesh with Debug Info"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"UI=1 DEBUG=1 make\n"})}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Load container images into minikube"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"minikube image load ghcr.io/chaos-mesh/chaos-dashboard:latest\nminikube image load ghcr.io/chaos-mesh/chaos-mesh:latest\nminikube image load ghcr.io/chaos-mesh/chaos-daemon:latest\n"})}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Install Chaos Mesh by Helm with Enabling Remote Debugging"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"helm upgrade --install chaos-mesh-debug ./helm/chaos-mesh --namespace=chaos-mesh-debug --create-namespace --set chaosDlv.enable=true --set controllerManager.replicaCount=1\n"})}),"\n",(0,o.jsx)(n.admonition,{type:"note",children:(0,o.jsxs)(n.p,{children:["We would set 3 replicas for ",(0,o.jsx)(n.code,{children:"chaos-controller-manager"})," for HA purpose, ",(0,o.jsx)(n.code,{children:"--set controllerManager.replicaCount=1"})," would create 1 instance of ",(0,o.jsx)(n.code,{children:"chaos-controller-manager"})," for easier debugging."]})}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Setup Port-Forwarding and Configure IDE To Connect the Remote Debugger"}),"\n",(0,o.jsxs)(n.p,{children:["We could use ",(0,o.jsx)(n.code,{children:"kubectl port-forward"})," for port-forwarding the delve debugging server on a local port."]}),"\n",(0,o.jsxs)(n.p,{children:["For example, if we want to debug ",(0,o.jsx)(n.code,{children:"chaos-controller-manger"}),", we could execute the following command:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"kubectl -n chaos-mesh-debug port-forward chaos-controller-manager-766dc8488d-7n5bq 58000:8000\n"})}),"\n",(0,o.jsxs)(n.p,{children:["Then we could access the remote delve debugger server with ",(0,o.jsx)(n.code,{children:"127.0.0.1:58000"}),"."]}),"\n",(0,o.jsx)(n.admonition,{type:"note",children:(0,o.jsxs)(n.p,{children:["We always use ",(0,o.jsx)(n.code,{children:"8000"})," in the pod for serving the delve debug server, that's a convention. You could find that in helm templates files."]})}),"\n",(0,o.jsx)(n.p,{children:"Then we could configure our favorite IDE to connect to the remote debugger:"}),"\n",(0,o.jsxs)(n.p,{children:["For Goland, see ",(0,o.jsx)(n.a,{href:"https://www.jetbrains.com/help/go/attach-to-running-go-processes-with-debugger.html#attach-to-a-process-on-a-remote-machine",children:"Attach to running Go processes with the debugger#Attach to a process on a remote machine"}),"."]}),"\n",(0,o.jsxs)(n.p,{children:["For VSCode, see ",(0,o.jsx)(n.a,{href:"https://github.com/golang/vscode-go/blob/master/docs/debugging.md#remote-debugging",children:"vscode-go - Debugging#Remote Debugging"}),"."]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["For more detailed information, see ",(0,o.jsx)(n.a,{href:"https://github.com/chaos-mesh/chaos-mesh/blob/master/images/chaos-dlv/README.md",children:"README.md for container image chaos-dlv"}),"."]}),"\n",(0,o.jsx)(n.h2,{id:"learn-more",children:"Learn more"}),"\n",(0,o.jsxs)(n.p,{children:["After finishing the above preparation, you can try to ",(0,o.jsx)(n.a,{href:"/docs/2.4.3/add-new-chaos-experiment-type",children:"Add a New Chaos Experiment type"}),"."]})]})}function d(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(h,{...e})}):h(e)}},7463:(e,n,s)=>{s.d(n,{Z:()=>t,a:()=>a});var o=s(50959);const i={},r=o.createContext(i);function a(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkchaos_mesh_website=self.webpackChunkchaos_mesh_website||[]).push([[3903],{22757:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>r,metadata:()=>t,toc:()=>c});var o=s(11527),i=s(7463);const r={title:"Configure the Development Environment"},a=void 0,t={id:"configure-development-environment",title:"Configure the Development Environment",description:"This document describes how to configure a local development environment for Chaos Mesh.",source:"@site/versioned_docs/version-2.4.3/configure-development-environment.md",sourceDirName:".",slug:"/configure-development-environment",permalink:"/docs/2.4.3/configure-development-environment",draft:!1,unlisted:!1,editUrl:"https://github.com/chaos-mesh/website/edit/master/versioned_docs/version-2.4.3/configure-development-environment.md",tags:[],version:"2.4.3",frontMatter:{title:"Configure the Development Environment"},sidebar:"docs",previous:{title:"Developer Guide Overview",permalink:"/docs/2.4.3/developer-guide-overview"},next:{title:"Add New Chaos Experiment Type",permalink:"/docs/2.4.3/add-new-chaos-experiment-type"}},l={},c=[{value:"Configuration Requirements",id:"configuration-requirements",level:2},{value:"Compiling Chaos Mesh",id:"compiling-chaos-mesh",level:2},{value:"Run Chaos Mesh in Local minkube Kubernetes Cluster",id:"run-chaos-mesh-in-local-minkube-kubernetes-cluster",level:2},{value:"Debug Chaos Mesh in local environment",id:"debug-chaos-mesh-in-local-environment",level:2},{value:"Learn more",id:"learn-more",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,i.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.p,{children:"This document describes how to configure a local development environment for Chaos Mesh."}),"\n",(0,o.jsx)(n.p,{children:"Most components of Chaos Mesh are designed only for Linux, so we suggest that you also configure your development environment to run on Linux. For example, using a virtual machine or WSL 2, and using VSCode Remote as your editor."}),"\n",(0,o.jsx)(n.p,{children:"This document assumes that you use Linux, without the restriction on specific Linux distributions. If you persist to use Windows/MacOS, you might need some tricks to make it work by yourself."}),"\n",(0,o.jsx)(n.h2,{id:"configuration-requirements",children:"Configuration Requirements"}),"\n",(0,o.jsx)(n.p,{children:"Before configuring, we suggest to install the development tools for Chaos Mesh."}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"https://www.gnu.org/software/make/",children:"make"})}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"https://docs.docker.com/install/",children:"docker"})}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.a,{href:"https://go.dev/doc/install",children:"golang"}),", v1.18 or later versions"]}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"https://gcc.gnu.org/",children:"gcc"})}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.a,{href:"https://helm.sh/",children:"helm"}),", v3.9.0 or later versions"]}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"https://minikube.sigs.k8s.io/docs/start/",children:"minikube"})}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.a,{href:"https://nodejs.org/en/",children:"nodejs"})," and ",(0,o.jsx)(n.a,{href:"https://yarnpkg.com/lang/en/",children:"yarn"}),", for developing Chaos Dashboard"]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"compiling-chaos-mesh",children:"Compiling Chaos Mesh"}),"\n",(0,o.jsx)(n.p,{children:"After installing the above tools, follow the steps below to configure the toolchain for compiling Chaos Mesh."}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Clone the Chaos Mesh repository to your local server."}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"git clone https://github.com/chaos-mesh/chaos-mesh.git\ncd chaos-mesh\n"})}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Make sure that ",(0,o.jsx)(n.a,{href:"https://docs.docker.com/install/",children:"Docker"})," is installed and running in your environment."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Compile Chaos Mesh:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"UI=1 make\n"})}),"\n",(0,o.jsx)(n.p,{children:"You should get these container images:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.code,{children:"ghcr.io/chaos-mesh/chaos-dashboard:latest"})}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.code,{children:"ghcr.io/chaos-mesh/chaos-mesh:latest"})}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.code,{children:"ghcr.io/chaos-mesh/chaos-daemon:latest"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"run-chaos-mesh-in-local-minkube-kubernetes-cluster",children:"Run Chaos Mesh in Local minkube Kubernetes Cluster"}),"\n",(0,o.jsx)(n.p,{children:"After compiling Chaos Mesh, you can run Chaos Mesh in a local Kubernetes cluster."}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Start a local Kubernetes cluster with minkube."}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"minikube start\n"})}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Load container images into minikube"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"minikube image load ghcr.io/chaos-mesh/chaos-dashboard:latest\nminikube image load ghcr.io/chaos-mesh/chaos-mesh:latest\nminikube image load ghcr.io/chaos-mesh/chaos-daemon:latest\n"})}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Install Chaos Mesh by Helm"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"helm upgrade --install chaos-mesh-debug ./helm/chaos-mesh --namespace=chaos-mesh-debug --create-namespace\n"})}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.admonition,{type:"note",children:[(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.code,{children:"minikube image load"})," would cost lots of time, so here is a trick to avoid load images again and again. Using docker from minikube node instead of host's docker."]}),(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:'minikube start --mount --mount-string "$(pwd):$(pwd)"\neval $(minikube -p minikube docker-env)\nUI=1 make\n'})})]}),"\n",(0,o.jsx)(n.h2,{id:"debug-chaos-mesh-in-local-environment",children:"Debug Chaos Mesh in local environment"}),"\n",(0,o.jsxs)(n.p,{children:["We could use ",(0,o.jsx)(n.a,{href:"https://github.com/go-delve/delve",children:"delve"})," with remote debugging to debug the Chaos Mesh in local environment."]}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Compile Chaos Mesh with Debug Info"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"UI=1 DEBUGGER=1 make\n"})}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Load container images into minikube"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"minikube image load ghcr.io/chaos-mesh/chaos-dashboard:latest\nminikube image load ghcr.io/chaos-mesh/chaos-mesh:latest\nminikube image load ghcr.io/chaos-mesh/chaos-daemon:latest\n"})}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Install Chaos Mesh by Helm with Enabling Remote Debugging"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"helm upgrade --install chaos-mesh-debug ./helm/chaos-mesh --namespace=chaos-mesh-debug --create-namespace --set chaosDlv.enable=true --set controllerManager.replicaCount=1\n"})}),"\n",(0,o.jsx)(n.admonition,{type:"note",children:(0,o.jsxs)(n.p,{children:["We would set 3 replicas for ",(0,o.jsx)(n.code,{children:"chaos-controller-manager"})," for HA purpose, ",(0,o.jsx)(n.code,{children:"--set controllerManager.replicaCount=1"})," would create 1 instance of ",(0,o.jsx)(n.code,{children:"chaos-controller-manager"})," for easier debugging."]})}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Setup Port-Forwarding and Configure IDE To Connect the Remote Debugger"}),"\n",(0,o.jsxs)(n.p,{children:["We could use ",(0,o.jsx)(n.code,{children:"kubectl port-forward"})," for port-forwarding the delve debugging server on a local port."]}),"\n",(0,o.jsxs)(n.p,{children:["For example, if we want to debug ",(0,o.jsx)(n.code,{children:"chaos-controller-manger"}),", we could execute the following command:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"kubectl -n chaos-mesh-debug port-forward chaos-controller-manager-766dc8488d-7n5bq 58000:8000\n"})}),"\n",(0,o.jsxs)(n.p,{children:["Then we could access the remote delve debugger server with ",(0,o.jsx)(n.code,{children:"127.0.0.1:58000"}),"."]}),"\n",(0,o.jsx)(n.admonition,{type:"note",children:(0,o.jsxs)(n.p,{children:["We always use ",(0,o.jsx)(n.code,{children:"8000"})," in the pod for serving the delve debug server, that's a convention. You could find that in helm templates files."]})}),"\n",(0,o.jsx)(n.p,{children:"Then we could configure our favorite IDE to connect to the remote debugger:"}),"\n",(0,o.jsxs)(n.p,{children:["For Goland, see ",(0,o.jsx)(n.a,{href:"https://www.jetbrains.com/help/go/attach-to-running-go-processes-with-debugger.html#attach-to-a-process-on-a-remote-machine",children:"Attach to running Go processes with the debugger#Attach to a process on a remote machine"}),"."]}),"\n",(0,o.jsxs)(n.p,{children:["For VSCode, see ",(0,o.jsx)(n.a,{href:"https://github.com/golang/vscode-go/blob/master/docs/debugging.md#remote-debugging",children:"vscode-go - Debugging#Remote Debugging"}),"."]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["For more detailed information, see ",(0,o.jsx)(n.a,{href:"https://github.com/chaos-mesh/chaos-mesh/blob/master/images/chaos-dlv/README.md",children:"README.md for container image chaos-dlv"}),"."]}),"\n",(0,o.jsx)(n.h2,{id:"learn-more",children:"Learn more"}),"\n",(0,o.jsxs)(n.p,{children:["After finishing the above preparation, you can try to ",(0,o.jsx)(n.a,{href:"/docs/2.4.3/add-new-chaos-experiment-type",children:"Add a New Chaos Experiment type"}),"."]})]})}function d(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(h,{...e})}):h(e)}},7463:(e,n,s)=>{s.d(n,{Z:()=>t,a:()=>a});var o=s(50959);const i={},r=o.createContext(i);function a(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c3e7c0c9.384753ce.js b/assets/js/c3e7c0c9.37df451a.js similarity index 64% rename from assets/js/c3e7c0c9.384753ce.js rename to assets/js/c3e7c0c9.37df451a.js index c5ce7e78ce..ec6545efbd 100644 --- a/assets/js/c3e7c0c9.384753ce.js +++ b/assets/js/c3e7c0c9.37df451a.js @@ -1 +1 @@ -"use strict";(self.webpackChunkchaos_mesh_website=self.webpackChunkchaos_mesh_website||[]).push([[9379],{1756:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>r,metadata:()=>t,toc:()=>c});var o=s(11527),i=s(7463);const r={title:"Configure the Development Environment"},a=void 0,t={id:"configure-development-environment",title:"Configure the Development Environment",description:"This document describes how to configure a local development environment for Chaos Mesh.",source:"@site/versioned_docs/version-2.5.2/configure-development-environment.md",sourceDirName:".",slug:"/configure-development-environment",permalink:"/docs/2.5.2/configure-development-environment",draft:!1,unlisted:!1,editUrl:"https://github.com/chaos-mesh/website/edit/master/versioned_docs/version-2.5.2/configure-development-environment.md",tags:[],version:"2.5.2",frontMatter:{title:"Configure the Development Environment"},sidebar:"docs",previous:{title:"Developer Guide Overview",permalink:"/docs/2.5.2/developer-guide-overview"},next:{title:"Add New Chaos Experiment Type",permalink:"/docs/2.5.2/add-new-chaos-experiment-type"}},l={},c=[{value:"Configuration Requirements",id:"configuration-requirements",level:2},{value:"Compiling Chaos Mesh",id:"compiling-chaos-mesh",level:2},{value:"Run Chaos Mesh in Local minkube Kubernetes Cluster",id:"run-chaos-mesh-in-local-minkube-kubernetes-cluster",level:2},{value:"Debug Chaos Mesh in local environment",id:"debug-chaos-mesh-in-local-environment",level:2},{value:"Learn more",id:"learn-more",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,i.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.p,{children:"This document describes how to configure a local development environment for Chaos Mesh."}),"\n",(0,o.jsx)(n.p,{children:"Most components of Chaos Mesh are designed only for Linux, so we suggest that you also configure your development environment to run on Linux. For example, using a virtual machine or WSL 2, and using VSCode Remote as your editor."}),"\n",(0,o.jsx)(n.p,{children:"This document assumes that you use Linux, without the restriction on specific Linux distributions. If you persist to use Windows/MacOS, you might need some tricks to make it work by yourself."}),"\n",(0,o.jsx)(n.h2,{id:"configuration-requirements",children:"Configuration Requirements"}),"\n",(0,o.jsx)(n.p,{children:"Before configuring, we suggest to install the development tools for Chaos Mesh."}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"https://www.gnu.org/software/make/",children:"make"})}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"https://docs.docker.com/install/",children:"docker"})}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.a,{href:"https://go.dev/doc/install",children:"golang"}),", v1.18 or later versions"]}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"https://gcc.gnu.org/",children:"gcc"})}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.a,{href:"https://helm.sh/",children:"helm"}),", v3.9.0 or later versions"]}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"https://minikube.sigs.k8s.io/docs/start/",children:"minikube"})}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.a,{href:"https://nodejs.org/en/",children:"nodejs"})," and ",(0,o.jsx)(n.a,{href:"https://yarnpkg.com/lang/en/",children:"yarn"}),", for developing Chaos Dashboard"]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"compiling-chaos-mesh",children:"Compiling Chaos Mesh"}),"\n",(0,o.jsx)(n.p,{children:"After installing the above tools, follow the steps below to configure the toolchain for compiling Chaos Mesh."}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Clone the Chaos Mesh repository to your local server."}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"git clone https://github.com/chaos-mesh/chaos-mesh.git\ncd chaos-mesh\n"})}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Make sure that ",(0,o.jsx)(n.a,{href:"https://docs.docker.com/install/",children:"Docker"})," is installed and running in your environment."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Compile Chaos Mesh:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"UI=1 make\n"})}),"\n",(0,o.jsx)(n.p,{children:"You should get these container images:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.code,{children:"ghcr.io/chaos-mesh/chaos-dashboard:latest"})}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.code,{children:"ghcr.io/chaos-mesh/chaos-mesh:latest"})}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.code,{children:"ghcr.io/chaos-mesh/chaos-daemon:latest"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"run-chaos-mesh-in-local-minkube-kubernetes-cluster",children:"Run Chaos Mesh in Local minkube Kubernetes Cluster"}),"\n",(0,o.jsx)(n.p,{children:"After compiling Chaos Mesh, you can run Chaos Mesh in a local Kubernetes cluster."}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Start a local Kubernetes cluster with minkube."}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"minikube start\n"})}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Load container images into minikube"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"minikube image load ghcr.io/chaos-mesh/chaos-dashboard:latest\nminikube image load ghcr.io/chaos-mesh/chaos-mesh:latest\nminikube image load ghcr.io/chaos-mesh/chaos-daemon:latest\n"})}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Install Chaos Mesh by Helm"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"helm upgrade --install chaos-mesh-debug ./helm/chaos-mesh --namespace=chaos-mesh-debug --create-namespace\n"})}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.admonition,{type:"note",children:[(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.code,{children:"minikube image load"})," would cost lots of time, so here is a trick to avoid load images again and again. Using docker from minikube node instead of host's docker."]}),(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:'minikube start --mount --mount-string "$(pwd):$(pwd)"\neval $(minikube -p minikube docker-env)\nUI=1 make\n'})})]}),"\n",(0,o.jsx)(n.h2,{id:"debug-chaos-mesh-in-local-environment",children:"Debug Chaos Mesh in local environment"}),"\n",(0,o.jsxs)(n.p,{children:["We could use ",(0,o.jsx)(n.a,{href:"https://github.com/go-delve/delve",children:"delve"})," with remote debugging to debug the Chaos Mesh in local environment."]}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Compile Chaos Mesh with Debug Info"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"UI=1 DEBUG=1 make\n"})}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Load container images into minikube"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"minikube image load ghcr.io/chaos-mesh/chaos-dashboard:latest\nminikube image load ghcr.io/chaos-mesh/chaos-mesh:latest\nminikube image load ghcr.io/chaos-mesh/chaos-daemon:latest\n"})}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Install Chaos Mesh by Helm with Enabling Remote Debugging"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"helm upgrade --install chaos-mesh-debug ./helm/chaos-mesh --namespace=chaos-mesh-debug --create-namespace --set chaosDlv.enable=true --set controllerManager.replicaCount=1\n"})}),"\n",(0,o.jsx)(n.admonition,{type:"note",children:(0,o.jsxs)(n.p,{children:["We would set 3 replicas for ",(0,o.jsx)(n.code,{children:"chaos-controller-manager"})," for HA purpose, ",(0,o.jsx)(n.code,{children:"--set controllerManager.replicaCount=1"})," would create 1 instance of ",(0,o.jsx)(n.code,{children:"chaos-controller-manager"})," for easier debugging."]})}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Setup Port-Forwarding and Configure IDE To Connect the Remote Debugger"}),"\n",(0,o.jsxs)(n.p,{children:["We could use ",(0,o.jsx)(n.code,{children:"kubectl port-forward"})," for port-forwarding the delve debugging server on a local port."]}),"\n",(0,o.jsxs)(n.p,{children:["For example, if we want to debug ",(0,o.jsx)(n.code,{children:"chaos-controller-manger"}),", we could execute the following command:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"kubectl -n chaos-mesh-debug port-forward chaos-controller-manager-766dc8488d-7n5bq 58000:8000\n"})}),"\n",(0,o.jsxs)(n.p,{children:["Then we could access the remote delve debugger server with ",(0,o.jsx)(n.code,{children:"127.0.0.1:58000"}),"."]}),"\n",(0,o.jsx)(n.admonition,{type:"note",children:(0,o.jsxs)(n.p,{children:["We always use ",(0,o.jsx)(n.code,{children:"8000"})," in the pod for serving the delve debug server, that's a convention. You could find that in helm templates files."]})}),"\n",(0,o.jsx)(n.p,{children:"Then we could configure our favorite IDE to connect to the remote debugger:"}),"\n",(0,o.jsxs)(n.p,{children:["For Goland, see ",(0,o.jsx)(n.a,{href:"https://www.jetbrains.com/help/go/attach-to-running-go-processes-with-debugger.html#attach-to-a-process-on-a-remote-machine",children:"Attach to running Go processes with the debugger#Attach to a process on a remote machine"}),"."]}),"\n",(0,o.jsxs)(n.p,{children:["For VSCode, see ",(0,o.jsx)(n.a,{href:"https://github.com/golang/vscode-go/blob/master/docs/debugging.md#remote-debugging",children:"vscode-go - Debugging#Remote Debugging"}),"."]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["For more detailed information, see ",(0,o.jsx)(n.a,{href:"https://github.com/chaos-mesh/chaos-mesh/blob/master/images/chaos-dlv/README.md",children:"README.md for container image chaos-dlv"}),"."]}),"\n",(0,o.jsx)(n.h2,{id:"learn-more",children:"Learn more"}),"\n",(0,o.jsxs)(n.p,{children:["After finishing the above preparation, you can try to ",(0,o.jsx)(n.a,{href:"/docs/2.5.2/add-new-chaos-experiment-type",children:"Add a New Chaos Experiment type"}),"."]})]})}function d(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(h,{...e})}):h(e)}},7463:(e,n,s)=>{s.d(n,{Z:()=>t,a:()=>a});var o=s(50959);const i={},r=o.createContext(i);function a(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkchaos_mesh_website=self.webpackChunkchaos_mesh_website||[]).push([[9379],{1756:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>r,metadata:()=>t,toc:()=>c});var o=s(11527),i=s(7463);const r={title:"Configure the Development Environment"},a=void 0,t={id:"configure-development-environment",title:"Configure the Development Environment",description:"This document describes how to configure a local development environment for Chaos Mesh.",source:"@site/versioned_docs/version-2.5.2/configure-development-environment.md",sourceDirName:".",slug:"/configure-development-environment",permalink:"/docs/2.5.2/configure-development-environment",draft:!1,unlisted:!1,editUrl:"https://github.com/chaos-mesh/website/edit/master/versioned_docs/version-2.5.2/configure-development-environment.md",tags:[],version:"2.5.2",frontMatter:{title:"Configure the Development Environment"},sidebar:"docs",previous:{title:"Developer Guide Overview",permalink:"/docs/2.5.2/developer-guide-overview"},next:{title:"Add New Chaos Experiment Type",permalink:"/docs/2.5.2/add-new-chaos-experiment-type"}},l={},c=[{value:"Configuration Requirements",id:"configuration-requirements",level:2},{value:"Compiling Chaos Mesh",id:"compiling-chaos-mesh",level:2},{value:"Run Chaos Mesh in Local minkube Kubernetes Cluster",id:"run-chaos-mesh-in-local-minkube-kubernetes-cluster",level:2},{value:"Debug Chaos Mesh in local environment",id:"debug-chaos-mesh-in-local-environment",level:2},{value:"Learn more",id:"learn-more",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,i.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.p,{children:"This document describes how to configure a local development environment for Chaos Mesh."}),"\n",(0,o.jsx)(n.p,{children:"Most components of Chaos Mesh are designed only for Linux, so we suggest that you also configure your development environment to run on Linux. For example, using a virtual machine or WSL 2, and using VSCode Remote as your editor."}),"\n",(0,o.jsx)(n.p,{children:"This document assumes that you use Linux, without the restriction on specific Linux distributions. If you persist to use Windows/MacOS, you might need some tricks to make it work by yourself."}),"\n",(0,o.jsx)(n.h2,{id:"configuration-requirements",children:"Configuration Requirements"}),"\n",(0,o.jsx)(n.p,{children:"Before configuring, we suggest to install the development tools for Chaos Mesh."}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"https://www.gnu.org/software/make/",children:"make"})}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"https://docs.docker.com/install/",children:"docker"})}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.a,{href:"https://go.dev/doc/install",children:"golang"}),", v1.18 or later versions"]}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"https://gcc.gnu.org/",children:"gcc"})}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.a,{href:"https://helm.sh/",children:"helm"}),", v3.9.0 or later versions"]}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"https://minikube.sigs.k8s.io/docs/start/",children:"minikube"})}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.a,{href:"https://nodejs.org/en/",children:"nodejs"})," and ",(0,o.jsx)(n.a,{href:"https://yarnpkg.com/lang/en/",children:"yarn"}),", for developing Chaos Dashboard"]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"compiling-chaos-mesh",children:"Compiling Chaos Mesh"}),"\n",(0,o.jsx)(n.p,{children:"After installing the above tools, follow the steps below to configure the toolchain for compiling Chaos Mesh."}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Clone the Chaos Mesh repository to your local server."}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"git clone https://github.com/chaos-mesh/chaos-mesh.git\ncd chaos-mesh\n"})}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Make sure that ",(0,o.jsx)(n.a,{href:"https://docs.docker.com/install/",children:"Docker"})," is installed and running in your environment."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Compile Chaos Mesh:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"UI=1 make\n"})}),"\n",(0,o.jsx)(n.p,{children:"You should get these container images:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.code,{children:"ghcr.io/chaos-mesh/chaos-dashboard:latest"})}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.code,{children:"ghcr.io/chaos-mesh/chaos-mesh:latest"})}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.code,{children:"ghcr.io/chaos-mesh/chaos-daemon:latest"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"run-chaos-mesh-in-local-minkube-kubernetes-cluster",children:"Run Chaos Mesh in Local minkube Kubernetes Cluster"}),"\n",(0,o.jsx)(n.p,{children:"After compiling Chaos Mesh, you can run Chaos Mesh in a local Kubernetes cluster."}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Start a local Kubernetes cluster with minkube."}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"minikube start\n"})}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Load container images into minikube"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"minikube image load ghcr.io/chaos-mesh/chaos-dashboard:latest\nminikube image load ghcr.io/chaos-mesh/chaos-mesh:latest\nminikube image load ghcr.io/chaos-mesh/chaos-daemon:latest\n"})}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Install Chaos Mesh by Helm"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"helm upgrade --install chaos-mesh-debug ./helm/chaos-mesh --namespace=chaos-mesh-debug --create-namespace\n"})}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.admonition,{type:"note",children:[(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.code,{children:"minikube image load"})," would cost lots of time, so here is a trick to avoid load images again and again. Using docker from minikube node instead of host's docker."]}),(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:'minikube start --mount --mount-string "$(pwd):$(pwd)"\neval $(minikube -p minikube docker-env)\nUI=1 make\n'})})]}),"\n",(0,o.jsx)(n.h2,{id:"debug-chaos-mesh-in-local-environment",children:"Debug Chaos Mesh in local environment"}),"\n",(0,o.jsxs)(n.p,{children:["We could use ",(0,o.jsx)(n.a,{href:"https://github.com/go-delve/delve",children:"delve"})," with remote debugging to debug the Chaos Mesh in local environment."]}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Compile Chaos Mesh with Debug Info"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"UI=1 DEBUGGER=1 make\n"})}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Load container images into minikube"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"minikube image load ghcr.io/chaos-mesh/chaos-dashboard:latest\nminikube image load ghcr.io/chaos-mesh/chaos-mesh:latest\nminikube image load ghcr.io/chaos-mesh/chaos-daemon:latest\n"})}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Install Chaos Mesh by Helm with Enabling Remote Debugging"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"helm upgrade --install chaos-mesh-debug ./helm/chaos-mesh --namespace=chaos-mesh-debug --create-namespace --set chaosDlv.enable=true --set controllerManager.replicaCount=1\n"})}),"\n",(0,o.jsx)(n.admonition,{type:"note",children:(0,o.jsxs)(n.p,{children:["We would set 3 replicas for ",(0,o.jsx)(n.code,{children:"chaos-controller-manager"})," for HA purpose, ",(0,o.jsx)(n.code,{children:"--set controllerManager.replicaCount=1"})," would create 1 instance of ",(0,o.jsx)(n.code,{children:"chaos-controller-manager"})," for easier debugging."]})}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Setup Port-Forwarding and Configure IDE To Connect the Remote Debugger"}),"\n",(0,o.jsxs)(n.p,{children:["We could use ",(0,o.jsx)(n.code,{children:"kubectl port-forward"})," for port-forwarding the delve debugging server on a local port."]}),"\n",(0,o.jsxs)(n.p,{children:["For example, if we want to debug ",(0,o.jsx)(n.code,{children:"chaos-controller-manger"}),", we could execute the following command:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"kubectl -n chaos-mesh-debug port-forward chaos-controller-manager-766dc8488d-7n5bq 58000:8000\n"})}),"\n",(0,o.jsxs)(n.p,{children:["Then we could access the remote delve debugger server with ",(0,o.jsx)(n.code,{children:"127.0.0.1:58000"}),"."]}),"\n",(0,o.jsx)(n.admonition,{type:"note",children:(0,o.jsxs)(n.p,{children:["We always use ",(0,o.jsx)(n.code,{children:"8000"})," in the pod for serving the delve debug server, that's a convention. You could find that in helm templates files."]})}),"\n",(0,o.jsx)(n.p,{children:"Then we could configure our favorite IDE to connect to the remote debugger:"}),"\n",(0,o.jsxs)(n.p,{children:["For Goland, see ",(0,o.jsx)(n.a,{href:"https://www.jetbrains.com/help/go/attach-to-running-go-processes-with-debugger.html#attach-to-a-process-on-a-remote-machine",children:"Attach to running Go processes with the debugger#Attach to a process on a remote machine"}),"."]}),"\n",(0,o.jsxs)(n.p,{children:["For VSCode, see ",(0,o.jsx)(n.a,{href:"https://github.com/golang/vscode-go/blob/master/docs/debugging.md#remote-debugging",children:"vscode-go - Debugging#Remote Debugging"}),"."]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["For more detailed information, see ",(0,o.jsx)(n.a,{href:"https://github.com/chaos-mesh/chaos-mesh/blob/master/images/chaos-dlv/README.md",children:"README.md for container image chaos-dlv"}),"."]}),"\n",(0,o.jsx)(n.h2,{id:"learn-more",children:"Learn more"}),"\n",(0,o.jsxs)(n.p,{children:["After finishing the above preparation, you can try to ",(0,o.jsx)(n.a,{href:"/docs/2.5.2/add-new-chaos-experiment-type",children:"Add a New Chaos Experiment type"}),"."]})]})}function d(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(h,{...e})}):h(e)}},7463:(e,n,s)=>{s.d(n,{Z:()=>t,a:()=>a});var o=s(50959);const i={},r=o.createContext(i);function a(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fad1e435.1241c07b.js b/assets/js/fad1e435.11150e44.js similarity index 57% rename from assets/js/fad1e435.1241c07b.js rename to assets/js/fad1e435.11150e44.js index dbfee1d692..6a4019c014 100644 --- a/assets/js/fad1e435.1241c07b.js +++ b/assets/js/fad1e435.11150e44.js @@ -1 +1 @@ -"use strict";(self.webpackChunkchaos_mesh_website=self.webpackChunkchaos_mesh_website||[]).push([[6434],{32785:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>d,frontMatter:()=>t,metadata:()=>a,toc:()=>c});var i=s(11527),o=s(7463);const t={title:"Configure the Development Environment"},r=void 0,a={id:"configure-development-environment",title:"Configure the Development Environment",description:"This document describes how to configure a local development environment for Chaos Mesh.",source:"@site/docs/configure-development-environment.md",sourceDirName:".",slug:"/configure-development-environment",permalink:"/docs/next/configure-development-environment",draft:!1,unlisted:!1,editUrl:"https://github.com/chaos-mesh/website/edit/master/docs/configure-development-environment.md",tags:[],version:"current",frontMatter:{title:"Configure the Development Environment"},sidebar:"docs",previous:{title:"Developer Guide Overview",permalink:"/docs/next/developer-guide-overview"},next:{title:"Add a New Chaos Experiment Type",permalink:"/docs/next/add-new-chaos-experiment-type"}},l={},c=[{value:"Configuration Requirements",id:"configuration-requirements",level:2},{value:"Compiling Chaos Mesh",id:"compiling-chaos-mesh",level:2},{value:"Run Chaos Mesh in local minkube Kubernetes cluster",id:"run-chaos-mesh-in-local-minkube-kubernetes-cluster",level:2},{value:"Debug Chaos Mesh in local environment",id:"debug-chaos-mesh-in-local-environment",level:2},{value:"What's Next",id:"whats-next",level:2},{value:"FAQ",id:"faq",level:2},{value:"Run make fail with error obtaining VCS status: exit status 128 in MacOS",id:"run-make-fail-with-error-obtaining-vcs-status-exit-status-128-in-macos",level:3}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:"This document describes how to configure a local development environment for Chaos Mesh."}),"\n",(0,i.jsxs)(n.p,{children:["Most components of Chaos Mesh are ",(0,i.jsx)(n.strong,{children:"only designed for Linux"}),", so we suggest that you also configure your development environment to run on Linux. For example, use a virtual machine or WSL 2 and use VSCode Remote as your editor."]}),"\n",(0,i.jsx)(n.p,{children:"This document assumes that you are using Linux, without the limitations of specific Linux distributions. If you insist on using Windows/MacOS, you may need some tricks to make it work for you (For example, some make targets may fail depending on the environment)."}),"\n",(0,i.jsx)(n.h2,{id:"configuration-requirements",children:"Configuration Requirements"}),"\n",(0,i.jsx)(n.p,{children:"Before configuring, it is recommended that you install the development tools listed below, most of them may already be installed in your environment:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://www.gnu.org/software/make/",children:"make"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://docs.docker.com/install/",children:"docker"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://go.dev/doc/install",children:"golang"}),", ",(0,i.jsx)(n.code,{children:"v1.18"})," or later versions"]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://gcc.gnu.org/",children:"gcc"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://helm.sh/",children:"helm"}),", ",(0,i.jsx)(n.code,{children:"v3.9.0"})," or later versions"]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://minikube.sigs.k8s.io/docs/start/",children:"minikube"})}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Optional:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://nodejs.org/en/",children:"nodejs"})," and ",(0,i.jsx)(n.a,{href:"https://pnpm.io/",children:"pnpm"}),", for developing Chaos Dashboard"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"compiling-chaos-mesh",children:"Compiling Chaos Mesh"}),"\n",(0,i.jsx)(n.p,{children:"After installing, follow the steps below to compile Chaos Mesh."}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Clone the Chaos Mesh repository to your local server:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"git clone https://github.com/chaos-mesh/chaos-mesh.git\ncd chaos-mesh\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Make sure that ",(0,i.jsx)(n.a,{href:"https://docs.docker.com/install/",children:"Docker"})," is installed and running."]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsx)(n.p,{children:"Chaos Mesh relies on Docker to build container images, this is for consistency with the production environment."})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Compile Chaos Mesh:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"UI=1 make image\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"UI=1"})," means that we will compile the user interface of Chaos Dashboard, if you don't need it, you can omit this env."]})}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["If you want to specify the tag of the image, you can use ",(0,i.jsx)(n.code,{children:"UI=1 make IMAGE_TAG=dev image"}),"."]})}),"\n",(0,i.jsx)(n.p,{children:"After compiling, you should get the following container images:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"ghcr.io/chaos-mesh/chaos-dashboard:latest"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"ghcr.io/chaos-mesh/chaos-mesh:latest"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"ghcr.io/chaos-mesh/chaos-daemon:latest"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"run-chaos-mesh-in-local-minkube-kubernetes-cluster",children:"Run Chaos Mesh in local minkube Kubernetes cluster"}),"\n",(0,i.jsx)(n.p,{children:"Now you can run Chaos Mesh in a local Kubernetes cluster after compiling."}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Start a local Kubernetes cluster with minkube:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"minikube start\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Load container images into minikube:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"minikube image load ghcr.io/chaos-mesh/chaos-dashboard:latest\nminikube image load ghcr.io/chaos-mesh/chaos-mesh:latest\nminikube image load ghcr.io/chaos-mesh/chaos-daemon:latest\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Install Chaos Mesh by Helm:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"helm upgrade --install chaos-mesh-debug ./helm/chaos-mesh --namespace=chaos-mesh-debug --create-namespace\n"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.admonition,{type:"tip",children:[(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"minikube image load"})," would cost lots of time, so here is a trick to avoid load images again and again during development. Using docker from minikube node instead of host's docker:"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:'minikube start --mount --mount-string "$(pwd):$(pwd)"\neval $(minikube -p minikube docker-env)\nUI=1 make image\n'})})]}),"\n",(0,i.jsx)(n.h2,{id:"debug-chaos-mesh-in-local-environment",children:"Debug Chaos Mesh in local environment"}),"\n",(0,i.jsxs)(n.p,{children:["We could use ",(0,i.jsx)(n.a,{href:"https://github.com/go-delve/delve",children:"delve"})," with remote debugging to debug the Chaos Mesh in local environment."]}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Compile Chaos Mesh with ",(0,i.jsx)(n.code,{children:"DEBUG=1"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"UI=1 DEBUG=1 make image\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Load container images into minikube:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"minikube image load ghcr.io/chaos-mesh/chaos-mesh:latest\nminikube image load ghcr.io/chaos-mesh/chaos-daemon:latest\nminikube image load ghcr.io/chaos-mesh/chaos-dashboard:latest\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Install Chaos Mesh and enable Remote Debugging:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"helm upgrade --install chaos-mesh-debug ./helm/chaos-mesh --namespace=chaos-mesh-debug --create-namespace --set chaosDlv.enable=true --set controllerManager.leaderElection.enabled=false\n"})}),"\n",(0,i.jsxs)(n.admonition,{type:"note",children:[(0,i.jsxs)(n.p,{children:["To ensure high availability, Chaos Mesh turns on ",(0,i.jsx)(n.code,{children:"leader-election"})," feature by default and will create 3 replicas for ",(0,i.jsx)(n.code,{children:"chaos-controller-manager"}),". We will use ",(0,i.jsx)(n.code,{children:"controllerManager.leaderElection.enabled=false"})," to ensure that Chaos Mesh only creates 1 instance of ",(0,i.jsx)(n.code,{children:"chaos-controller-manager"})," for easier debugging."]}),(0,i.jsxs)(n.p,{children:["For more details, see ",(0,i.jsx)(n.a,{href:"/docs/next/production-installation-using-helm#step-4-install-chaos-mesh-in-different-environments",children:"Install Chaos Mesh in different environments"}),"."]})]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Setup Port-Forwarding and Configure IDE To Connect the Remote Debugger:"}),"\n",(0,i.jsxs)(n.p,{children:["We could use ",(0,i.jsx)(n.code,{children:"kubectl port-forward"})," to forward the delve debugging server to a local port."]}),"\n",(0,i.jsxs)(n.p,{children:["For example, if we want to debug ",(0,i.jsx)(n.code,{children:"chaos-controller-manger"}),", we could execute the following command:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"kubectl -n chaos-mesh-debug port-forward chaos-controller-manager-766dc8488d-7n5bq 58000:8000\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Then we could access the remote delve debugger server with ",(0,i.jsx)(n.code,{children:"127.0.0.1:58000"}),"."]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["We always use ",(0,i.jsx)(n.code,{children:"8000"})," in the pod for serving the delve debug server, that's a convention. You could find that in helm templates files."]})}),"\n",(0,i.jsx)(n.p,{children:"Then we could configure our favorite IDE to connect to the remote debugger, below are some examples:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["For Goland, see ",(0,i.jsx)(n.a,{href:"https://www.jetbrains.com/help/go/attach-to-running-go-processes-with-debugger.html#attach-to-a-process-on-a-remote-machine",children:"Attach to running Go processes with the debugger#Attach to a process on a remote machine"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["For VSCode, see ",(0,i.jsx)(n.a,{href:"https://github.com/golang/vscode-go/blob/master/docs/debugging.md#remote-debugging",children:"vscode-go - Debugging#Remote Debugging"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["For more detailed information, see ",(0,i.jsx)(n.a,{href:"https://github.com/chaos-mesh/chaos-mesh/blob/master/images/chaos-dlv/README.md",children:"README.md for container image chaos-dlv"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"whats-next",children:"What's Next"}),"\n",(0,i.jsxs)(n.p,{children:["After finishing the above preparation, you can try to ",(0,i.jsx)(n.a,{href:"/docs/next/add-new-chaos-experiment-type",children:"Add a New Chaos Experiment Type"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"faq",children:"FAQ"}),"\n",(0,i.jsxs)(n.h3,{id:"run-make-fail-with-error-obtaining-vcs-status-exit-status-128-in-macos",children:["Run make fail with ",(0,i.jsx)(n.code,{children:"error obtaining VCS status: exit status 128"})," in MacOS"]}),"\n",(0,i.jsxs)(n.p,{children:["The reason is related to ",(0,i.jsx)(n.a,{href:"https://github.blog/2022-04-12-git-security-vulnerability-announced/",children:"https://github.blog/2022-04-12-git-security-vulnerability-announced/"}),". It's recommended you to read it first."]}),"\n",(0,i.jsxs)(n.p,{children:["Chaos Mesh will start the container (",(0,i.jsx)(n.code,{children:"dev-env"})," or ",(0,i.jsx)(n.code,{children:"build-env"}),") with the current user (when you call ",(0,i.jsx)(n.code,{children:"make"}),"). You can find the appropriate ",(0,i.jsx)(n.code,{children:"--user"})," flag in ",(0,i.jsx)(n.a,{href:"https://github.com/chaos-mesh/chaos-mesh/blob/813b650c02e0b065ae5c4707725c346929ab1847/build/get_env_shell.py#L81C10-L81C10",children:"get_env_shell.py#L81C10-L81C10"}),". So when Git is looking for a top-level ",(0,i.jsx)(n.code,{children:".git"})," directory, it will stop if its directory traversal changes ownership from the current user."]}),"\n",(0,i.jsxs)(n.p,{children:["A temporary solution for now is to comment out the line of ",(0,i.jsx)(n.code,{children:"--user"}),"."]})]})}function d(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},7463:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>r});var i=s(50959);const o={},t=i.createContext(o);function r(e){const n=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkchaos_mesh_website=self.webpackChunkchaos_mesh_website||[]).push([[6434],{32785:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>d,frontMatter:()=>t,metadata:()=>a,toc:()=>c});var i=s(11527),o=s(7463);const t={title:"Configure the Development Environment"},r=void 0,a={id:"configure-development-environment",title:"Configure the Development Environment",description:"This document describes how to configure a local development environment for Chaos Mesh.",source:"@site/docs/configure-development-environment.md",sourceDirName:".",slug:"/configure-development-environment",permalink:"/docs/next/configure-development-environment",draft:!1,unlisted:!1,editUrl:"https://github.com/chaos-mesh/website/edit/master/docs/configure-development-environment.md",tags:[],version:"current",frontMatter:{title:"Configure the Development Environment"},sidebar:"docs",previous:{title:"Developer Guide Overview",permalink:"/docs/next/developer-guide-overview"},next:{title:"Add a New Chaos Experiment Type",permalink:"/docs/next/add-new-chaos-experiment-type"}},l={},c=[{value:"Configuration Requirements",id:"configuration-requirements",level:2},{value:"Compiling Chaos Mesh",id:"compiling-chaos-mesh",level:2},{value:"Run Chaos Mesh in local minkube Kubernetes cluster",id:"run-chaos-mesh-in-local-minkube-kubernetes-cluster",level:2},{value:"Debug Chaos Mesh in local environment",id:"debug-chaos-mesh-in-local-environment",level:2},{value:"What's Next",id:"whats-next",level:2},{value:"FAQ",id:"faq",level:2},{value:"Run make fail with error obtaining VCS status: exit status 128 in MacOS",id:"run-make-fail-with-error-obtaining-vcs-status-exit-status-128-in-macos",level:3}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:"This document describes how to configure a local development environment for Chaos Mesh."}),"\n",(0,i.jsxs)(n.p,{children:["Most components of Chaos Mesh are ",(0,i.jsx)(n.strong,{children:"only designed for Linux"}),", so we suggest that you also configure your development environment to run on Linux. For example, use a virtual machine or WSL 2 and use VSCode Remote as your editor."]}),"\n",(0,i.jsx)(n.p,{children:"This document assumes that you are using Linux, without the limitations of specific Linux distributions. If you insist on using Windows/MacOS, you may need some tricks to make it work for you (For example, some make targets may fail depending on the environment)."}),"\n",(0,i.jsx)(n.h2,{id:"configuration-requirements",children:"Configuration Requirements"}),"\n",(0,i.jsx)(n.p,{children:"Before configuring, it is recommended that you install the development tools listed below, most of them may already be installed in your environment:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://www.gnu.org/software/make/",children:"make"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://docs.docker.com/install/",children:"docker"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://go.dev/doc/install",children:"golang"}),", ",(0,i.jsx)(n.code,{children:"v1.18"})," or later versions"]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://gcc.gnu.org/",children:"gcc"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://helm.sh/",children:"helm"}),", ",(0,i.jsx)(n.code,{children:"v3.9.0"})," or later versions"]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://minikube.sigs.k8s.io/docs/start/",children:"minikube"})}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Optional:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://nodejs.org/en/",children:"nodejs"})," and ",(0,i.jsx)(n.a,{href:"https://pnpm.io/",children:"pnpm"}),", for developing Chaos Dashboard"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"compiling-chaos-mesh",children:"Compiling Chaos Mesh"}),"\n",(0,i.jsx)(n.p,{children:"After installing, follow the steps below to compile Chaos Mesh."}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Clone the Chaos Mesh repository to your local server:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"git clone https://github.com/chaos-mesh/chaos-mesh.git\ncd chaos-mesh\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Make sure that ",(0,i.jsx)(n.a,{href:"https://docs.docker.com/install/",children:"Docker"})," is installed and running."]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsx)(n.p,{children:"Chaos Mesh relies on Docker to build container images, this is for consistency with the production environment."})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Compile Chaos Mesh:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"UI=1 make image\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"UI=1"})," means that we will compile the user interface of Chaos Dashboard, if you don't need it, you can omit this env."]})}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["If you want to specify the tag of the image, you can use ",(0,i.jsx)(n.code,{children:"UI=1 make IMAGE_TAG=dev image"}),"."]})}),"\n",(0,i.jsx)(n.p,{children:"After compiling, you should get the following container images:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"ghcr.io/chaos-mesh/chaos-dashboard:latest"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"ghcr.io/chaos-mesh/chaos-mesh:latest"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"ghcr.io/chaos-mesh/chaos-daemon:latest"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"run-chaos-mesh-in-local-minkube-kubernetes-cluster",children:"Run Chaos Mesh in local minkube Kubernetes cluster"}),"\n",(0,i.jsx)(n.p,{children:"Now you can run Chaos Mesh in a local Kubernetes cluster after compiling."}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Start a local Kubernetes cluster with minkube:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"minikube start\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Load container images into minikube:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"minikube image load ghcr.io/chaos-mesh/chaos-dashboard:latest\nminikube image load ghcr.io/chaos-mesh/chaos-mesh:latest\nminikube image load ghcr.io/chaos-mesh/chaos-daemon:latest\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Install Chaos Mesh by Helm:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"helm upgrade --install chaos-mesh-debug ./helm/chaos-mesh --namespace=chaos-mesh-debug --create-namespace\n"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.admonition,{type:"tip",children:[(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"minikube image load"})," would cost lots of time, so here is a trick to avoid load images again and again during development. Using docker from minikube node instead of host's docker:"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:'minikube start --mount --mount-string "$(pwd):$(pwd)"\neval $(minikube -p minikube docker-env)\nUI=1 make image\n'})})]}),"\n",(0,i.jsx)(n.h2,{id:"debug-chaos-mesh-in-local-environment",children:"Debug Chaos Mesh in local environment"}),"\n",(0,i.jsxs)(n.p,{children:["We could use ",(0,i.jsx)(n.a,{href:"https://github.com/go-delve/delve",children:"delve"})," with remote debugging to debug the Chaos Mesh in local environment."]}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Compile Chaos Mesh with ",(0,i.jsx)(n.code,{children:"DEBUGGER=1"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"UI=1 DEBUGGER=1 make image\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Load container images into minikube:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"minikube image load ghcr.io/chaos-mesh/chaos-mesh:latest\nminikube image load ghcr.io/chaos-mesh/chaos-daemon:latest\nminikube image load ghcr.io/chaos-mesh/chaos-dashboard:latest\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Install Chaos Mesh and enable Remote Debugging:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"helm upgrade --install chaos-mesh-debug ./helm/chaos-mesh --namespace=chaos-mesh-debug --create-namespace --set chaosDlv.enable=true --set controllerManager.leaderElection.enabled=false\n"})}),"\n",(0,i.jsxs)(n.admonition,{type:"note",children:[(0,i.jsxs)(n.p,{children:["To ensure high availability, Chaos Mesh turns on ",(0,i.jsx)(n.code,{children:"leader-election"})," feature by default and will create 3 replicas for ",(0,i.jsx)(n.code,{children:"chaos-controller-manager"}),". We will use ",(0,i.jsx)(n.code,{children:"controllerManager.leaderElection.enabled=false"})," to ensure that Chaos Mesh only creates 1 instance of ",(0,i.jsx)(n.code,{children:"chaos-controller-manager"})," for easier debugging."]}),(0,i.jsxs)(n.p,{children:["For more details, see ",(0,i.jsx)(n.a,{href:"/docs/next/production-installation-using-helm#step-4-install-chaos-mesh-in-different-environments",children:"Install Chaos Mesh in different environments"}),"."]})]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Setup Port-Forwarding and Configure IDE To Connect the Remote Debugger:"}),"\n",(0,i.jsxs)(n.p,{children:["We could use ",(0,i.jsx)(n.code,{children:"kubectl port-forward"})," to forward the delve debugging server to a local port."]}),"\n",(0,i.jsxs)(n.p,{children:["For example, if we want to debug ",(0,i.jsx)(n.code,{children:"chaos-controller-manger"}),", we could execute the following command:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"kubectl -n chaos-mesh-debug port-forward chaos-controller-manager-766dc8488d-7n5bq 58000:8000\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Then we could access the remote delve debugger server with ",(0,i.jsx)(n.code,{children:"127.0.0.1:58000"}),"."]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["We always use ",(0,i.jsx)(n.code,{children:"8000"})," in the pod for serving the delve debug server, that's a convention. You could find that in helm templates files."]})}),"\n",(0,i.jsx)(n.p,{children:"Then we could configure our favorite IDE to connect to the remote debugger, below are some examples:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["For Goland, see ",(0,i.jsx)(n.a,{href:"https://www.jetbrains.com/help/go/attach-to-running-go-processes-with-debugger.html#attach-to-a-process-on-a-remote-machine",children:"Attach to running Go processes with the debugger#Attach to a process on a remote machine"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["For VSCode, see ",(0,i.jsx)(n.a,{href:"https://github.com/golang/vscode-go/blob/master/docs/debugging.md#remote-debugging",children:"vscode-go - Debugging#Remote Debugging"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["For more detailed information, see ",(0,i.jsx)(n.a,{href:"https://github.com/chaos-mesh/chaos-mesh/blob/master/images/chaos-dlv/README.md",children:"README.md for container image chaos-dlv"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"whats-next",children:"What's Next"}),"\n",(0,i.jsxs)(n.p,{children:["After finishing the above preparation, you can try to ",(0,i.jsx)(n.a,{href:"/docs/next/add-new-chaos-experiment-type",children:"Add a New Chaos Experiment Type"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"faq",children:"FAQ"}),"\n",(0,i.jsxs)(n.h3,{id:"run-make-fail-with-error-obtaining-vcs-status-exit-status-128-in-macos",children:["Run make fail with ",(0,i.jsx)(n.code,{children:"error obtaining VCS status: exit status 128"})," in MacOS"]}),"\n",(0,i.jsxs)(n.p,{children:["The reason is related to ",(0,i.jsx)(n.a,{href:"https://github.blog/2022-04-12-git-security-vulnerability-announced/",children:"https://github.blog/2022-04-12-git-security-vulnerability-announced/"}),". It's recommended you to read it first."]}),"\n",(0,i.jsxs)(n.p,{children:["Chaos Mesh will start the container (",(0,i.jsx)(n.code,{children:"dev-env"})," or ",(0,i.jsx)(n.code,{children:"build-env"}),") with the current user (when you call ",(0,i.jsx)(n.code,{children:"make"}),"). You can find the appropriate ",(0,i.jsx)(n.code,{children:"--user"})," flag in ",(0,i.jsx)(n.a,{href:"https://github.com/chaos-mesh/chaos-mesh/blob/813b650c02e0b065ae5c4707725c346929ab1847/build/get_env_shell.py#L81C10-L81C10",children:"get_env_shell.py#L81C10-L81C10"}),". So when Git is looking for a top-level ",(0,i.jsx)(n.code,{children:".git"})," directory, it will stop if its directory traversal changes ownership from the current user."]}),"\n",(0,i.jsxs)(n.p,{children:["A temporary solution for now is to comment out the line of ",(0,i.jsx)(n.code,{children:"--user"}),"."]})]})}function d(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},7463:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>r});var i=s(50959);const o={},t=i.createContext(o);function r(e){const n=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.d5766bf9.js b/assets/js/runtime~main.6c46243c.js similarity index 98% rename from assets/js/runtime~main.d5766bf9.js rename to assets/js/runtime~main.6c46243c.js index 30560bd731..6cba31385f 100644 --- a/assets/js/runtime~main.d5766bf9.js +++ b/assets/js/runtime~main.6c46243c.js @@ -1 +1 @@ -(()=>{"use strict";var e,c,a,f,b,d={},t={};function r(e){var c=t[e];if(void 0!==c)return c.exports;var a=t[e]={exports:{}};return d[e].call(a.exports,a,a.exports,r),a.exports}r.m=d,e=[],r.O=(c,a,f,b)=>{if(!a){var d=1/0;for(i=0;i=b)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,b0&&e[i-1][2]>b;i--)e[i]=e[i-1];e[i]=[a,f,b]},r.n=e=>{var c=e&&e.__esModule?()=>e.default:()=>e;return r.d(c,{a:c}),c},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var b=Object.create(null);r.r(b);var d={};c=c||[null,a({}),a([]),a(a)];for(var t=2&f&&e;"object"==typeof t&&!~c.indexOf(t);t=a(t))Object.getOwnPropertyNames(t).forEach((c=>d[c]=()=>e[c]));return d.default=()=>e,r.d(b,d),b},r.d=(e,c)=>{for(var a in c)r.o(c,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:c[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((c,a)=>(r.f[a](e,c),c)),[])),r.u=e=>"assets/js/"+({1:"8eb4e46b",29:"f6e0d55d",53:"935f2afb",183:"f87c5e9f",230:"df9851a4",239:"f25d6f58",245:"70e92f40",277:"c4348237",298:"09437027",326:"5f2b6494",342:"9c1ddc94",344:"9908821b",397:"9f3a4faa",416:"b565383c",420:"d3fbcd5e",477:"9317738f",498:"69b09ea9",526:"75234536",527:"ad242a1d",533:"b2b675dd",584:"9c2f3124",601:"cc101466",622:"719342b4",637:"64a5caf2",648:"43aabc11",649:"93542405",671:"1ea5fb0a",686:"191c30c0",716:"02ac8add",786:"1dbe88e0",817:"7247ad55",850:"ec4a99a3",854:"d7c70c3e",866:"80b2310f",871:"f752fba7",896:"227412c0",1020:"84415e09",1098:"d5e72bf8",1166:"85f8d6a8",1167:"d40ea7ec",1171:"66463a72",1198:"ca070088",1242:"02dabfee",1284:"242716f8",1298:"b3aeb16b",1346:"257f4dd7",1372:"1db64337",1396:"261e8f95",1403:"cfb5730b",1439:"55e6429c",1477:"b2f554cd",1478:"771f38eb",1505:"7c2ff145",1512:"e91017d6",1526:"b3bfd067",1541:"0b7a903d",1552:"1cace19b",1559:"8e439d35",1579:"70329d25",1580:"562c697b",1593:"c12f7c14",1618:"5928dda1",1628:"733580ea",1649:"8dbd7dd1",1681:"e095054b",1713:"a7023ddc",1769:"53bc5dff",1800:"3cf74380",1841:"cefcddad",1853:"1af9c351",1855:"47be93b7",1881:"80dc3f3b",1908:"cbec43f6",1950:"47c9151a",1969:"a998e395",2018:"29637022",2027:"0a3c9d81",2058:"64f8cf74",2095:"67f4ac65",2118:"cee468a4",2132:"b089efb6",2151:"24fb58b0",2175:"7ffa5dd6",2182:"05d348c0",2195:"cf625c23",2203:"3f21b6c3",2213:"90ecb0a4",2238:"3c564b32",2243:"aed57c6e",2267:"0eff740b",2276:"b4636e3e",2291:"e747ec83",2294:"ea0178cf",2300:"ecd7e5b4",2306:"98453b9f",2307:"bdff1965",2330:"42c371df",2341:"2a74af38",2360:"ce420c5c",2365:"20723ffa",2401:"ad8f7d19",2411:"42de488b",2414:"b2d0ba71",2422:"c231ae2a",2424:"6b7a086d",2436:"cf3f51b3",2452:"bda40383",2467:"971bc2ff",2535:"814f3328",2558:"94b8fb96",2566:"49e045f9",2632:"b5bf7bb0",2644:"a93cf237",2678:"e4ec0e82",2701:"95e0ec25",2706:"4ef0a327",2709:"b1cabbcf",2721:"3c03df54",2750:"c6fcc717",2763:"59a5a33f",2772:"34d05537",2783:"e86885f1",2849:"10870ede",2878:"afaff11a",2891:"b6f15f4b",2913:"41bc510c",2917:"02a9c178",2920:"8b8c00ac",2933:"2b50bc33",2969:"7462fa9a",2986:"e73d8426",2990:"f7455008",2996:"3fe76707",2999:"23b3163c",3042:"18b93cb3",3044:"f55ac880",3067:"75fca3db",3085:"1f391b9e",3088:"fbaf32d2",3089:"a6aa9e1f",3093:"d50e42cc",3148:"90d2a8ae",3166:"63389418",3203:"69935607",3211:"1ffdd7de",3230:"64000b03",3242:"9cdd8bd1",3273:"ee6fbbf8",3276:"4965e7cb",3292:"57d917f5",3299:"9f09c0c4",3305:"27d6e2a7",3316:"ca2a08b2",3330:"1c4ec592",3332:"4f7ce8f2",3361:"8ae96016",3380:"5af1dacc",3442:"df566c82",3445:"f7343d2a",3501:"3253b287",3505:"72486833",3531:"cf98717e",3570:"9a7c2e36",3578:"fabf4480",3580:"b14d964f",3608:"9e4087bc",3611:"e95d6e7a",3667:"d4b8580c",3689:"956fb5f2",3718:"f7309d15",3759:"b5c9f1c1",3777:"a1997b5c",3790:"177b2451",3854:"140701a3",3873:"bc0eadd3",3903:"b516026a",3910:"9fcddf3f",3919:"3f767692",3931:"879c32d4",3939:"2bd9a4f4",3942:"0ae6693d",3943:"52e6516f",3972:"591059de",3990:"169a7e91",4e3:"e33f29d2",4001:"321751f7",4013:"01a85c17",4018:"a1f9bdc4",4030:"529c53fa",4055:"e3d8eb44",4123:"8fbfdb6a",4150:"fecc65b6",4157:"283e63f8",4195:"c4f5d8e4",4197:"ea6ece8f",4207:"8a93abd2",4210:"34b4c58f",4212:"e84af1dc",4217:"78aea7f9",4230:"2a5030af",4240:"6a7a1117",4254:"b12fc7e1",4255:"02489c3c",4277:"601d4a49",4279:"9809ed3b",4299:"8a64a7fb",4318:"fcb910d9",4319:"18f4287e",4339:"b85d130b",4356:"3120bb7f",4368:"a94703ab",4378:"22c99dfb",4396:"284bc205",4401:"735a03fc",4412:"217721c0",4424:"85828edd",4444:"c1e307da",4557:"fd89e6dc",4573:"99bc7767",4634:"8dc6dd8d",4642:"637f1cf7",4739:"51f60bd2",4762:"eecb3c77",4770:"a88d826b",4832:"ece86388",4833:"c929a6dd",4875:"37220d5e",4937:"3106804f",4955:"3fba30c5",5010:"014b445b",5016:"5e3e1feb",5028:"a6cd7ee1",5062:"69369ae2",5074:"77e23114",5174:"f9adc506",5217:"83029544",5219:"d933ec33",5221:"c837099f",5254:"194e0ab1",5281:"791dccb8",5311:"3c1c61ff",5330:"40df0723",5353:"2f3ff69e",5391:"369bd8f8",5415:"891e3ffb",5419:"72fec000",5435:"6b841b38",5440:"e671ed15",5474:"6d05cdaf",5519:"4fd6736b",5520:"3c9dc0dd",5529:"da5208fe",5547:"84665c39",5609:"0cb2f086",5629:"4eaba250",5644:"8c78330a",5666:"63328f1b",5686:"f84e09eb",5722:"19fe0a86",5750:"6f8a752d",5759:"ee8ef8d4",5781:"4b87fcc5",5818:"3b5985a4",5821:"c75fb953",5835:"5bc13194",5869:"1371498d",5877:"ac93517b",5902:"fa551551",6049:"d6468e37",6050:"e06347fb",6092:"ac2bc92e",6103:"ccc49370",6143:"db3cf118",6145:"1e73a314",6162:"75e2d281",6176:"ff962926",6202:"16639819",6211:"26ac8cdf",6245:"e0508589",6249:"5aed59f0",6258:"ce9e273a",6269:"8eb0ea08",6322:"8ce2a1ba",6328:"589bdb1e",6336:"98b5d3d8",6341:"f7ca5716",6401:"84a993c9",6418:"a6ac4e5a",6419:"4fee9d1b",6434:"fad1e435",6437:"9de65543",6480:"01ccb5c8",6490:"e5a3b196",6517:"5233d56a",6521:"2558d2d9",6529:"9dbf45f9",6536:"977782a2",6581:"8f3fafc4",6621:"f9ba0b11",6670:"1147623b",6676:"fad52357",6691:"12c1ce9b",6698:"0632d840",6729:"fcd991e7",6741:"3a9cfda9",6750:"c62b7275",6754:"ae77e8e2",6791:"3238b1cf",6830:"06a15cdf",6846:"6cf1dc42",6861:"62ea5d23",6890:"c4b334be",6891:"1d6cc48c",6905:"d853b26e",6914:"6897adcd",6922:"d042486d",6956:"b7108862",6975:"4abc874c",6984:"b78fb88e",7033:"41e838b4",7066:"0471a4cd",7102:"6b8fb093",7108:"b2fca173",7193:"b225fd81",7197:"98269b50",7221:"91ef01f2",7239:"72e14192",7248:"f85e3b16",7266:"98ddfb9b",7267:"41da1ac1",7269:"7c696332",7270:"1df1f1fe",7281:"70dc8051",7339:"460546a2",7377:"64db70a3",7378:"e97f4c14",7397:"f085ba7b",7403:"c4902fbf",7406:"070d9710",7419:"07f371e9",7470:"bf53dfeb",7498:"00760ae4",7499:"617f6d79",7504:"1312c014",7506:"cc7281b7",7533:"b60c2781",7535:"11eeaf94",7546:"70dc5079",7608:"9f0e6576",7672:"4c067f25",7693:"8401d7f8",7705:"00aa4d09",7712:"417a36b6",7714:"4aa47776",7715:"87611dcb",7777:"93bff4e1",7779:"6d00fcd7",7792:"40368260",7825:"de2866f0",7894:"750f2da3",7918:"17896441",7920:"1a4e3797",7921:"27a82c69",7944:"b10dc488",7946:"f1555dde",7977:"c3f65626",7978:"3ebe1811",7979:"75ba67a2",8013:"4fe280e0",8056:"483e3ff6",8091:"9b7cc76c",8097:"120235e2",8104:"d57001c7",8108:"058b8cb6",8149:"44183a86",8185:"5457728b",8195:"a5b4bd89",8211:"73ba8788",8214:"abfcd627",8226:"733750c7",8261:"c1e4bdc6",8264:"c60bb7e3",8359:"dcec8022",8377:"23413994",8432:"0b1b165d",8442:"92999a1c",8446:"c2a73828",8493:"6d0faaeb",8499:"3116f78b",8518:"a7bd4aaa",8544:"134989b6",8593:"80fe39af",8610:"6875c492",8655:"aa5a177c",8661:"60362baf",8687:"ab009dcb",8699:"cad8b051",8724:"b6494d1f",8787:"1ab7b2d3",8840:"86d1f6d3",8876:"99a9cca6",8908:"0c3ee269",8947:"e4972855",8949:"3cf9319f",8993:"eefbcfbb",9027:"f8c5dcad",9037:"0b296ec4",9060:"ac0c26b1",9159:"97df2ae1",9165:"4805635c",9169:"51e4ac6f",9197:"199cfc1b",9238:"ca45e200",9292:"6cd4385b",9328:"b50c31a6",9351:"f3cd0dc0",9352:"3301054b",9357:"b8a60ade",9367:"88839718",9370:"45951754",9379:"c3e7c0c9",9387:"b0f1c099",9396:"c20650c8",9431:"261b748b",9454:"11408f98",9469:"47b7279e",9515:"4b508e59",9535:"28d37a26",9545:"ca94432f",9569:"3d2eae82",9571:"d530b40c",9576:"1404d338",9612:"5c7eddd6",9649:"06b16c00",9661:"5e95c892",9706:"cae65014",9709:"9176dd93",9788:"8561c1af",9819:"338e3047",9872:"d4b8d191",9911:"49784f7c",9920:"e0ede051",9934:"a435b217",9948:"923730dc",9996:"b2eb6ad0"}[e]||e)+"."+{1:"b268a4ff",29:"cfa2ee0f",53:"3d528c4b",183:"9ea60c13",230:"c22b5495",239:"b72ab9b0",245:"2da3f84a",277:"1980fe58",298:"77aebab8",326:"8ef77a95",342:"ef7b17cc",344:"9256df07",397:"35c0c3b9",416:"a9fa2e31",420:"540ba9db",477:"28b4894f",498:"da2bf0b6",526:"2e3f6a26",527:"564316de",533:"6754e606",584:"ce3ec52c",601:"6ed077dc",622:"ae1d3289",637:"7d70b09c",648:"af2652db",649:"e0f417c2",671:"f421797c",686:"c6cec5dc",716:"bb3c8694",786:"02c080a0",817:"6171315e",850:"46e67a15",854:"1ae277d3",866:"51101cc0",871:"3b179c65",883:"a1b108c2",896:"1a185783",1020:"12f96a53",1098:"9376ca58",1166:"81927892",1167:"5071902c",1171:"61d77942",1198:"c6b3d24e",1242:"d450787e",1284:"b86424a0",1286:"f0425fa3",1298:"045746a8",1346:"6d589873",1372:"4d3c0807",1396:"d9f76902",1403:"47710c5b",1439:"a08d00fa",1477:"291aa0f5",1478:"a5b06a87",1505:"4f51fb08",1512:"39aa1e10",1526:"5ac8aebc",1541:"af5373b0",1552:"0689f0ec",1559:"bf8ef6e1",1579:"5c18e36a",1580:"9ef79a75",1593:"044aa976",1618:"548faf69",1628:"4855cae6",1649:"a5271547",1681:"6c47959c",1713:"b25e2cdb",1769:"5babb364",1800:"27973366",1834:"4fbd37db",1841:"87306528",1853:"be6560f2",1855:"4b2dcd99",1881:"a2b8bc71",1908:"ce37cb72",1950:"19218de4",1969:"dbcc49b2",2018:"71e75b97",2027:"3eceaded",2058:"6cab85dd",2095:"91a1e84b",2118:"81c2e14d",2132:"671aed14",2151:"d50fda63",2175:"9ed4faf5",2182:"7b36796d",2195:"be0e3d37",2203:"435bd819",2213:"85c13785",2238:"499f0177",2243:"03563637",2267:"6ed2d46e",2276:"cc28fa71",2291:"d553443d",2294:"7eed5db7",2300:"9a64db10",2306:"93613756",2307:"352701bb",2330:"6cb0f6a5",2341:"f6b5d953",2360:"6545f173",2365:"e7b8a0aa",2401:"29d56059",2411:"a6db4330",2414:"8665dfea",2422:"28a72998",2424:"37cec601",2436:"8c020208",2452:"633c4443",2467:"06ba23b8",2489:"c1647787",2535:"c9374138",2558:"569b6c7c",2566:"08a6d81b",2632:"49ce9be5",2644:"a2ad23f3",2678:"9a746687",2701:"5b518bbb",2706:"e16743b2",2709:"478c8f82",2721:"4c565ff7",2750:"0cfff395",2763:"ff463ee4",2772:"2babde56",2783:"8f5aad56",2849:"efc85792",2878:"c68c2d49",2891:"e0524c05",2913:"889c785e",2917:"ab9c4a1f",2920:"964f2aad",2933:"761507c0",2969:"2a6f14d7",2986:"b5d0d049",2990:"c05bf139",2996:"ff714572",2999:"72e7009e",3042:"a0e94361",3044:"543ca3f5",3067:"116da774",3085:"c9d774b8",3088:"8ce3fd8c",3089:"8db801e4",3093:"c1f3830a",3148:"3f1868b2",3166:"c1a8dbf1",3203:"a6fa3dd1",3211:"9e3ea2d9",3230:"ecd357ad",3242:"fa69650d",3273:"ca4049d9",3276:"701f2ad1",3292:"a4948307",3299:"97ad4bdf",3305:"cf9ffb11",3316:"de669662",3330:"ea9ecc8c",3332:"b03429b8",3361:"8dab08a2",3380:"5e9478a0",3442:"d938b566",3445:"b8daf0c1",3501:"6524fc9e",3505:"3f122481",3531:"4405e4a9",3570:"50a7e150",3578:"32289b51",3580:"8f93fbc0",3608:"eda60729",3611:"ec883a41",3667:"9f3b7f3a",3689:"813cdec6",3718:"f415f8db",3759:"7ce32f43",3777:"0c792a64",3790:"2ebbadee",3854:"4639a9dc",3873:"b4f633d3",3903:"47349b3d",3910:"e12b8ab2",3919:"f2fa4cf6",3931:"6a6522dd",3939:"4e6cb178",3942:"e53b999c",3943:"c1d2645e",3972:"0ead6494",3990:"b06baf63",4e3:"a8be1db9",4001:"aed6b17f",4013:"ea73907f",4018:"d898a9ac",4030:"851c968c",4055:"00e4ddfd",4123:"657fb4a5",4150:"ede5199b",4157:"d1dc3eb5",4195:"7da7f97c",4197:"19716afb",4207:"5525609d",4210:"10e03850",4212:"64ca0d58",4217:"d0779d13",4230:"85073885",4240:"2151e45a",4254:"c5037625",4255:"aa975cee",4277:"8b2135a9",4279:"c4aeaffb",4299:"a18f26e2",4318:"f07ed4de",4319:"97dec1fe",4339:"2a3fffa1",4356:"d8793321",4368:"e2143200",4378:"5792db4a",4396:"5637b84b",4401:"1df98893",4412:"02cfd9e6",4424:"a86a1edc",4444:"f7e12124",4557:"3a3383d0",4573:"5b214eff",4634:"6e8137e2",4642:"d2d536f9",4739:"d6e25cfa",4762:"6202a3c1",4770:"8ce38774",4807:"0d81ecc9",4832:"9dfe55a2",4833:"afc82f52",4875:"8eac0b26",4937:"9e221d68",4955:"8bc25a8f",5010:"ae685c1c",5016:"97706698",5028:"b6a3645b",5062:"c8051d43",5074:"ef9eda79",5174:"1a64f338",5217:"e8ca4787",5219:"eff6d7fb",5221:"48794de8",5254:"80f01a4c",5281:"aca0e4c5",5311:"af5963c2",5330:"6ce6d9af",5353:"0e495eb0",5391:"85cad638",5415:"422e8676",5419:"36f24243",5435:"4b61edd5",5440:"8a56423e",5474:"083d9008",5519:"c1433644",5520:"5333f539",5529:"1f074e27",5547:"d063c56b",5609:"c6fba631",5629:"a8afd3bc",5644:"7f6265f7",5666:"238bbcdb",5686:"ccb33ca6",5722:"63fa8cc9",5750:"f9805039",5759:"19a83411",5781:"e7357649",5818:"83a9b3cf",5821:"a614d95a",5835:"7ce1f1b3",5869:"94ba484e",5877:"3ed6bd09",5902:"efed7457",6049:"7a9e2599",6050:"2f332a19",6090:"c74173fa",6092:"823d38d8",6103:"87f1b928",6143:"54d9875d",6145:"d069e5e9",6162:"d96e7df8",6176:"9e5dc5e3",6202:"8da2d50a",6211:"76c03419",6245:"b985f662",6249:"709e643f",6258:"fd5955d1",6269:"91a386a6",6322:"32a1ea16",6328:"9afc10b2",6336:"1467c42c",6341:"f2bb6622",6401:"87a0e941",6418:"d02516e0",6419:"67e610bc",6434:"1241c07b",6437:"67ec83d8",6480:"2053fb32",6490:"4d301b44",6517:"64ef2b66",6521:"2de353f7",6529:"9ff599ba",6536:"6b9f3991",6581:"d0402b35",6621:"140a9773",6670:"cb5acf57",6676:"6c18a521",6691:"8b5d9c84",6698:"968775df",6729:"dba622f5",6741:"b6a9aada",6750:"ec1855e2",6754:"5904a677",6791:"5efe352d",6830:"13b80a6c",6846:"5b63ee3e",6861:"8dedce6d",6866:"54b68c82",6890:"514c7a99",6891:"8e775237",6905:"f022a0e8",6914:"7f5ad773",6922:"c6c2cad4",6956:"65d9cf72",6975:"dca989fa",6984:"23ed5cd7",7033:"7998d7d2",7066:"c0b54f26",7102:"b572367a",7108:"212d994f",7193:"456c67ab",7197:"0ae7859a",7221:"a98bd150",7239:"5c58a44d",7248:"d2f92b78",7266:"3b570c39",7267:"b9f02753",7269:"9fb09265",7270:"85fbfb84",7281:"2d22c82f",7339:"b3e54f45",7377:"412365d8",7378:"c01ac42b",7397:"e9f71fc3",7403:"d3675d22",7406:"280d718d",7419:"9dab4a63",7470:"71795b75",7498:"bf771ad3",7499:"63d74f3c",7504:"809e09e6",7506:"225aeb13",7533:"e9b59ca7",7535:"3f276758",7546:"d03aa52a",7608:"20c6d5e7",7672:"02294076",7693:"b640a2c8",7705:"206f16d9",7712:"dc04982b",7714:"a54657f1",7715:"2909a868",7777:"da90f96c",7779:"50b05241",7792:"316135a7",7825:"a87dfe87",7894:"b80c4043",7918:"a9b56683",7920:"d673b92b",7921:"30435d91",7944:"661e2542",7946:"28415d3b",7977:"a267c06a",7978:"6ea026ed",7979:"2dc576c2",8013:"191176cd",8056:"e1c8efc6",8091:"800ad1d9",8097:"5e1fe73e",8104:"83bae65d",8108:"aae03cd5",8149:"446b1300",8185:"4f9c4cd7",8195:"1ccc5365",8211:"93520f56",8214:"f1d7cecb",8226:"1c5cae27",8251:"3f7c3ffb",8261:"eda9f024",8264:"05324360",8359:"bd9c0250",8377:"ee8e8b1a",8432:"7297bcc4",8442:"69ebff59",8446:"4259a971",8493:"01b6f3d4",8499:"3640f95d",8518:"f57837e2",8544:"b2cb6485",8561:"8a0ad08e",8593:"ff913160",8610:"4bb80a31",8655:"e827cb1f",8661:"ce6d6ec7",8687:"28f2b417",8699:"0abb2f9e",8724:"899371cb",8787:"30c9334f",8840:"46327c8e",8876:"fe80b9bc",8908:"a219a4b8",8947:"930c8460",8949:"0ef90fde",8993:"1b76adac",9027:"47ea9af0",9037:"d9df30c3",9060:"a94f7c70",9159:"da02754c",9165:"7f7146dc",9169:"1518fff6",9197:"398015e7",9238:"2aef5b5d",9292:"429c8edf",9328:"7b3cf247",9351:"d7af9406",9352:"804dbd66",9357:"3a64bec6",9367:"a5f789dd",9370:"6608e280",9379:"384753ce",9387:"2205350f",9396:"d4aac114",9431:"245e98f5",9454:"0e2c8a25",9469:"f26d96d8",9515:"632f7b7d",9535:"d04c9e02",9545:"1a17c189",9569:"cdfaab2a",9571:"42680727",9576:"315a1e0c",9612:"d2782d5b",9649:"b8a16e6f",9661:"a1c80151",9706:"9a8ffe65",9709:"59a94577",9788:"b4b3f5c7",9819:"8f6c232a",9872:"a4e7f584",9911:"64717e7f",9920:"5928b4d6",9934:"3ef273a0",9948:"b578bab3",9996:"c8a7558d"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,c)=>Object.prototype.hasOwnProperty.call(e,c),f={},b="chaos-mesh-website:",r.l=(e,c,a,d)=>{if(f[e])f[e].push(c);else{var t,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(l);var b=f[e];if(delete f[e],t.parentNode&&t.parentNode.removeChild(t),b&&b.forEach((e=>e(a))),c)return c(a)},l=setTimeout(s.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=s.bind(null,t.onerror),t.onload=s.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={16639819:"6202",17896441:"7918",23413994:"8377",29637022:"2018",40368260:"7792",45951754:"9370",63389418:"3166",69935607:"3203",72486833:"3505",75234536:"526",83029544:"5217",88839718:"9367",93542405:"649","8eb4e46b":"1",f6e0d55d:"29","935f2afb":"53",f87c5e9f:"183",df9851a4:"230",f25d6f58:"239","70e92f40":"245",c4348237:"277","09437027":"298","5f2b6494":"326","9c1ddc94":"342","9908821b":"344","9f3a4faa":"397",b565383c:"416",d3fbcd5e:"420","9317738f":"477","69b09ea9":"498",ad242a1d:"527",b2b675dd:"533","9c2f3124":"584",cc101466:"601","719342b4":"622","64a5caf2":"637","43aabc11":"648","1ea5fb0a":"671","191c30c0":"686","02ac8add":"716","1dbe88e0":"786","7247ad55":"817",ec4a99a3:"850",d7c70c3e:"854","80b2310f":"866",f752fba7:"871","227412c0":"896","84415e09":"1020",d5e72bf8:"1098","85f8d6a8":"1166",d40ea7ec:"1167","66463a72":"1171",ca070088:"1198","02dabfee":"1242","242716f8":"1284",b3aeb16b:"1298","257f4dd7":"1346","1db64337":"1372","261e8f95":"1396",cfb5730b:"1403","55e6429c":"1439",b2f554cd:"1477","771f38eb":"1478","7c2ff145":"1505",e91017d6:"1512",b3bfd067:"1526","0b7a903d":"1541","1cace19b":"1552","8e439d35":"1559","70329d25":"1579","562c697b":"1580",c12f7c14:"1593","5928dda1":"1618","733580ea":"1628","8dbd7dd1":"1649",e095054b:"1681",a7023ddc:"1713","53bc5dff":"1769","3cf74380":"1800",cefcddad:"1841","1af9c351":"1853","47be93b7":"1855","80dc3f3b":"1881",cbec43f6:"1908","47c9151a":"1950",a998e395:"1969","0a3c9d81":"2027","64f8cf74":"2058","67f4ac65":"2095",cee468a4:"2118",b089efb6:"2132","24fb58b0":"2151","7ffa5dd6":"2175","05d348c0":"2182",cf625c23:"2195","3f21b6c3":"2203","90ecb0a4":"2213","3c564b32":"2238",aed57c6e:"2243","0eff740b":"2267",b4636e3e:"2276",e747ec83:"2291",ea0178cf:"2294",ecd7e5b4:"2300","98453b9f":"2306",bdff1965:"2307","42c371df":"2330","2a74af38":"2341",ce420c5c:"2360","20723ffa":"2365",ad8f7d19:"2401","42de488b":"2411",b2d0ba71:"2414",c231ae2a:"2422","6b7a086d":"2424",cf3f51b3:"2436",bda40383:"2452","971bc2ff":"2467","814f3328":"2535","94b8fb96":"2558","49e045f9":"2566",b5bf7bb0:"2632",a93cf237:"2644",e4ec0e82:"2678","95e0ec25":"2701","4ef0a327":"2706",b1cabbcf:"2709","3c03df54":"2721",c6fcc717:"2750","59a5a33f":"2763","34d05537":"2772",e86885f1:"2783","10870ede":"2849",afaff11a:"2878",b6f15f4b:"2891","41bc510c":"2913","02a9c178":"2917","8b8c00ac":"2920","2b50bc33":"2933","7462fa9a":"2969",e73d8426:"2986",f7455008:"2990","3fe76707":"2996","23b3163c":"2999","18b93cb3":"3042",f55ac880:"3044","75fca3db":"3067","1f391b9e":"3085",fbaf32d2:"3088",a6aa9e1f:"3089",d50e42cc:"3093","90d2a8ae":"3148","1ffdd7de":"3211","64000b03":"3230","9cdd8bd1":"3242",ee6fbbf8:"3273","4965e7cb":"3276","57d917f5":"3292","9f09c0c4":"3299","27d6e2a7":"3305",ca2a08b2:"3316","1c4ec592":"3330","4f7ce8f2":"3332","8ae96016":"3361","5af1dacc":"3380",df566c82:"3442",f7343d2a:"3445","3253b287":"3501",cf98717e:"3531","9a7c2e36":"3570",fabf4480:"3578",b14d964f:"3580","9e4087bc":"3608",e95d6e7a:"3611",d4b8580c:"3667","956fb5f2":"3689",f7309d15:"3718",b5c9f1c1:"3759",a1997b5c:"3777","177b2451":"3790","140701a3":"3854",bc0eadd3:"3873",b516026a:"3903","9fcddf3f":"3910","3f767692":"3919","879c32d4":"3931","2bd9a4f4":"3939","0ae6693d":"3942","52e6516f":"3943","591059de":"3972","169a7e91":"3990",e33f29d2:"4000","321751f7":"4001","01a85c17":"4013",a1f9bdc4:"4018","529c53fa":"4030",e3d8eb44:"4055","8fbfdb6a":"4123",fecc65b6:"4150","283e63f8":"4157",c4f5d8e4:"4195",ea6ece8f:"4197","8a93abd2":"4207","34b4c58f":"4210",e84af1dc:"4212","78aea7f9":"4217","2a5030af":"4230","6a7a1117":"4240",b12fc7e1:"4254","02489c3c":"4255","601d4a49":"4277","9809ed3b":"4279","8a64a7fb":"4299",fcb910d9:"4318","18f4287e":"4319",b85d130b:"4339","3120bb7f":"4356",a94703ab:"4368","22c99dfb":"4378","284bc205":"4396","735a03fc":"4401","217721c0":"4412","85828edd":"4424",c1e307da:"4444",fd89e6dc:"4557","99bc7767":"4573","8dc6dd8d":"4634","637f1cf7":"4642","51f60bd2":"4739",eecb3c77:"4762",a88d826b:"4770",ece86388:"4832",c929a6dd:"4833","37220d5e":"4875","3106804f":"4937","3fba30c5":"4955","014b445b":"5010","5e3e1feb":"5016",a6cd7ee1:"5028","69369ae2":"5062","77e23114":"5074",f9adc506:"5174",d933ec33:"5219",c837099f:"5221","194e0ab1":"5254","791dccb8":"5281","3c1c61ff":"5311","40df0723":"5330","2f3ff69e":"5353","369bd8f8":"5391","891e3ffb":"5415","72fec000":"5419","6b841b38":"5435",e671ed15:"5440","6d05cdaf":"5474","4fd6736b":"5519","3c9dc0dd":"5520",da5208fe:"5529","84665c39":"5547","0cb2f086":"5609","4eaba250":"5629","8c78330a":"5644","63328f1b":"5666",f84e09eb:"5686","19fe0a86":"5722","6f8a752d":"5750",ee8ef8d4:"5759","4b87fcc5":"5781","3b5985a4":"5818",c75fb953:"5821","5bc13194":"5835","1371498d":"5869",ac93517b:"5877",fa551551:"5902",d6468e37:"6049",e06347fb:"6050",ac2bc92e:"6092",ccc49370:"6103",db3cf118:"6143","1e73a314":"6145","75e2d281":"6162",ff962926:"6176","26ac8cdf":"6211",e0508589:"6245","5aed59f0":"6249",ce9e273a:"6258","8eb0ea08":"6269","8ce2a1ba":"6322","589bdb1e":"6328","98b5d3d8":"6336",f7ca5716:"6341","84a993c9":"6401",a6ac4e5a:"6418","4fee9d1b":"6419",fad1e435:"6434","9de65543":"6437","01ccb5c8":"6480",e5a3b196:"6490","5233d56a":"6517","2558d2d9":"6521","9dbf45f9":"6529","977782a2":"6536","8f3fafc4":"6581",f9ba0b11:"6621","1147623b":"6670",fad52357:"6676","12c1ce9b":"6691","0632d840":"6698",fcd991e7:"6729","3a9cfda9":"6741",c62b7275:"6750",ae77e8e2:"6754","3238b1cf":"6791","06a15cdf":"6830","6cf1dc42":"6846","62ea5d23":"6861",c4b334be:"6890","1d6cc48c":"6891",d853b26e:"6905","6897adcd":"6914",d042486d:"6922",b7108862:"6956","4abc874c":"6975",b78fb88e:"6984","41e838b4":"7033","0471a4cd":"7066","6b8fb093":"7102",b2fca173:"7108",b225fd81:"7193","98269b50":"7197","91ef01f2":"7221","72e14192":"7239",f85e3b16:"7248","98ddfb9b":"7266","41da1ac1":"7267","7c696332":"7269","1df1f1fe":"7270","70dc8051":"7281","460546a2":"7339","64db70a3":"7377",e97f4c14:"7378",f085ba7b:"7397",c4902fbf:"7403","070d9710":"7406","07f371e9":"7419",bf53dfeb:"7470","00760ae4":"7498","617f6d79":"7499","1312c014":"7504",cc7281b7:"7506",b60c2781:"7533","11eeaf94":"7535","70dc5079":"7546","9f0e6576":"7608","4c067f25":"7672","8401d7f8":"7693","00aa4d09":"7705","417a36b6":"7712","4aa47776":"7714","87611dcb":"7715","93bff4e1":"7777","6d00fcd7":"7779",de2866f0:"7825","750f2da3":"7894","1a4e3797":"7920","27a82c69":"7921",b10dc488:"7944",f1555dde:"7946",c3f65626:"7977","3ebe1811":"7978","75ba67a2":"7979","4fe280e0":"8013","483e3ff6":"8056","9b7cc76c":"8091","120235e2":"8097",d57001c7:"8104","058b8cb6":"8108","44183a86":"8149","5457728b":"8185",a5b4bd89:"8195","73ba8788":"8211",abfcd627:"8214","733750c7":"8226",c1e4bdc6:"8261",c60bb7e3:"8264",dcec8022:"8359","0b1b165d":"8432","92999a1c":"8442",c2a73828:"8446","6d0faaeb":"8493","3116f78b":"8499",a7bd4aaa:"8518","134989b6":"8544","80fe39af":"8593","6875c492":"8610",aa5a177c:"8655","60362baf":"8661",ab009dcb:"8687",cad8b051:"8699",b6494d1f:"8724","1ab7b2d3":"8787","86d1f6d3":"8840","99a9cca6":"8876","0c3ee269":"8908",e4972855:"8947","3cf9319f":"8949",eefbcfbb:"8993",f8c5dcad:"9027","0b296ec4":"9037",ac0c26b1:"9060","97df2ae1":"9159","4805635c":"9165","51e4ac6f":"9169","199cfc1b":"9197",ca45e200:"9238","6cd4385b":"9292",b50c31a6:"9328",f3cd0dc0:"9351","3301054b":"9352",b8a60ade:"9357",c3e7c0c9:"9379",b0f1c099:"9387",c20650c8:"9396","261b748b":"9431","11408f98":"9454","47b7279e":"9469","4b508e59":"9515","28d37a26":"9535",ca94432f:"9545","3d2eae82":"9569",d530b40c:"9571","1404d338":"9576","5c7eddd6":"9612","06b16c00":"9649","5e95c892":"9661",cae65014:"9706","9176dd93":"9709","8561c1af":"9788","338e3047":"9819",d4b8d191:"9872","49784f7c":"9911",e0ede051:"9920",a435b217:"9934","923730dc":"9948",b2eb6ad0:"9996"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(c,a)=>{var f=r.o(e,c)?e[c]:void 0;if(0!==f)if(f)a.push(f[2]);else if(/^(1303|532)$/.test(c))e[c]=0;else{var b=new Promise(((a,b)=>f=e[c]=[a,b]));a.push(f[2]=b);var d=r.p+r.u(c),t=new Error;r.l(d,(a=>{if(r.o(e,c)&&(0!==(f=e[c])&&(e[c]=void 0),f)){var b=a&&("load"===a.type?"missing":a.type),d=a&&a.target&&a.target.src;t.message="Loading chunk "+c+" failed.\n("+b+": "+d+")",t.name="ChunkLoadError",t.type=b,t.request=d,f[1](t)}}),"chunk-"+c,c)}},r.O.j=c=>0===e[c];var c=(c,a)=>{var f,b,d=a[0],t=a[1],o=a[2],n=0;if(d.some((c=>0!==e[c]))){for(f in t)r.o(t,f)&&(r.m[f]=t[f]);if(o)var i=o(r)}for(c&&c(a);n{"use strict";var e,c,a,f,b,d={},t={};function r(e){var c=t[e];if(void 0!==c)return c.exports;var a=t[e]={exports:{}};return d[e].call(a.exports,a,a.exports,r),a.exports}r.m=d,e=[],r.O=(c,a,f,b)=>{if(!a){var d=1/0;for(i=0;i=b)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,b0&&e[i-1][2]>b;i--)e[i]=e[i-1];e[i]=[a,f,b]},r.n=e=>{var c=e&&e.__esModule?()=>e.default:()=>e;return r.d(c,{a:c}),c},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var b=Object.create(null);r.r(b);var d={};c=c||[null,a({}),a([]),a(a)];for(var t=2&f&&e;"object"==typeof t&&!~c.indexOf(t);t=a(t))Object.getOwnPropertyNames(t).forEach((c=>d[c]=()=>e[c]));return d.default=()=>e,r.d(b,d),b},r.d=(e,c)=>{for(var a in c)r.o(c,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:c[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((c,a)=>(r.f[a](e,c),c)),[])),r.u=e=>"assets/js/"+({1:"8eb4e46b",29:"f6e0d55d",53:"935f2afb",183:"f87c5e9f",230:"df9851a4",239:"f25d6f58",245:"70e92f40",277:"c4348237",298:"09437027",326:"5f2b6494",342:"9c1ddc94",344:"9908821b",397:"9f3a4faa",416:"b565383c",420:"d3fbcd5e",477:"9317738f",498:"69b09ea9",526:"75234536",527:"ad242a1d",533:"b2b675dd",584:"9c2f3124",601:"cc101466",622:"719342b4",637:"64a5caf2",648:"43aabc11",649:"93542405",671:"1ea5fb0a",686:"191c30c0",716:"02ac8add",786:"1dbe88e0",817:"7247ad55",850:"ec4a99a3",854:"d7c70c3e",866:"80b2310f",871:"f752fba7",896:"227412c0",1020:"84415e09",1098:"d5e72bf8",1166:"85f8d6a8",1167:"d40ea7ec",1171:"66463a72",1198:"ca070088",1242:"02dabfee",1284:"242716f8",1298:"b3aeb16b",1346:"257f4dd7",1372:"1db64337",1396:"261e8f95",1403:"cfb5730b",1439:"55e6429c",1477:"b2f554cd",1478:"771f38eb",1505:"7c2ff145",1512:"e91017d6",1526:"b3bfd067",1541:"0b7a903d",1552:"1cace19b",1559:"8e439d35",1579:"70329d25",1580:"562c697b",1593:"c12f7c14",1618:"5928dda1",1628:"733580ea",1649:"8dbd7dd1",1681:"e095054b",1713:"a7023ddc",1769:"53bc5dff",1800:"3cf74380",1841:"cefcddad",1853:"1af9c351",1855:"47be93b7",1881:"80dc3f3b",1908:"cbec43f6",1950:"47c9151a",1969:"a998e395",2018:"29637022",2027:"0a3c9d81",2058:"64f8cf74",2095:"67f4ac65",2118:"cee468a4",2132:"b089efb6",2151:"24fb58b0",2175:"7ffa5dd6",2182:"05d348c0",2195:"cf625c23",2203:"3f21b6c3",2213:"90ecb0a4",2238:"3c564b32",2243:"aed57c6e",2267:"0eff740b",2276:"b4636e3e",2291:"e747ec83",2294:"ea0178cf",2300:"ecd7e5b4",2306:"98453b9f",2307:"bdff1965",2330:"42c371df",2341:"2a74af38",2360:"ce420c5c",2365:"20723ffa",2401:"ad8f7d19",2411:"42de488b",2414:"b2d0ba71",2422:"c231ae2a",2424:"6b7a086d",2436:"cf3f51b3",2452:"bda40383",2467:"971bc2ff",2535:"814f3328",2558:"94b8fb96",2566:"49e045f9",2632:"b5bf7bb0",2644:"a93cf237",2678:"e4ec0e82",2701:"95e0ec25",2706:"4ef0a327",2709:"b1cabbcf",2721:"3c03df54",2750:"c6fcc717",2763:"59a5a33f",2772:"34d05537",2783:"e86885f1",2849:"10870ede",2878:"afaff11a",2891:"b6f15f4b",2913:"41bc510c",2917:"02a9c178",2920:"8b8c00ac",2933:"2b50bc33",2969:"7462fa9a",2986:"e73d8426",2990:"f7455008",2996:"3fe76707",2999:"23b3163c",3042:"18b93cb3",3044:"f55ac880",3067:"75fca3db",3085:"1f391b9e",3088:"fbaf32d2",3089:"a6aa9e1f",3093:"d50e42cc",3148:"90d2a8ae",3166:"63389418",3203:"69935607",3211:"1ffdd7de",3230:"64000b03",3242:"9cdd8bd1",3273:"ee6fbbf8",3276:"4965e7cb",3292:"57d917f5",3299:"9f09c0c4",3305:"27d6e2a7",3316:"ca2a08b2",3330:"1c4ec592",3332:"4f7ce8f2",3361:"8ae96016",3380:"5af1dacc",3442:"df566c82",3445:"f7343d2a",3501:"3253b287",3505:"72486833",3531:"cf98717e",3570:"9a7c2e36",3578:"fabf4480",3580:"b14d964f",3608:"9e4087bc",3611:"e95d6e7a",3667:"d4b8580c",3689:"956fb5f2",3718:"f7309d15",3759:"b5c9f1c1",3777:"a1997b5c",3790:"177b2451",3854:"140701a3",3873:"bc0eadd3",3903:"b516026a",3910:"9fcddf3f",3919:"3f767692",3931:"879c32d4",3939:"2bd9a4f4",3942:"0ae6693d",3943:"52e6516f",3972:"591059de",3990:"169a7e91",4e3:"e33f29d2",4001:"321751f7",4013:"01a85c17",4018:"a1f9bdc4",4030:"529c53fa",4055:"e3d8eb44",4123:"8fbfdb6a",4150:"fecc65b6",4157:"283e63f8",4195:"c4f5d8e4",4197:"ea6ece8f",4207:"8a93abd2",4210:"34b4c58f",4212:"e84af1dc",4217:"78aea7f9",4230:"2a5030af",4240:"6a7a1117",4254:"b12fc7e1",4255:"02489c3c",4277:"601d4a49",4279:"9809ed3b",4299:"8a64a7fb",4318:"fcb910d9",4319:"18f4287e",4339:"b85d130b",4356:"3120bb7f",4368:"a94703ab",4378:"22c99dfb",4396:"284bc205",4401:"735a03fc",4412:"217721c0",4424:"85828edd",4444:"c1e307da",4557:"fd89e6dc",4573:"99bc7767",4634:"8dc6dd8d",4642:"637f1cf7",4739:"51f60bd2",4762:"eecb3c77",4770:"a88d826b",4832:"ece86388",4833:"c929a6dd",4875:"37220d5e",4937:"3106804f",4955:"3fba30c5",5010:"014b445b",5016:"5e3e1feb",5028:"a6cd7ee1",5062:"69369ae2",5074:"77e23114",5174:"f9adc506",5217:"83029544",5219:"d933ec33",5221:"c837099f",5254:"194e0ab1",5281:"791dccb8",5311:"3c1c61ff",5330:"40df0723",5353:"2f3ff69e",5391:"369bd8f8",5415:"891e3ffb",5419:"72fec000",5435:"6b841b38",5440:"e671ed15",5474:"6d05cdaf",5519:"4fd6736b",5520:"3c9dc0dd",5529:"da5208fe",5547:"84665c39",5609:"0cb2f086",5629:"4eaba250",5644:"8c78330a",5666:"63328f1b",5686:"f84e09eb",5722:"19fe0a86",5750:"6f8a752d",5759:"ee8ef8d4",5781:"4b87fcc5",5818:"3b5985a4",5821:"c75fb953",5835:"5bc13194",5869:"1371498d",5877:"ac93517b",5902:"fa551551",6049:"d6468e37",6050:"e06347fb",6092:"ac2bc92e",6103:"ccc49370",6143:"db3cf118",6145:"1e73a314",6162:"75e2d281",6176:"ff962926",6202:"16639819",6211:"26ac8cdf",6245:"e0508589",6249:"5aed59f0",6258:"ce9e273a",6269:"8eb0ea08",6322:"8ce2a1ba",6328:"589bdb1e",6336:"98b5d3d8",6341:"f7ca5716",6401:"84a993c9",6418:"a6ac4e5a",6419:"4fee9d1b",6434:"fad1e435",6437:"9de65543",6480:"01ccb5c8",6490:"e5a3b196",6517:"5233d56a",6521:"2558d2d9",6529:"9dbf45f9",6536:"977782a2",6581:"8f3fafc4",6621:"f9ba0b11",6670:"1147623b",6676:"fad52357",6691:"12c1ce9b",6698:"0632d840",6729:"fcd991e7",6741:"3a9cfda9",6750:"c62b7275",6754:"ae77e8e2",6791:"3238b1cf",6830:"06a15cdf",6846:"6cf1dc42",6861:"62ea5d23",6890:"c4b334be",6891:"1d6cc48c",6905:"d853b26e",6914:"6897adcd",6922:"d042486d",6956:"b7108862",6975:"4abc874c",6984:"b78fb88e",7033:"41e838b4",7066:"0471a4cd",7102:"6b8fb093",7108:"b2fca173",7193:"b225fd81",7197:"98269b50",7221:"91ef01f2",7239:"72e14192",7248:"f85e3b16",7266:"98ddfb9b",7267:"41da1ac1",7269:"7c696332",7270:"1df1f1fe",7281:"70dc8051",7339:"460546a2",7377:"64db70a3",7378:"e97f4c14",7397:"f085ba7b",7403:"c4902fbf",7406:"070d9710",7419:"07f371e9",7470:"bf53dfeb",7498:"00760ae4",7499:"617f6d79",7504:"1312c014",7506:"cc7281b7",7533:"b60c2781",7535:"11eeaf94",7546:"70dc5079",7608:"9f0e6576",7672:"4c067f25",7693:"8401d7f8",7705:"00aa4d09",7712:"417a36b6",7714:"4aa47776",7715:"87611dcb",7777:"93bff4e1",7779:"6d00fcd7",7792:"40368260",7825:"de2866f0",7894:"750f2da3",7918:"17896441",7920:"1a4e3797",7921:"27a82c69",7944:"b10dc488",7946:"f1555dde",7977:"c3f65626",7978:"3ebe1811",7979:"75ba67a2",8013:"4fe280e0",8056:"483e3ff6",8091:"9b7cc76c",8097:"120235e2",8104:"d57001c7",8108:"058b8cb6",8149:"44183a86",8185:"5457728b",8195:"a5b4bd89",8211:"73ba8788",8214:"abfcd627",8226:"733750c7",8261:"c1e4bdc6",8264:"c60bb7e3",8359:"dcec8022",8377:"23413994",8432:"0b1b165d",8442:"92999a1c",8446:"c2a73828",8493:"6d0faaeb",8499:"3116f78b",8518:"a7bd4aaa",8544:"134989b6",8593:"80fe39af",8610:"6875c492",8655:"aa5a177c",8661:"60362baf",8687:"ab009dcb",8699:"cad8b051",8724:"b6494d1f",8787:"1ab7b2d3",8840:"86d1f6d3",8876:"99a9cca6",8908:"0c3ee269",8947:"e4972855",8949:"3cf9319f",8993:"eefbcfbb",9027:"f8c5dcad",9037:"0b296ec4",9060:"ac0c26b1",9159:"97df2ae1",9165:"4805635c",9169:"51e4ac6f",9197:"199cfc1b",9238:"ca45e200",9292:"6cd4385b",9328:"b50c31a6",9351:"f3cd0dc0",9352:"3301054b",9357:"b8a60ade",9367:"88839718",9370:"45951754",9379:"c3e7c0c9",9387:"b0f1c099",9396:"c20650c8",9431:"261b748b",9454:"11408f98",9469:"47b7279e",9515:"4b508e59",9535:"28d37a26",9545:"ca94432f",9569:"3d2eae82",9571:"d530b40c",9576:"1404d338",9612:"5c7eddd6",9649:"06b16c00",9661:"5e95c892",9706:"cae65014",9709:"9176dd93",9788:"8561c1af",9819:"338e3047",9872:"d4b8d191",9911:"49784f7c",9920:"e0ede051",9934:"a435b217",9948:"923730dc",9996:"b2eb6ad0"}[e]||e)+"."+{1:"b268a4ff",29:"cfa2ee0f",53:"3d528c4b",183:"9ea60c13",230:"c22b5495",239:"b72ab9b0",245:"2da3f84a",277:"1980fe58",298:"77aebab8",326:"8ef77a95",342:"ef7b17cc",344:"9256df07",397:"35c0c3b9",416:"a9fa2e31",420:"540ba9db",477:"28b4894f",498:"da2bf0b6",526:"2e3f6a26",527:"564316de",533:"6754e606",584:"ce3ec52c",601:"6ed077dc",622:"ae1d3289",637:"7d70b09c",648:"af2652db",649:"e0f417c2",671:"f421797c",686:"c6cec5dc",716:"bb3c8694",786:"02c080a0",817:"6171315e",850:"46e67a15",854:"1ae277d3",866:"51101cc0",871:"3b179c65",883:"a1b108c2",896:"1a185783",1020:"12f96a53",1098:"9376ca58",1166:"81927892",1167:"5071902c",1171:"61d77942",1198:"c6b3d24e",1242:"d450787e",1284:"b86424a0",1286:"f0425fa3",1298:"045746a8",1346:"6d589873",1372:"4d3c0807",1396:"d9f76902",1403:"47710c5b",1439:"a08d00fa",1477:"291aa0f5",1478:"a5b06a87",1505:"4f51fb08",1512:"39aa1e10",1526:"5ac8aebc",1541:"af5373b0",1552:"0689f0ec",1559:"bf8ef6e1",1579:"5c18e36a",1580:"9ef79a75",1593:"044aa976",1618:"548faf69",1628:"4855cae6",1649:"a5271547",1681:"6c47959c",1713:"b25e2cdb",1769:"5babb364",1800:"27973366",1834:"4fbd37db",1841:"87306528",1853:"be6560f2",1855:"4b2dcd99",1881:"a2b8bc71",1908:"ce37cb72",1950:"19218de4",1969:"dbcc49b2",2018:"71e75b97",2027:"3eceaded",2058:"6cab85dd",2095:"91a1e84b",2118:"81c2e14d",2132:"671aed14",2151:"d50fda63",2175:"9ed4faf5",2182:"7b36796d",2195:"be0e3d37",2203:"435bd819",2213:"85c13785",2238:"499f0177",2243:"03563637",2267:"6ed2d46e",2276:"cc28fa71",2291:"d553443d",2294:"7eed5db7",2300:"9a64db10",2306:"93613756",2307:"352701bb",2330:"6cb0f6a5",2341:"f6b5d953",2360:"6545f173",2365:"e7b8a0aa",2401:"29d56059",2411:"a6db4330",2414:"8665dfea",2422:"28a72998",2424:"37cec601",2436:"8c020208",2452:"633c4443",2467:"06ba23b8",2489:"c1647787",2535:"c9374138",2558:"569b6c7c",2566:"08a6d81b",2632:"49ce9be5",2644:"a2ad23f3",2678:"9a746687",2701:"5b518bbb",2706:"e16743b2",2709:"478c8f82",2721:"4c565ff7",2750:"0cfff395",2763:"ff463ee4",2772:"2babde56",2783:"8f5aad56",2849:"efc85792",2878:"c68c2d49",2891:"e0524c05",2913:"889c785e",2917:"ab9c4a1f",2920:"964f2aad",2933:"761507c0",2969:"2a6f14d7",2986:"b5d0d049",2990:"c05bf139",2996:"ff714572",2999:"72e7009e",3042:"a0e94361",3044:"543ca3f5",3067:"116da774",3085:"c9d774b8",3088:"8ce3fd8c",3089:"8db801e4",3093:"c1f3830a",3148:"3f1868b2",3166:"c1a8dbf1",3203:"a6fa3dd1",3211:"9e3ea2d9",3230:"ecd357ad",3242:"fa69650d",3273:"ca4049d9",3276:"701f2ad1",3292:"a4948307",3299:"97ad4bdf",3305:"cf9ffb11",3316:"de669662",3330:"ea9ecc8c",3332:"b03429b8",3361:"8dab08a2",3380:"5e9478a0",3442:"d938b566",3445:"b8daf0c1",3501:"6524fc9e",3505:"3f122481",3531:"4405e4a9",3570:"50a7e150",3578:"32289b51",3580:"8f93fbc0",3608:"eda60729",3611:"ec883a41",3667:"9f3b7f3a",3689:"813cdec6",3718:"f415f8db",3759:"7ce32f43",3777:"0c792a64",3790:"2ebbadee",3854:"4639a9dc",3873:"b4f633d3",3903:"cbda959d",3910:"e12b8ab2",3919:"f2fa4cf6",3931:"6a6522dd",3939:"4e6cb178",3942:"e53b999c",3943:"c1d2645e",3972:"0ead6494",3990:"b06baf63",4e3:"a8be1db9",4001:"aed6b17f",4013:"ea73907f",4018:"d898a9ac",4030:"851c968c",4055:"00e4ddfd",4123:"657fb4a5",4150:"ede5199b",4157:"d1dc3eb5",4195:"7da7f97c",4197:"19716afb",4207:"5525609d",4210:"10e03850",4212:"64ca0d58",4217:"d0779d13",4230:"85073885",4240:"2151e45a",4254:"c5037625",4255:"aa975cee",4277:"8b2135a9",4279:"c4aeaffb",4299:"a18f26e2",4318:"f07ed4de",4319:"97dec1fe",4339:"2a3fffa1",4356:"d8793321",4368:"e2143200",4378:"5792db4a",4396:"5637b84b",4401:"1df98893",4412:"02cfd9e6",4424:"a86a1edc",4444:"f7e12124",4557:"3a3383d0",4573:"5b214eff",4634:"6e8137e2",4642:"d2d536f9",4739:"d6e25cfa",4762:"6202a3c1",4770:"8ce38774",4807:"0d81ecc9",4832:"9dfe55a2",4833:"afc82f52",4875:"8eac0b26",4937:"9e221d68",4955:"8bc25a8f",5010:"ae685c1c",5016:"97706698",5028:"b6a3645b",5062:"c8051d43",5074:"ef9eda79",5174:"1a64f338",5217:"e8ca4787",5219:"eff6d7fb",5221:"48794de8",5254:"80f01a4c",5281:"aca0e4c5",5311:"af5963c2",5330:"6ce6d9af",5353:"0e495eb0",5391:"85cad638",5415:"422e8676",5419:"36f24243",5435:"4b61edd5",5440:"8a56423e",5474:"083d9008",5519:"c1433644",5520:"5333f539",5529:"1f074e27",5547:"d063c56b",5609:"c6fba631",5629:"a8afd3bc",5644:"7f6265f7",5666:"238bbcdb",5686:"ccb33ca6",5722:"63fa8cc9",5750:"f9805039",5759:"19a83411",5781:"e7357649",5818:"83a9b3cf",5821:"a614d95a",5835:"7ce1f1b3",5869:"94ba484e",5877:"3ed6bd09",5902:"efed7457",6049:"7a9e2599",6050:"2f332a19",6090:"c74173fa",6092:"823d38d8",6103:"87f1b928",6143:"54d9875d",6145:"d069e5e9",6162:"d96e7df8",6176:"9e5dc5e3",6202:"8da2d50a",6211:"76c03419",6245:"b985f662",6249:"709e643f",6258:"fd5955d1",6269:"91a386a6",6322:"32a1ea16",6328:"9afc10b2",6336:"1467c42c",6341:"f2bb6622",6401:"87a0e941",6418:"d02516e0",6419:"67e610bc",6434:"11150e44",6437:"67ec83d8",6480:"2053fb32",6490:"4d301b44",6517:"64ef2b66",6521:"2de353f7",6529:"9ff599ba",6536:"6b9f3991",6581:"d0402b35",6621:"140a9773",6670:"cb5acf57",6676:"6c18a521",6691:"8b5d9c84",6698:"968775df",6729:"dba622f5",6741:"b6a9aada",6750:"ec1855e2",6754:"5904a677",6791:"5efe352d",6830:"13b80a6c",6846:"5b63ee3e",6861:"8dedce6d",6866:"54b68c82",6890:"514c7a99",6891:"8e775237",6905:"f022a0e8",6914:"7f5ad773",6922:"c6c2cad4",6956:"65d9cf72",6975:"dca989fa",6984:"23ed5cd7",7033:"7998d7d2",7066:"c0b54f26",7102:"b572367a",7108:"212d994f",7193:"c0840773",7197:"0ae7859a",7221:"a98bd150",7239:"5c58a44d",7248:"d2f92b78",7266:"3b570c39",7267:"b9f02753",7269:"9fb09265",7270:"85fbfb84",7281:"2d22c82f",7339:"b3e54f45",7377:"412365d8",7378:"c01ac42b",7397:"e9f71fc3",7403:"d3675d22",7406:"280d718d",7419:"9dab4a63",7470:"71795b75",7498:"bf771ad3",7499:"63d74f3c",7504:"809e09e6",7506:"225aeb13",7533:"e9b59ca7",7535:"3f276758",7546:"d03aa52a",7608:"20c6d5e7",7672:"02294076",7693:"b640a2c8",7705:"206f16d9",7712:"dc04982b",7714:"a54657f1",7715:"2909a868",7777:"da90f96c",7779:"50b05241",7792:"316135a7",7825:"a87dfe87",7894:"b80c4043",7918:"a9b56683",7920:"d673b92b",7921:"30435d91",7944:"661e2542",7946:"28415d3b",7977:"a267c06a",7978:"6ea026ed",7979:"2dc576c2",8013:"191176cd",8056:"e1c8efc6",8091:"800ad1d9",8097:"5e1fe73e",8104:"83bae65d",8108:"aae03cd5",8149:"446b1300",8185:"4f9c4cd7",8195:"1ccc5365",8211:"93520f56",8214:"f1d7cecb",8226:"1c5cae27",8251:"3f7c3ffb",8261:"eda9f024",8264:"05324360",8359:"bd9c0250",8377:"ee8e8b1a",8432:"7297bcc4",8442:"69ebff59",8446:"4259a971",8493:"01b6f3d4",8499:"3640f95d",8518:"f57837e2",8544:"b2cb6485",8561:"8a0ad08e",8593:"ff913160",8610:"4bb80a31",8655:"e827cb1f",8661:"ce6d6ec7",8687:"28f2b417",8699:"0abb2f9e",8724:"899371cb",8787:"30c9334f",8840:"46327c8e",8876:"fe80b9bc",8908:"a219a4b8",8947:"930c8460",8949:"0ef90fde",8993:"1b76adac",9027:"47ea9af0",9037:"d9df30c3",9060:"a94f7c70",9159:"da02754c",9165:"7f7146dc",9169:"1518fff6",9197:"398015e7",9238:"2aef5b5d",9292:"429c8edf",9328:"7b3cf247",9351:"d7af9406",9352:"804dbd66",9357:"3a64bec6",9367:"a5f789dd",9370:"6608e280",9379:"37df451a",9387:"2205350f",9396:"d4aac114",9431:"245e98f5",9454:"0e2c8a25",9469:"f26d96d8",9515:"632f7b7d",9535:"d04c9e02",9545:"1a17c189",9569:"cdfaab2a",9571:"42680727",9576:"315a1e0c",9612:"d2782d5b",9649:"b8a16e6f",9661:"a1c80151",9706:"9a8ffe65",9709:"59a94577",9788:"b4b3f5c7",9819:"8f6c232a",9872:"a4e7f584",9911:"64717e7f",9920:"5928b4d6",9934:"3ef273a0",9948:"b578bab3",9996:"c8a7558d"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,c)=>Object.prototype.hasOwnProperty.call(e,c),f={},b="chaos-mesh-website:",r.l=(e,c,a,d)=>{if(f[e])f[e].push(c);else{var t,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(l);var b=f[e];if(delete f[e],t.parentNode&&t.parentNode.removeChild(t),b&&b.forEach((e=>e(a))),c)return c(a)},l=setTimeout(s.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=s.bind(null,t.onerror),t.onload=s.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={16639819:"6202",17896441:"7918",23413994:"8377",29637022:"2018",40368260:"7792",45951754:"9370",63389418:"3166",69935607:"3203",72486833:"3505",75234536:"526",83029544:"5217",88839718:"9367",93542405:"649","8eb4e46b":"1",f6e0d55d:"29","935f2afb":"53",f87c5e9f:"183",df9851a4:"230",f25d6f58:"239","70e92f40":"245",c4348237:"277","09437027":"298","5f2b6494":"326","9c1ddc94":"342","9908821b":"344","9f3a4faa":"397",b565383c:"416",d3fbcd5e:"420","9317738f":"477","69b09ea9":"498",ad242a1d:"527",b2b675dd:"533","9c2f3124":"584",cc101466:"601","719342b4":"622","64a5caf2":"637","43aabc11":"648","1ea5fb0a":"671","191c30c0":"686","02ac8add":"716","1dbe88e0":"786","7247ad55":"817",ec4a99a3:"850",d7c70c3e:"854","80b2310f":"866",f752fba7:"871","227412c0":"896","84415e09":"1020",d5e72bf8:"1098","85f8d6a8":"1166",d40ea7ec:"1167","66463a72":"1171",ca070088:"1198","02dabfee":"1242","242716f8":"1284",b3aeb16b:"1298","257f4dd7":"1346","1db64337":"1372","261e8f95":"1396",cfb5730b:"1403","55e6429c":"1439",b2f554cd:"1477","771f38eb":"1478","7c2ff145":"1505",e91017d6:"1512",b3bfd067:"1526","0b7a903d":"1541","1cace19b":"1552","8e439d35":"1559","70329d25":"1579","562c697b":"1580",c12f7c14:"1593","5928dda1":"1618","733580ea":"1628","8dbd7dd1":"1649",e095054b:"1681",a7023ddc:"1713","53bc5dff":"1769","3cf74380":"1800",cefcddad:"1841","1af9c351":"1853","47be93b7":"1855","80dc3f3b":"1881",cbec43f6:"1908","47c9151a":"1950",a998e395:"1969","0a3c9d81":"2027","64f8cf74":"2058","67f4ac65":"2095",cee468a4:"2118",b089efb6:"2132","24fb58b0":"2151","7ffa5dd6":"2175","05d348c0":"2182",cf625c23:"2195","3f21b6c3":"2203","90ecb0a4":"2213","3c564b32":"2238",aed57c6e:"2243","0eff740b":"2267",b4636e3e:"2276",e747ec83:"2291",ea0178cf:"2294",ecd7e5b4:"2300","98453b9f":"2306",bdff1965:"2307","42c371df":"2330","2a74af38":"2341",ce420c5c:"2360","20723ffa":"2365",ad8f7d19:"2401","42de488b":"2411",b2d0ba71:"2414",c231ae2a:"2422","6b7a086d":"2424",cf3f51b3:"2436",bda40383:"2452","971bc2ff":"2467","814f3328":"2535","94b8fb96":"2558","49e045f9":"2566",b5bf7bb0:"2632",a93cf237:"2644",e4ec0e82:"2678","95e0ec25":"2701","4ef0a327":"2706",b1cabbcf:"2709","3c03df54":"2721",c6fcc717:"2750","59a5a33f":"2763","34d05537":"2772",e86885f1:"2783","10870ede":"2849",afaff11a:"2878",b6f15f4b:"2891","41bc510c":"2913","02a9c178":"2917","8b8c00ac":"2920","2b50bc33":"2933","7462fa9a":"2969",e73d8426:"2986",f7455008:"2990","3fe76707":"2996","23b3163c":"2999","18b93cb3":"3042",f55ac880:"3044","75fca3db":"3067","1f391b9e":"3085",fbaf32d2:"3088",a6aa9e1f:"3089",d50e42cc:"3093","90d2a8ae":"3148","1ffdd7de":"3211","64000b03":"3230","9cdd8bd1":"3242",ee6fbbf8:"3273","4965e7cb":"3276","57d917f5":"3292","9f09c0c4":"3299","27d6e2a7":"3305",ca2a08b2:"3316","1c4ec592":"3330","4f7ce8f2":"3332","8ae96016":"3361","5af1dacc":"3380",df566c82:"3442",f7343d2a:"3445","3253b287":"3501",cf98717e:"3531","9a7c2e36":"3570",fabf4480:"3578",b14d964f:"3580","9e4087bc":"3608",e95d6e7a:"3611",d4b8580c:"3667","956fb5f2":"3689",f7309d15:"3718",b5c9f1c1:"3759",a1997b5c:"3777","177b2451":"3790","140701a3":"3854",bc0eadd3:"3873",b516026a:"3903","9fcddf3f":"3910","3f767692":"3919","879c32d4":"3931","2bd9a4f4":"3939","0ae6693d":"3942","52e6516f":"3943","591059de":"3972","169a7e91":"3990",e33f29d2:"4000","321751f7":"4001","01a85c17":"4013",a1f9bdc4:"4018","529c53fa":"4030",e3d8eb44:"4055","8fbfdb6a":"4123",fecc65b6:"4150","283e63f8":"4157",c4f5d8e4:"4195",ea6ece8f:"4197","8a93abd2":"4207","34b4c58f":"4210",e84af1dc:"4212","78aea7f9":"4217","2a5030af":"4230","6a7a1117":"4240",b12fc7e1:"4254","02489c3c":"4255","601d4a49":"4277","9809ed3b":"4279","8a64a7fb":"4299",fcb910d9:"4318","18f4287e":"4319",b85d130b:"4339","3120bb7f":"4356",a94703ab:"4368","22c99dfb":"4378","284bc205":"4396","735a03fc":"4401","217721c0":"4412","85828edd":"4424",c1e307da:"4444",fd89e6dc:"4557","99bc7767":"4573","8dc6dd8d":"4634","637f1cf7":"4642","51f60bd2":"4739",eecb3c77:"4762",a88d826b:"4770",ece86388:"4832",c929a6dd:"4833","37220d5e":"4875","3106804f":"4937","3fba30c5":"4955","014b445b":"5010","5e3e1feb":"5016",a6cd7ee1:"5028","69369ae2":"5062","77e23114":"5074",f9adc506:"5174",d933ec33:"5219",c837099f:"5221","194e0ab1":"5254","791dccb8":"5281","3c1c61ff":"5311","40df0723":"5330","2f3ff69e":"5353","369bd8f8":"5391","891e3ffb":"5415","72fec000":"5419","6b841b38":"5435",e671ed15:"5440","6d05cdaf":"5474","4fd6736b":"5519","3c9dc0dd":"5520",da5208fe:"5529","84665c39":"5547","0cb2f086":"5609","4eaba250":"5629","8c78330a":"5644","63328f1b":"5666",f84e09eb:"5686","19fe0a86":"5722","6f8a752d":"5750",ee8ef8d4:"5759","4b87fcc5":"5781","3b5985a4":"5818",c75fb953:"5821","5bc13194":"5835","1371498d":"5869",ac93517b:"5877",fa551551:"5902",d6468e37:"6049",e06347fb:"6050",ac2bc92e:"6092",ccc49370:"6103",db3cf118:"6143","1e73a314":"6145","75e2d281":"6162",ff962926:"6176","26ac8cdf":"6211",e0508589:"6245","5aed59f0":"6249",ce9e273a:"6258","8eb0ea08":"6269","8ce2a1ba":"6322","589bdb1e":"6328","98b5d3d8":"6336",f7ca5716:"6341","84a993c9":"6401",a6ac4e5a:"6418","4fee9d1b":"6419",fad1e435:"6434","9de65543":"6437","01ccb5c8":"6480",e5a3b196:"6490","5233d56a":"6517","2558d2d9":"6521","9dbf45f9":"6529","977782a2":"6536","8f3fafc4":"6581",f9ba0b11:"6621","1147623b":"6670",fad52357:"6676","12c1ce9b":"6691","0632d840":"6698",fcd991e7:"6729","3a9cfda9":"6741",c62b7275:"6750",ae77e8e2:"6754","3238b1cf":"6791","06a15cdf":"6830","6cf1dc42":"6846","62ea5d23":"6861",c4b334be:"6890","1d6cc48c":"6891",d853b26e:"6905","6897adcd":"6914",d042486d:"6922",b7108862:"6956","4abc874c":"6975",b78fb88e:"6984","41e838b4":"7033","0471a4cd":"7066","6b8fb093":"7102",b2fca173:"7108",b225fd81:"7193","98269b50":"7197","91ef01f2":"7221","72e14192":"7239",f85e3b16:"7248","98ddfb9b":"7266","41da1ac1":"7267","7c696332":"7269","1df1f1fe":"7270","70dc8051":"7281","460546a2":"7339","64db70a3":"7377",e97f4c14:"7378",f085ba7b:"7397",c4902fbf:"7403","070d9710":"7406","07f371e9":"7419",bf53dfeb:"7470","00760ae4":"7498","617f6d79":"7499","1312c014":"7504",cc7281b7:"7506",b60c2781:"7533","11eeaf94":"7535","70dc5079":"7546","9f0e6576":"7608","4c067f25":"7672","8401d7f8":"7693","00aa4d09":"7705","417a36b6":"7712","4aa47776":"7714","87611dcb":"7715","93bff4e1":"7777","6d00fcd7":"7779",de2866f0:"7825","750f2da3":"7894","1a4e3797":"7920","27a82c69":"7921",b10dc488:"7944",f1555dde:"7946",c3f65626:"7977","3ebe1811":"7978","75ba67a2":"7979","4fe280e0":"8013","483e3ff6":"8056","9b7cc76c":"8091","120235e2":"8097",d57001c7:"8104","058b8cb6":"8108","44183a86":"8149","5457728b":"8185",a5b4bd89:"8195","73ba8788":"8211",abfcd627:"8214","733750c7":"8226",c1e4bdc6:"8261",c60bb7e3:"8264",dcec8022:"8359","0b1b165d":"8432","92999a1c":"8442",c2a73828:"8446","6d0faaeb":"8493","3116f78b":"8499",a7bd4aaa:"8518","134989b6":"8544","80fe39af":"8593","6875c492":"8610",aa5a177c:"8655","60362baf":"8661",ab009dcb:"8687",cad8b051:"8699",b6494d1f:"8724","1ab7b2d3":"8787","86d1f6d3":"8840","99a9cca6":"8876","0c3ee269":"8908",e4972855:"8947","3cf9319f":"8949",eefbcfbb:"8993",f8c5dcad:"9027","0b296ec4":"9037",ac0c26b1:"9060","97df2ae1":"9159","4805635c":"9165","51e4ac6f":"9169","199cfc1b":"9197",ca45e200:"9238","6cd4385b":"9292",b50c31a6:"9328",f3cd0dc0:"9351","3301054b":"9352",b8a60ade:"9357",c3e7c0c9:"9379",b0f1c099:"9387",c20650c8:"9396","261b748b":"9431","11408f98":"9454","47b7279e":"9469","4b508e59":"9515","28d37a26":"9535",ca94432f:"9545","3d2eae82":"9569",d530b40c:"9571","1404d338":"9576","5c7eddd6":"9612","06b16c00":"9649","5e95c892":"9661",cae65014:"9706","9176dd93":"9709","8561c1af":"9788","338e3047":"9819",d4b8d191:"9872","49784f7c":"9911",e0ede051:"9920",a435b217:"9934","923730dc":"9948",b2eb6ad0:"9996"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(c,a)=>{var f=r.o(e,c)?e[c]:void 0;if(0!==f)if(f)a.push(f[2]);else if(/^(1303|532)$/.test(c))e[c]=0;else{var b=new Promise(((a,b)=>f=e[c]=[a,b]));a.push(f[2]=b);var d=r.p+r.u(c),t=new Error;r.l(d,(a=>{if(r.o(e,c)&&(0!==(f=e[c])&&(e[c]=void 0),f)){var b=a&&("load"===a.type?"missing":a.type),d=a&&a.target&&a.target.src;t.message="Loading chunk "+c+" failed.\n("+b+": "+d+")",t.name="ChunkLoadError",t.type=b,t.request=d,f[1](t)}}),"chunk-"+c,c)}},r.O.j=c=>0===e[c];var c=(c,a)=>{var f,b,d=a[0],t=a[1],o=a[2],n=0;if(d.some((c=>0!==e[c]))){for(f in t)r.o(t,f)&&(r.m[f]=t[f]);if(o)var i=o(r)}for(c&&c(a);n