mirror of https://github.com/cirruslabs/tart.git
2276 lines
68 KiB
HTML
2276 lines
68 KiB
HTML
|
|
<!doctype html>
|
|
<html lang="en" class="no-js">
|
|
<head>
|
|
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
|
|
<meta name="description" content="Advanced configuration and troubleshooting tips for advanced configurations.">
|
|
|
|
|
|
<meta name="author" content="Cirrus Labs">
|
|
|
|
|
|
<link rel="canonical" href="https://tart.run/faq/">
|
|
|
|
|
|
<link rel="prev" href="../orchard/integration-guide/">
|
|
|
|
|
|
<link rel="next" href="../legal/terms/">
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="alternate" type="application/rss+xml" title="RSS feed" href="../feed_rss_created.xml">
|
|
<link rel="alternate" type="application/rss+xml" title="RSS feed of updated content" href="../feed_rss_updated.xml">
|
|
|
|
<link rel="icon" href="../assets/images/favicon.ico">
|
|
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.6">
|
|
|
|
|
|
|
|
<title>Frequently Asked Questions - Tart Virtualization</title>
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="../assets/stylesheets/main.484c7ddc.min.css">
|
|
|
|
|
|
<link rel="stylesheet" href="../assets/stylesheets/palette.ab4e12ef.min.css">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="../assets/external/fonts.googleapis.com/css.49ea35f2.css">
|
|
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="../stylesheets/extra.css">
|
|
|
|
<link rel="stylesheet" href="../stylesheets/landing.css">
|
|
|
|
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<script id="__analytics">function __md_analytics(){function e(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],e("js",new Date),e("config","G-HXBEB9D47X"),document.addEventListener("DOMContentLoaded",(function(){document.forms.search&&document.forms.search.query.addEventListener("blur",(function(){this.value&&e("event","search",{search_term:this.value})}));document$.subscribe((function(){var t=document.forms.feedback;if(void 0!==t)for(var a of t.querySelectorAll("[type=submit]"))a.addEventListener("click",(function(a){a.preventDefault();var n=document.location.pathname,d=this.getAttribute("data-md-value");e("event","feedback",{page:n,data:d}),t.firstElementChild.disabled=!0;var r=t.querySelector(".md-feedback__note [data-md-value='"+d+"']");r&&(r.hidden=!1)})),t.hidden=!1})),location$.subscribe((function(t){e("config","G-HXBEB9D47X",{page_path:t.pathname})}))}));var t=document.createElement("script");t.async=!0,t.src="https://www.googletagmanager.com/gtag/js?id=G-HXBEB9D47X",document.getElementById("__analytics").insertAdjacentElement("afterEnd",t)}</script>
|
|
|
|
<script>if("undefined"!=typeof __md_analytics){var consent=__md_get("__consent");consent&&consent.analytics&&__md_analytics()}</script>
|
|
|
|
|
|
|
|
|
|
|
|
<meta property="og:type" content="website" />
|
|
<meta property="og:title" content="Frequently Asked Questions - Tart Virtualization" />
|
|
<meta property="og:description" content="Advanced configuration and troubleshooting tips for advanced configurations." />
|
|
<meta property="og:image" content="https://tart.run/assets/images/social/faq.png" />
|
|
<meta property="og:image:type" content="image/png" />
|
|
<meta property="og:image:width" content="1200" />
|
|
<meta property="og:image:height" content="630" />
|
|
<meta property="og:url" content="https://tart.run/faq/" />
|
|
<meta property="twitter:card" content="summary_large_image" />
|
|
<meta property="twitter:title" content="Frequently Asked Questions - Tart Virtualization" />
|
|
<meta property="twitter:description" content="Advanced configuration and troubleshooting tips for advanced configurations." />
|
|
<meta property="twitter:image" content="https://tart.run/assets/images/social/faq.png" />
|
|
</head>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="orange" data-md-color-accent="orange">
|
|
|
|
|
|
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
|
|
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
|
|
<label class="md-overlay" for="__drawer"></label>
|
|
<div data-md-component="skip">
|
|
|
|
|
|
<a href="#headless-machines" class="md-skip">
|
|
Skip to content
|
|
</a>
|
|
|
|
</div>
|
|
<div data-md-component="announce">
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<header class="md-header md-header--shadow md-header--lifted" data-md-component="header">
|
|
<nav class="md-header__inner md-grid" aria-label="Header">
|
|
<a href=".." title="Tart Virtualization" class="md-header__button md-logo" aria-label="Tart Virtualization" data-md-component="logo">
|
|
|
|
<img src="../assets/images/TartLogo.png" alt="logo">
|
|
|
|
</a>
|
|
<label class="md-header__button md-icon" for="__drawer">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
|
|
</label>
|
|
<div class="md-header__title" data-md-component="header-title">
|
|
<div class="md-header__ellipsis">
|
|
<div class="md-header__topic">
|
|
<span class="md-ellipsis">
|
|
Tart Virtualization
|
|
</span>
|
|
</div>
|
|
<div class="md-header__topic" data-md-component="header-topic">
|
|
<span class="md-ellipsis">
|
|
|
|
Frequently Asked Questions
|
|
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<form class="md-header__option" data-md-component="palette">
|
|
|
|
|
|
|
|
|
|
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="orange" data-md-color-accent="orange" aria-hidden="true" type="radio" name="__palette" id="__palette_0">
|
|
|
|
|
|
</form>
|
|
|
|
|
|
|
|
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
|
|
|
|
|
|
|
|
|
|
|
|
<label class="md-header__button md-icon" for="__search">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
|
|
</label>
|
|
<div class="md-search" data-md-component="search" role="dialog">
|
|
<label class="md-search__overlay" for="__search"></label>
|
|
<div class="md-search__inner" role="search">
|
|
<form class="md-search__form" name="search">
|
|
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
|
|
<label class="md-search__icon md-icon" for="__search">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
|
|
</label>
|
|
<nav class="md-search__options" aria-label="Search">
|
|
|
|
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
|
|
</button>
|
|
</nav>
|
|
|
|
<div class="md-search__suggest" data-md-component="search-suggest"></div>
|
|
|
|
</form>
|
|
<div class="md-search__output">
|
|
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
|
|
<div class="md-search-result" data-md-component="search-result">
|
|
<div class="md-search-result__meta">
|
|
Initializing search
|
|
</div>
|
|
<ol class="md-search-result__list" role="presentation"></ol>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="md-header__source">
|
|
<a href="https://github.com/cirruslabs/tart/" title="Go to repository" class="md-source" data-md-component="source">
|
|
<div class="md-source__icon md-icon">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
|
|
</div>
|
|
<div class="md-source__repository">
|
|
GitHub
|
|
</div>
|
|
</a>
|
|
</div>
|
|
|
|
</nav>
|
|
|
|
|
|
|
|
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
|
|
<div class="md-grid">
|
|
<ul class="md-tabs__list">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-tabs__item">
|
|
<a href=".." class="md-tabs__link">
|
|
|
|
|
|
|
|
|
|
|
|
Home
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-tabs__item">
|
|
<a href="../quick-start/" class="md-tabs__link">
|
|
|
|
|
|
|
|
|
|
|
|
Quick Start
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-tabs__item">
|
|
<a href="../integrations/cirrus-cli/" class="md-tabs__link">
|
|
|
|
|
|
|
|
Integrations
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-tabs__item">
|
|
<a href="../licensing/" class="md-tabs__link">
|
|
|
|
|
|
|
|
|
|
|
|
Support & Licensing
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-tabs__item">
|
|
<a href="../orchard/quick-start/" class="md-tabs__link">
|
|
|
|
|
|
|
|
Orchestration
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-tabs__item md-tabs__item--active">
|
|
<a href="./" class="md-tabs__link">
|
|
|
|
|
|
|
|
|
|
|
|
FAQ
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-tabs__item">
|
|
<a href="../legal/terms/" class="md-tabs__link">
|
|
|
|
|
|
|
|
Legal
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-tabs__item">
|
|
<a href="../blog/" class="md-tabs__link">
|
|
|
|
|
|
|
|
Blog
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</div>
|
|
</nav>
|
|
|
|
|
|
</header>
|
|
|
|
<div class="md-container" data-md-component="container">
|
|
|
|
|
|
|
|
|
|
<main class="md-main" data-md-component="main">
|
|
<div class="md-main__inner md-grid">
|
|
|
|
|
|
|
|
|
|
|
|
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" hidden>
|
|
<div class="md-sidebar__scrollwrap">
|
|
<div class="md-sidebar__inner">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
|
|
<label class="md-nav__title" for="__drawer">
|
|
<a href=".." title="Tart Virtualization" class="md-nav__button md-logo" aria-label="Tart Virtualization" data-md-component="logo">
|
|
|
|
<img src="../assets/images/TartLogo.png" alt="logo">
|
|
|
|
</a>
|
|
Tart Virtualization
|
|
</label>
|
|
|
|
<div class="md-nav__source">
|
|
<a href="https://github.com/cirruslabs/tart/" title="Go to repository" class="md-source" data-md-component="source">
|
|
<div class="md-source__icon md-icon">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
|
|
</div>
|
|
<div class="md-source__repository">
|
|
GitHub
|
|
</div>
|
|
</a>
|
|
</div>
|
|
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href=".." class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Home
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../quick-start/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Quick Start
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
|
|
|
|
|
|
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Integrations
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
|
|
<label class="md-nav__title" for="__nav_3">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
|
|
|
|
Integrations
|
|
|
|
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../integrations/cirrus-cli/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Self-hosted CI
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="https://cirrus-runners.app/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
GitHub Actions
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../integrations/gitlab-runner/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
GitLab Runner
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../integrations/buildkite/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Buildkite
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../integrations/packer/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Packer
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../licensing/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Support & Licensing
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
|
|
|
|
|
|
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Orchestration
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
|
|
<label class="md-nav__title" for="__nav_5">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
|
|
|
|
Orchestration
|
|
|
|
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../orchard/quick-start/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Quick Start
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../orchard/architecture-and-security/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Architecture and Security
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../orchard/deploying-controller/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Deploying Controller
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../orchard/deploying-workers/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Deploying Workers
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../orchard/using-orchard-cli/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Using Orchard CLI
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../orchard/managing-cluster/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Managing the Cluster
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../orchard/integration-guide/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Integrating with the API
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--active">
|
|
|
|
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
|
|
|
|
|
|
|
|
<label class="md-nav__link md-nav__link--active" for="__toc">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
FAQ
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<a href="./" class="md-nav__link md-nav__link--active">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
FAQ
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
|
|
|
|
|
|
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
|
|
|
|
|
|
|
|
|
|
<label class="md-nav__title" for="__toc">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Table of contents
|
|
</label>
|
|
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#headless-machines" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Headless machines
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Headless machines">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#log-in-via-gui-at-least-once" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Log in via GUI at least once
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#create-and-unlock-the-login-keychain-via-the-terminal" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Create and unlock the login keychain via the terminal
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#troubleshooting-crashes" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Troubleshooting crashes
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#vm-location-on-disk" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
VM location on disk
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#nested-virtualization-support" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Nested virtualization support?
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#connecting-to-a-service-running-on-host" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Connecting to a service running on host
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#avoiding-the-local-network-permission-pop-up" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Avoiding the "Local Network" permission pop-up
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#changing-the-default-nat-subnet" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Changing the default NAT subnet
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#changing-the-default-dhcp-lease-time" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Changing the default DHCP lease time
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#unsupported-dhcp-client-identifiers" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Unsupported DHCP client identifiers
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#resolving-the-vms-ip-when-using-bridged-networking" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Resolving the VM's IP when using bridged networking
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#running-loginclonepullpush-commands-over-ssh" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Running login/clone/pull/push commands over SSH
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#how-is-tart-different-from-anka" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
How is Tart different from Anka?
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#automatic-pruning" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Automatic pruning
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#disk-resizing" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Disk resizing
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7" >
|
|
|
|
|
|
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Legal
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
|
|
<label class="md-nav__title" for="__nav_7">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
|
|
|
|
Legal
|
|
|
|
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../legal/terms/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Terms of Service
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../legal/privacy/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Privacy
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8" >
|
|
|
|
|
|
<label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="0">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Blog
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_8_label" aria-expanded="false">
|
|
<label class="md-nav__title" for="__nav_8">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
|
|
|
|
Blog
|
|
|
|
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../blog/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Blog
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_2" >
|
|
|
|
|
|
<label class="md-nav__link" for="__nav_8_2" id="__nav_8_2_label" tabindex="0">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Archive
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_8_2_label" aria-expanded="false">
|
|
<label class="md-nav__title" for="__nav_8_2">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
|
|
|
|
Archive
|
|
|
|
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../blog/archive/2025/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
2025
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../blog/archive/2024/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
2024
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../blog/archive/2023/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
2023
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_3" >
|
|
|
|
|
|
<label class="md-nav__link" for="__nav_8_3" id="__nav_8_3_label" tabindex="0">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Categories
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_8_3_label" aria-expanded="false">
|
|
<label class="md-nav__title" for="__nav_8_3">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
|
|
|
|
Categories
|
|
|
|
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../blog/category/announcement/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
announcement
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../blog/category/orchard/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
orchard
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
|
|
<div class="md-sidebar__scrollwrap">
|
|
<div class="md-sidebar__inner">
|
|
|
|
|
|
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
|
|
|
|
|
|
|
|
|
|
<label class="md-nav__title" for="__toc">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Table of contents
|
|
</label>
|
|
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#headless-machines" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Headless machines
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Headless machines">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#log-in-via-gui-at-least-once" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Log in via GUI at least once
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#create-and-unlock-the-login-keychain-via-the-terminal" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Create and unlock the login keychain via the terminal
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#troubleshooting-crashes" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Troubleshooting crashes
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#vm-location-on-disk" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
VM location on disk
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#nested-virtualization-support" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Nested virtualization support?
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#connecting-to-a-service-running-on-host" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Connecting to a service running on host
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#avoiding-the-local-network-permission-pop-up" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Avoiding the "Local Network" permission pop-up
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#changing-the-default-nat-subnet" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Changing the default NAT subnet
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#changing-the-default-dhcp-lease-time" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Changing the default DHCP lease time
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#unsupported-dhcp-client-identifiers" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Unsupported DHCP client identifiers
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#resolving-the-vms-ip-when-using-bridged-networking" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Resolving the VM's IP when using bridged networking
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#running-loginclonepullpush-commands-over-ssh" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Running login/clone/pull/push commands over SSH
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#how-is-tart-different-from-anka" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
How is Tart different from Anka?
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#automatic-pruning" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Automatic pruning
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#disk-resizing" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Disk resizing
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</nav>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="md-content" data-md-component="content">
|
|
|
|
<article class="md-content__inner md-typeset">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<h1>FAQ</h1>
|
|
|
|
<h2 id="headless-machines">Headless machines<a class="headerlink" href="#headless-machines" title="Permanent link">¶</a></h2>
|
|
<p>Starting from macOS 15 (Sequoia), there's an undocumented requirement from <a href="https://developer.apple.com/documentation/virtualization">Virtualization.Framework</a> (which Tart uses) to have an unlocked <code>login.keychain</code> available at the times when running a VM.</p>
|
|
<p>Without an existing and unlocked <code>login.keychain</code>, the VM won't start with errors like:</p>
|
|
<ul>
|
|
<li><code>SecKeyCreateRandomKey_ios failed</code></li>
|
|
<li><code>Failed to generate keypair</code></li>
|
|
<li><code>Interaction is not allowed with the Security Server</code></li>
|
|
</ul>
|
|
<p>Below you'll find a couple of workarounds for this behavior.</p>
|
|
<h3 id="log-in-via-gui-at-least-once">Log in via GUI at least once<a class="headerlink" href="#log-in-via-gui-at-least-once" title="Permanent link">¶</a></h3>
|
|
<p>Connect to the headless machine via <a href="https://support.apple.com/guide/mac-help/share-the-screen-of-another-mac-mh14066/mac">Screen Sharing</a> and log in to a Mac user account. If you haven't done already, you can enable Screen Sharing <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-mac-instance.html#mac-instance-vnc">via the terminal</a>.</p>
|
|
<p>Logging in graphically will automatically create the <code>login.keychain</code>. Afterward, you have two options:</p>
|
|
<ul>
|
|
<li>configure <a href="https://support.apple.com/en-us/102316">automatic log in to a Mac user account</a><ul>
|
|
<li>this will maintain a running user session (GUI) even after the machine reboots</li>
|
|
<li>moreover, you can still lock the screen (either manually <a href="https://support.apple.com/guide/mac-help/change-lock-screen-settings-on-mac-mh11784/mac">or automatically</a>), however, the security benefit of this is questionable</li>
|
|
</ul>
|
|
</li>
|
|
<li>use <code>security unlock-keychain login.keychain</code> to unlock the login keychain via the terminal<ul>
|
|
<li>this command also supports the <code>-p</code> command-line argument, which allows you to supply a password and unlock non-interactively</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<h3 id="create-and-unlock-the-login-keychain-via-the-terminal">Create and unlock the login keychain via the terminal<a class="headerlink" href="#create-and-unlock-the-login-keychain-via-the-terminal" title="Permanent link">¶</a></h3>
|
|
<p>Compared to the previous approach, this one is fully automated, but might stop working at some point in the future:</p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>security<span class="w"> </span>create-keychain<span class="w"> </span>-p<span class="w"> </span><span class="s1">''</span><span class="w"> </span>login.keychain
|
|
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a>security<span class="w"> </span>unlock-keychain<span class="w"> </span>-p<span class="w"> </span><span class="s1">''</span><span class="w"> </span>login.keychain
|
|
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a>security<span class="w"> </span>login-keychain<span class="w"> </span>-s<span class="w"> </span>login.keychain
|
|
</code></pre></div>
|
|
<p>Note that this will create a <code>login.keychain</code> with an empty password. Consider supplying a different value to <code>-p</code> or omitting the <code>-p</code> to enter the password interactively. </p>
|
|
<h2 id="troubleshooting-crashes">Troubleshooting crashes<a class="headerlink" href="#troubleshooting-crashes" title="Permanent link">¶</a></h2>
|
|
<p>If you experience a crash or encounter another error while using the tart executable, you can collect debug information to assist with troubleshooting. Run the following command in a separate terminal window to gather logs from the Tart process and the macOS Virtualization subsystem:</p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>log<span class="w"> </span>stream<span class="w"> </span>--predicate<span class="o">=</span><span class="s1">'process=="tart" OR process CONTAINS "Virtualization"'</span><span class="w"> </span>><span class="w"> </span>tart.log
|
|
</code></pre></div>
|
|
<p>While the events are being streamed, attempt to reproduce the issue. Once the issue is reproduced, stop the streaming by pressing Ctrl+C. Then, attach the tart.log file to your report.</p>
|
|
<h2 id="vm-location-on-disk">VM location on disk<a class="headerlink" href="#vm-location-on-disk" title="Permanent link">¶</a></h2>
|
|
<p>Tart stores all its files in <code>~/.tart/</code> directory. Local images that you can run are stored in <code>~/.tart/vms/</code>.
|
|
Remote images are pulled into <code>~/.tart/cache/OCIs/</code>.</p>
|
|
<h2 id="nested-virtualization-support">Nested virtualization support?<a class="headerlink" href="#nested-virtualization-support" title="Permanent link">¶</a></h2>
|
|
<p>Tart is limited by functionality of Apple's <code>Virtualization.Framework</code>. At the moment <code>Virtualization.Framework</code>
|
|
supports nested virtualization only on M3 or M4 chips running macOS 15 (Sequoia) or later and <a href="https://github.com/cirruslabs/tart/issues/1231#issuecomment-4410915463">only for Linux VMs</a>. By default, it is disabled, but can be enabled by passing the <code>--nested</code> flag to <code>tart run</code>.</p>
|
|
<h2 id="connecting-to-a-service-running-on-host">Connecting to a service running on host<a class="headerlink" href="#connecting-to-a-service-running-on-host" title="Permanent link">¶</a></h2>
|
|
<p>To connect from within a virtual machine to a service running on the host machine
|
|
please first make sure that the service is bound to <code>0.0.0.0</code>.</p>
|
|
<p>Then from within a virtual machine you can access the service using the router's IP address that you can get either from <code>Preferences -> Network</code>
|
|
or by running the following command in the Terminal:</p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a>netstat<span class="w"> </span>-nr<span class="w"> </span><span class="p">|</span><span class="w"> </span>awk<span class="w"> </span><span class="s1">'/default/{print $2; exit}'</span>
|
|
</code></pre></div>
|
|
<p>Note: that accessing host is only possible with the default NAT network. If you are running your virtual machines with
|
|
<a href="https://github.com/cirruslabs/softnet">Softnet</a> (via <code>tart run --net-softnet <VM NAME>)</code>, then the network isolation
|
|
is stricter and it's not possible to access the host.</p>
|
|
<h2 id="avoiding-the-local-network-permission-pop-up">Avoiding the "Local Network" permission pop-up<a class="headerlink" href="#avoiding-the-local-network-permission-pop-up" title="Permanent link">¶</a></h2>
|
|
<p>Starting from macOS 15 (Sequoia), a GUI "Local Network" permission pop-up might appear when Tart is used by another tool that needs to connect to a VM over a private IPv4 network, for example <a href="https://developer.hashicorp.com/packer/integrations/cirruslabs/tart/latest/components/builder/tart">Packer</a>.</p>
|
|
<p>This is not caused by Tart itself, but by the host-side process that needs network access into the guest.</p>
|
|
<p>If you need a non-interactive workaround, you can configure the <a href="https://developer.apple.com/documentation/technotes/tn3179-understanding-local-network-privacy#macOS-considerations">local network privacy preferences</a> on the host so that all <a href="https://datatracker.ietf.org/doc/html/rfc1918#section-3">RFC 1918</a> address ranges that Tart VMs commonly use are excluded from the prompt:</p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a>sudo<span class="w"> </span>defaults<span class="w"> </span>write<span class="w"> </span>com.apple.network.local-network<span class="w"> </span>AllowedEthernetLocalNetworkAddresses<span class="w"> </span>-array<span class="w"> </span><span class="s2">"10.0.0.0/8"</span><span class="w"> </span><span class="s2">"172.16.0.0/12"</span><span class="w"> </span><span class="s2">"192.168.0.0/16"</span>
|
|
<a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a>sudo<span class="w"> </span>defaults<span class="w"> </span>write<span class="w"> </span>com.apple.network.local-network<span class="w"> </span>AllowedWiFiLocalNetworkAddresses<span class="w"> </span>-array<span class="w"> </span><span class="s2">"10.0.0.0/8"</span><span class="w"> </span><span class="s2">"172.16.0.0/12"</span><span class="w"> </span><span class="s2">"192.168.0.0/16"</span>
|
|
</code></pre></div>
|
|
<p>After applying these settings, reboot the host.</p>
|
|
<h2 id="changing-the-default-nat-subnet">Changing the default NAT subnet<a class="headerlink" href="#changing-the-default-nat-subnet" title="Permanent link">¶</a></h2>
|
|
<p>To change the default network to <code>192.168.77.1</code>:</p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a>sudo<span class="w"> </span>defaults<span class="w"> </span>write<span class="w"> </span>/Library/Preferences/SystemConfiguration/com.apple.vmnet.plist<span class="w"> </span>Shared_Net_Address<span class="w"> </span>-string<span class="w"> </span><span class="m">192</span>.168.77.1
|
|
</code></pre></div>
|
|
<p>Note that even through a network would normally be specified as <code>192.168.77.0</code>, the <a href="https://developer.apple.com/documentation/vmnet">vmnet framework</a> seems to treat this as a starting address too and refuses to pick up such network-like values.</p>
|
|
<p>The default subnet mask <code>255.255.255.0</code> should suffice for most use-cases, however, you can also change it to <code>255.255.0.0</code>, for example:</p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a>sudo<span class="w"> </span>defaults<span class="w"> </span>write<span class="w"> </span>/Library/Preferences/SystemConfiguration/com.apple.vmnet.plist<span class="w"> </span>Shared_Net_Mask<span class="w"> </span>-string<span class="w"> </span><span class="m">255</span>.255.0.0
|
|
</code></pre></div>
|
|
<h2 id="changing-the-default-dhcp-lease-time">Changing the default DHCP lease time<a class="headerlink" href="#changing-the-default-dhcp-lease-time" title="Permanent link">¶</a></h2>
|
|
<p>By default, the built-in macOS DHCP server allocates IP-addresses to the VMs for the duration of 86,400 seconds (one day), which may easily cause DHCP exhaustion if you run more than ~253 VMs per day, or in other words, more than one VM every ~6 minutes.</p>
|
|
<p>This issue is worked around automatically <a href="http://github.com/cirruslabs/softnet">when using Softnet</a>, however, if you don't use or can't use it, the following command will reduce the lease time from the default 86,400 seconds (one day) to 600 seconds (10 minutes):</p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a>sudo<span class="w"> </span>defaults<span class="w"> </span>write<span class="w"> </span>/Library/Preferences/SystemConfiguration/com.apple.InternetSharing.default.plist<span class="w"> </span>bootpd<span class="w"> </span>-dict<span class="w"> </span>DHCPLeaseTimeSecs<span class="w"> </span>-int<span class="w"> </span><span class="m">600</span>
|
|
</code></pre></div>
|
|
<p>This tweak persists across reboots, so normally you'll only need to do it once per new host.</p>
|
|
<p>If that doesn't help after starting a new VM, it's possible that the <code>/var/db/dhcpd_leases</code> file is already overfilled with 86,400-second leases. You can remove it with the following command and try starting a new VM again:</p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a>sudo<span class="w"> </span>rm<span class="w"> </span>/var/db/dhcpd_leases
|
|
</code></pre></div>
|
|
<p>And no worries, this file will be re-created on the next <code>tart run</code>.</p>
|
|
<h2 id="unsupported-dhcp-client-identifiers">Unsupported DHCP client identifiers<a class="headerlink" href="#unsupported-dhcp-client-identifiers" title="Permanent link">¶</a></h2>
|
|
<p>Due to the limitations of the macOS built-in DHCP server, <code>tart ip</code> is unable to correctly report the IP addresses for VMs using DHCP client identifiers that are not based on VMs link-layer addresses (MAC addresses).</p>
|
|
<p>By default, when <a href="#resolving-the-vms-ip-when-using-bridged-networking">no <code>--resolver=arp</code> is specified</a>, <code>tart ip</code> reads the <code>/var/db/dhcpd_leases</code> file and tries to find the freshest entry that matches the VM's MAC address (based on the <code>hw_address</code> field).</p>
|
|
<p>However, things starts to break when the VM uses a <a href="https://metebalci.com/blog/a-note-on-dhcpv6-duid-and-prefix-delegation#duid-types">DUID-EN</a> identifier, for example. One of the notorious examples of this being Ubuntu, using this type of identifier by default on latest versions. This results in the <code>/var/db/dhcpd_leases</code> entry for Ubuntu appearing as follows:</p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a><span class="na">{</span>
|
|
<a id="__codelineno-8-2" name="__codelineno-8-2" href="#__codelineno-8-2"></a><span class="w"> </span><span class="na">name</span><span class="o">=</span><span class="s">ubuntu</span>
|
|
<a id="__codelineno-8-3" name="__codelineno-8-3" href="#__codelineno-8-3"></a><span class="w"> </span><span class="na">ip_address</span><span class="o">=</span><span class="s">192.168.64.3</span>
|
|
<a id="__codelineno-8-4" name="__codelineno-8-4" href="#__codelineno-8-4"></a><span class="w"> </span><span class="na">hw_address</span><span class="o">=</span><span class="s">ff,f1:f5:dd:7f:0:2:0:0:ab:11:cb:fb:30:b0:97:b6:3a:67</span>
|
|
<a id="__codelineno-8-5" name="__codelineno-8-5" href="#__codelineno-8-5"></a><span class="w"> </span><span class="na">identifier</span><span class="o">=</span><span class="s">ff,f1:f5:dd:7f:0:2:0:0:ab:11:cb:fb:30:b0:97:b6:3a:67</span>
|
|
<a id="__codelineno-8-6" name="__codelineno-8-6" href="#__codelineno-8-6"></a><span class="w"> </span><span class="na">lease</span><span class="o">=</span><span class="s">0x678e2ce7</span>
|
|
<a id="__codelineno-8-7" name="__codelineno-8-7" href="#__codelineno-8-7"></a><span class="na">}</span>
|
|
</code></pre></div>
|
|
<p>Because the macOS built-in DHCP server overwrites the <code>hw_address</code> with the <code>identifier</code>, it leaves no information about the VM's MAC address to the <code>tart ip</code>.</p>
|
|
<p>To avoid this issue, make sure that your VM only sends a DHCP client identifier (option 61) with link-layer address (MAC address) or that it doesn't send this option at all.</p>
|
|
<p>For the aforementioned Ubuntu, the solution is outlined in the section <a href="https://netplan.readthedocs.io/en/stable/examples/#how-to-integrate-with-windows-dhcp-server">How to integrate with Windows DHCP Server</a> of Canonical Netplan's documentation:</p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a><span class="nt">network</span><span class="p">:</span>
|
|
<a id="__codelineno-9-2" name="__codelineno-9-2" href="#__codelineno-9-2"></a><span class="w"> </span><span class="nt">version</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">2</span>
|
|
<a id="__codelineno-9-3" name="__codelineno-9-3" href="#__codelineno-9-3"></a><span class="w"> </span><span class="nt">ethernets</span><span class="p">:</span>
|
|
<a id="__codelineno-9-4" name="__codelineno-9-4" href="#__codelineno-9-4"></a><span class="w"> </span><span class="nt">enp3s0</span><span class="p">:</span>
|
|
<a id="__codelineno-9-5" name="__codelineno-9-5" href="#__codelineno-9-5"></a><span class="w"> </span><span class="nt">dhcp4</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">yes</span>
|
|
<a id="__codelineno-9-6" name="__codelineno-9-6" href="#__codelineno-9-6"></a><span class="w"> </span><span class="nt">dhcp-identifier</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">mac</span>
|
|
</code></pre></div>
|
|
<h2 id="resolving-the-vms-ip-when-using-bridged-networking">Resolving the VM's IP when using bridged networking<a class="headerlink" href="#resolving-the-vms-ip-when-using-bridged-networking" title="Permanent link">¶</a></h2>
|
|
<p>When running <code>tart run</code> with <code>--net-bridged</code>, you need to invoke <code>tart ip</code> differently, because the macOS built-in DHCP server won't have any information about the VM's IP-address:</p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-10-1" name="__codelineno-10-1" href="#__codelineno-10-1"></a>tart<span class="w"> </span>ip<span class="w"> </span>--resolver<span class="o">=</span>arp<span class="w"> </span><VM>
|
|
</code></pre></div>
|
|
<p>This causes the <code>tart ip</code> to consult the host's ARP table instead of the <code>/var/db/dhcpd_leases</code> file.</p>
|
|
<p>Note that this method of resolving the IP heavily relies on the level of VM's activity on the network, namely, exchanging ARP requests between the guest and the host.</p>
|
|
<p>This is normally not an issue for macOS VMs, but on Linux VMs you might need to install Samba, which includes a <a href="https://www.samba.org/samba/docs/current/man-html/nmbd.8.html">NetBIOS name server</a> and exhibits the same behavior as macOS, resulting in the population of the ARP table of the host OS:</p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a>sudo<span class="w"> </span>apt-get<span class="w"> </span>install<span class="w"> </span>samba
|
|
</code></pre></div>
|
|
<h2 id="running-loginclonepullpush-commands-over-ssh">Running login/clone/pull/push commands over SSH<a class="headerlink" href="#running-loginclonepullpush-commands-over-ssh" title="Permanent link">¶</a></h2>
|
|
<p>When invoking the Tart in an SSH session, you might get error like this:</p>
|
|
<blockquote>
|
|
<p>Keychain returned unsuccessful status -25308</p>
|
|
</blockquote>
|
|
<p>...or this:</p>
|
|
<blockquote>
|
|
<p>Keychain failed to update item: User interaction is not allowed.</p>
|
|
</blockquote>
|
|
<p>This is because Tart uses <a href="https://en.wikipedia.org/wiki/Keychain_(software)">Keychain</a> to store and retrieve OCI registry credentials by default, but Keychain is only automatically/semi-automatically unlocked in GUI sessions.</p>
|
|
<p>To unlock the Keychain in an SSH session, run the following command, which will ask for your user's password:</p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-12-1" name="__codelineno-12-1" href="#__codelineno-12-1"></a>security<span class="w"> </span>unlock-keychain<span class="w"> </span>login.keychain
|
|
</code></pre></div>
|
|
<p>This command also supports the <code>-p</code> command-line argument that allows you to supply a password and unlock non-interactively, which is great for scripts.</p>
|
|
<p>Alternatively, you can pass the credentials via the environment variables, see <a href="../quick-start/#registry-authorization">Registry Authorization</a> for more details on how to do that.</p>
|
|
<h2 id="how-is-tart-different-from-anka">How is Tart different from Anka?<a class="headerlink" href="#how-is-tart-different-from-anka" title="Permanent link">¶</a></h2>
|
|
<p>Under the hood Tart is using the same technology as Anka 3.0 so there should be no real difference in performance
|
|
or features supported. If there is some feature missing please don't hesitate to <a href="https://github.com/cirruslabs/tart/issues">create a feature request</a>.</p>
|
|
<p>Instead of Anka Registry, Tart can work with any OCI-compatible container registry. This provides a much more consistent
|
|
and scalable experience for distributing virtual machines.</p>
|
|
<p>Tart does have an analogue of Anka Controller for managing VMs across a cluster of Mac hosts called <a href="../orchard/quick-start/">Orchard</a>.</p>
|
|
<h2 id="automatic-pruning">Automatic pruning<a class="headerlink" href="#automatic-pruning" title="Permanent link">¶</a></h2>
|
|
<p><code>tart pull</code> and <code>tart clone</code> commands check the remaining space available on the volume associated with <code>TART_HOME</code> directory (defaults to <code>~/.tart</code>) before pulling or cloning anything.</p>
|
|
<p>In case there's not enough space to fit the newly pulled or cloned VM image, Tart will remove the least recently accessed VMs from OCI cache and <code>.ipsw</code> files from IPSW cache until enough free space is available.</p>
|
|
<p>The <code>tart clone</code> command limits this automatic pruning to 100 GB by default to avoid removing too many cached items. You can change this limit with the <code>--prune-limit</code> option (in gigabytes).</p>
|
|
<p>To disable this functionality, set the <code>TART_NO_AUTO_PRUNE</code> environment variable either globally:</p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-13-1" name="__codelineno-13-1" href="#__codelineno-13-1"></a><span class="nb">export</span><span class="w"> </span><span class="nv">TART_NO_AUTO_PRUNE</span><span class="o">=</span>
|
|
</code></pre></div>
|
|
<p>...or per <code>tart pull</code> and <code>tart clone</code> invocation as follows:</p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-14-1" name="__codelineno-14-1" href="#__codelineno-14-1"></a><span class="nv">TART_NO_AUTO_PRUNE</span><span class="o">=</span><span class="w"> </span>tart<span class="w"> </span>pull<span class="w"> </span>...
|
|
</code></pre></div>
|
|
<h2 id="disk-resizing">Disk resizing<a class="headerlink" href="#disk-resizing" title="Permanent link">¶</a></h2>
|
|
<p>Disk resizing works on most cloud-ready Linux distributions out-of-the box (e.g. Ubuntu Cloud Images have the <code>cloud-initramfs-growroot</code> package installed that runs on boot) and on the rest of the distributions by running the <code>growpart</code> or <code>resize2fs</code> commands.</p>
|
|
<p>For macOS, however, things are a bit more complicated, and you generally have two options: automated and manual resizing.</p>
|
|
<p>For the automated option, you can use <a href="https://www.packer.io/">Packer</a> with the <a href="https://developer.hashicorp.com/packer/integrations/cirruslabs/tart/latest/components/builder/tart">Packer builder for Tart VMs</a>. The latter has two has configuration directives related to the disk resizing behavior:</p>
|
|
<ul>
|
|
<li><a href="https://developer.hashicorp.com/packer/integrations/cirruslabs/tart/latest/components/builder/tart#configuration-reference"><code>disk_size_gb</code></a> — controls the target disk size in gigabytes</li>
|
|
<li><a href="https://developer.hashicorp.com/packer/integrations/cirruslabs/tart/latest/components/builder/tart#configuration-reference"><code>recovery_partition</code></a> — controls what to do with the recovery partition when resizing the disk<ul>
|
|
<li>you can either keep, delete or relocate it to the end of the disk</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<p>For the manual approach, you have to remove the recovery partition first, repair the disk and the resize the APFS container.</p>
|
|
<p>To do this, first we'll need to identify the primary disk and the APFS containers by running the command below from within a VM:</p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-15-1" name="__codelineno-15-1" href="#__codelineno-15-1"></a>diskutil<span class="w"> </span>list<span class="w"> </span>physical
|
|
</code></pre></div>
|
|
<p>For example, the output might look like this:</p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-16-1" name="__codelineno-16-1" href="#__codelineno-16-1"></a>/dev/disk0 (internal, physical):
|
|
<a id="__codelineno-16-2" name="__codelineno-16-2" href="#__codelineno-16-2"></a> #: TYPE NAME SIZE IDENTIFIER
|
|
<a id="__codelineno-16-3" name="__codelineno-16-3" href="#__codelineno-16-3"></a> 0: GUID_partition_scheme *100.0 GB disk0
|
|
<a id="__codelineno-16-4" name="__codelineno-16-4" href="#__codelineno-16-4"></a> 1: Apple_APFS_ISC Container disk1 524.3 MB disk0s1
|
|
<a id="__codelineno-16-5" name="__codelineno-16-5" href="#__codelineno-16-5"></a> 2: Apple_APFS Container disk3 44.1 GB disk0s2
|
|
<a id="__codelineno-16-6" name="__codelineno-16-6" href="#__codelineno-16-6"></a> 3: Apple_APFS_Recovery Container disk2 5.4 GB disk0s3
|
|
<a id="__codelineno-16-7" name="__codelineno-16-7" href="#__codelineno-16-7"></a> (free space) 50.0 GB -
|
|
</code></pre></div>
|
|
<p>In the output, you'll normally see:</p>
|
|
<ul>
|
|
<li>a single physical disk (<code>disk0</code>)</li>
|
|
<li>APFS container with the system partition which we're going to resize (<code>disk0s2</code>)</li>
|
|
<li>APFS container with the recovery partition which we're going to delete (<code>disk0s3</code>)</li>
|
|
<li><code>(free space)</code> which we'll put to use</li>
|
|
</ul>
|
|
<p>To proceed, boot the VM in recovery mode using <code>tart run --recovery</code> and choose the "Options" item:</p>
|
|
<p><img alt="" class="center" src="../assets/images/faq/tart-run-recovery-options.png" width="640" /></p>
|
|
<p>When the recovery OS boots, open the Terminal app:</p>
|
|
<p><img alt="" class="center" src="../assets/images/faq/tart-run-recovery-terminal.png" width="720" /></p>
|
|
<p>In Terminal app, invoke the command below to remove the recovery partition:</p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-17-1" name="__codelineno-17-1" href="#__codelineno-17-1"></a>diskutil<span class="w"> </span>eraseVolume<span class="w"> </span>free<span class="w"> </span>free<span class="w"> </span>disk0s3
|
|
</code></pre></div>
|
|
<p>Now, repair the disk:</p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-18-1" name="__codelineno-18-1" href="#__codelineno-18-1"></a>yes<span class="w"> </span><span class="p">|</span><span class="w"> </span>diskutil<span class="w"> </span>repairDisk<span class="w"> </span>disk0
|
|
</code></pre></div>
|
|
<p>Finally, resize the system APFS container to take all the remaining space:</p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-19-1" name="__codelineno-19-1" href="#__codelineno-19-1"></a>diskutil<span class="w"> </span>apfs<span class="w"> </span>resizeContainer<span class="w"> </span>disk0s2<span class="w"> </span><span class="m">0</span>
|
|
</code></pre></div>
|
|
<p>Now, you can shut down and <code>tart run</code> as you'd normally do.</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</article>
|
|
</div>
|
|
|
|
|
|
<script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
|
|
|
|
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
|
|
</div>
|
|
|
|
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
|
|
Back to top
|
|
</button>
|
|
|
|
</main>
|
|
|
|
<footer class="md-footer">
|
|
|
|
<div class="md-footer-meta md-typeset">
|
|
<div class="md-footer-meta__inner md-grid">
|
|
<div class="md-copyright">
|
|
|
|
<div class="md-copyright__highlight">
|
|
© Cirrus Labs 2017-present
|
|
</div>
|
|
|
|
|
|
Made with
|
|
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
|
|
Material for MkDocs
|
|
</a>
|
|
|
|
</div>
|
|
|
|
|
|
<div class="md-social">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<a href="https://twitter.com/cirrus_labs" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M459.4 151.7c.3 4.5.3 9.1.3 13.6 0 138.7-105.6 298.6-298.6 298.6-59.5 0-114.7-17.2-161.1-47.1 8.4 1 16.6 1.3 25.3 1.3 49.1 0 94.2-16.6 130.3-44.8-46.1-1-84.8-31.2-98.1-72.8 6.5 1 13 1.6 19.8 1.6 9.4 0 18.8-1.3 27.6-3.6-48.1-9.7-84.1-52-84.1-103v-1.3c14 7.8 30.2 12.7 47.4 13.3-28.3-18.8-46.8-51-46.8-87.4 0-19.5 5.2-37.4 14.3-53C87.4 130.8 165 172.4 252.1 176.9c-1.6-7.8-2.6-15.9-2.6-24C249.5 95.1 296.3 48 354.4 48c30.2 0 57.5 12.7 76.7 33.1 23.7-4.5 46.5-13.3 66.6-25.3-7.8 24.4-24.4 44.8-46.1 57.8 21.1-2.3 41.6-8.1 60.4-16.2-14.3 20.8-32.2 39.3-52.6 54.3"/></svg>
|
|
</a>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</footer>
|
|
|
|
</div>
|
|
<div class="md-dialog" data-md-component="dialog">
|
|
<div class="md-dialog__inner md-typeset"></div>
|
|
</div>
|
|
|
|
|
|
<div class="md-consent" data-md-component="consent" id="__consent" hidden>
|
|
<div class="md-consent__overlay"></div>
|
|
<aside class="md-consent__inner">
|
|
<form class="md-consent__form md-grid md-typeset" name="consent">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<h4>Cookie consent</h4>
|
|
<p>We use cookies to recognize your repeated visits and preferences, as well as to measure the effectiveness of our documentation and whether users find what they're searching for. With your consent, you're helping us to make our documentation better.</p>
|
|
<input class="md-toggle" type="checkbox" id="__settings" >
|
|
<div class="md-consent__settings">
|
|
<ul class="task-list">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="task-list-item">
|
|
<label class="task-list-control">
|
|
<input type="checkbox" name="analytics" checked>
|
|
<span class="task-list-indicator"></span>
|
|
Google Analytics
|
|
</label>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="task-list-item">
|
|
<label class="task-list-control">
|
|
<input type="checkbox" name="github" checked>
|
|
<span class="task-list-indicator"></span>
|
|
GitHub
|
|
</label>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</div>
|
|
<div class="md-consent__controls">
|
|
|
|
|
|
<button class="md-button md-button--primary">Accept</button>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<label class="md-button" for="__settings">Manage settings</label>
|
|
|
|
|
|
</div>
|
|
</form>
|
|
</aside>
|
|
</div>
|
|
<script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout((function(){document.querySelector("[data-md-component=consent]").hidden=!1}),250);var form=document.forms.consent;for(var action of["submit","reset"])form.addEventListener(action,(function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map((function(e){return[e,!0]})))),location.hash="",location.reload()}))</script>
|
|
|
|
|
|
|
|
|
|
<script id="__config" type="application/json">{"annotate": null, "base": "..", "features": ["announce.dismiss", "content.tabs.link", "content.code.copy", "navigation.tabs", "navigation.tabs.sticky", "navigation.top", "search.suggest", "toc.follow"], "search": "../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
|
|
|
|
|
|
<script src="../assets/javascripts/bundle.79ae519e.min.js"></script>
|
|
|
|
|
|
</body>
|
|
</html> |