CINXE.COM

Install OpenStack yourself on Ubuntu. | Ubuntu

<!DOCTYPE html> <html prefix="og: http://ogp.me/ns#" class=" " lang="en" dir="ltr"> <head> <meta charset="UTF-8" /> <meta name="keywords" content="index, follow" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <title> Install OpenStack yourself on Ubuntu. | Ubuntu</title> <link rel="preconnect" href="https://res.cloudinary.com" /> <!-- Cookie policy --> <script src="/static/js/dist/cookie-policy.js?v=e389ac9"></script> <script type="module" src="/static/js/src/cookie-policy-with-callback.js?v=7656ec3"></script> <script src="https://assets.ubuntu.com/v1/703e23c9-lazysizes+noscript+native-loading.5.1.2.min.js" defer></script> <script src="/static/js/src/navigation.js?v=2e02fbc" defer></script> <script src="/static/js/dist/main.js?v=654438a" defer></script> <script src="/static/js/src/infer-preferred-language.js?v=b69e09e" defer></script> <link rel="stylesheet" type="text/css" media="screen" href="/static/css/styles.css?v=4eda326" /> <link rel="stylesheet" type="text/css" media="print" href="/static/css/print.css?v=96ecf37" /> <script> performance.mark("Stylesheets finished"); </script> <link rel="canonical" href="https://ubuntu.com/openstack/install" /> <link rel="apple-touch-icon" sizes="180x180" href="https://assets.ubuntu.com/v1/f38b9c7e-COF%20apple-touch-icon.png" /> <link rel="icon" type="image/png" sizes="32x32" href="https://assets.ubuntu.com/v1/be7e4cc6-COF-favicon-32x32.png" /> <link rel="icon" type="image/png" sizes="16x16" href="https://assets.ubuntu.com/v1/16c27f81-COF%20favicon-16x16.png" /> <link rel="manifest" href="/static/files/site.webmanifest?v=fbabd71" /> <!-- Serving favicon for search engines locally --> <link rel="icon" type="image/png" sizes="48x48" href="/static/favicons/COF-favicon-48x48.png?v=fa3c63f" /> <link rel="preload" as="font" type="font/woff2" href="https://assets.ubuntu.com/v1/f1ea362b-Ubuntu%5Bwdth,wght%5D-latin-v0.896a.woff2" crossorigin /> <link rel="preload" as="font" type="font/woff2" href="https://assets.ubuntu.com/v1/90b59210-Ubuntu-Italic%5Bwdth,wght%5D-latin-v0.896a.woff2" crossorigin /> <link rel="preload" as="font" type="font/woff2" href="https://assets.ubuntu.com/v1/d5fc1819-UbuntuMono%5Bwght%5D-latin-v0.869.woff2" crossorigin /> <link rel="preconnect" as="font" type="font/woff2" href="https://assets.ubuntu.com/v1/77cd6650-Ubuntu%5Bwdth,wght%5D-cyrillic-extended-v0.896a.woff2" crossorigin /> <link rel="preconnect" as="font" type="font/woff2" href="https://assets.ubuntu.com/v1/2702fce5-Ubuntu%5Bwdth,wght%5D-cyrillic-v0.896a.woff2" crossorigin /> <link rel="preconnect" as="font" type="font/woff2" href="https://assets.ubuntu.com/v1/5c108b7d-Ubuntu%5Bwdth,wght%5D-greek-extended-v0.896a.woff2" crossorigin /> <link rel="preconnect" as="font" type="font/woff2" href="https://assets.ubuntu.com/v1/0a14c405-Ubuntu%5Bwdth,wght%5D-greek-v0.896a.woff2" crossorigin /> <link rel="preconnect" as="font" type="font/woff2" href="https://assets.ubuntu.com/v1/19f68eeb-Ubuntu%5Bwdth,wght%5D-latin-extended-v0.896a.woff2" crossorigin /> <meta name="description" content=" A step-by-step guide to OpenStack installation. You only need your workstation to get started. " /> <meta name="facebook-domain-verification" content="zxp9j79g1gy2xenbu9ll964pttk5hu" /> <meta name="twitter:account_id" content="4503599627481511" /> <meta name="twitter:site" content="@ubuntu" /> <meta property="og:type" content="website" /> <meta property="og:url" content="https://ubuntu.com/openstack/install" /> <meta property="og:site_name" content="Ubuntu" /> <meta name="copydoc" content=" https://docs.google.com/document/d/1eQ16jzv6YRGzG_k_C-tUnhM06k6_Ic6fZM-x_ARMzuc/edit " /> <meta name="google-site-verification" content="ddh2iq7ZuKf1LpkL_gtM_T7DkKDVD7ibq6Ceue4a_3M" /> <meta name="twitter:title" content="Install OpenStack yourself on Ubuntu. | Ubuntu" /> <meta property="og:title" content="Install OpenStack yourself on Ubuntu. | Ubuntu" /> <meta name="twitter:description" content=" A step-by-step guide to OpenStack installation. You only need your workstation to get started. " /> <meta property="og:description" content=" A step-by-step guide to OpenStack installation. You only need your workstation to get started. " /> <!-- Meta image: --> <!-- Google Analytics and Google Optimize --> <script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-1018242-59', 'auto', {'allowLinker': true}); ga('require', 'GTM-N2MDH37'); ga('require', 'linker'); ga('linker:autoLink', ['conjure-up.io', 'login.ubuntu.com', 'www.ubuntu.com', 'ubuntu.com', 'insights.ubuntu.com', 'developer.ubuntu.com', 'cn.ubuntu.com', 'design.ubuntu.com', 'maas.io', 'canonical.com', 'landscape.canonical.com', 'pages.ubuntu.com', '/tutorials', 'docs.ubuntu.com']); </script> <!-- End Google Analytics and Google Optimize --> <script> const userIDCookie = document.cookie.match(new RegExp("(^| )" + "user_id" + "=([^;]+)")); if (userIDCookie !== null) { let idValue = userIDCookie[2]; if (idValue) { dataLayer.push({ user_id: idValue, }); } } </script> <!-- Google Tag Manager --> <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-K92JCQ');</script> <!-- End Google Tag Manager --> <style>#rememberMe {display: none;}</style> </head> <body class=" "> <!-- google tag manager --> <noscript> <iframe src="https://www.googletagmanager.com/ns.html?id=GTM-K92JCQ" height="0" width="0" style="display: none; visibility: hidden" title="Google Tag Manager"></iframe> </noscript> <!-- end google tag manager --> <noscript> <style> body { transform: translateY(0) !important; } </style> </noscript> <!-- begin usabilla live embed code --> <script type="text/javascript">window.lightningjs||function(n){var e="lightningjs";function t(e,t){var r,i,a,o,d,c;return t&&(t+=(/\?/.test(t)?"&":"?")+"lv=1"),n[e]||(r=window,i=document,a=e,o=i.location.protocol,d="load",c=0,function(){n[a]=function(){var t=arguments,i=this,o=++c,d=i&&i!=r&&i.id||0;function s(){return s.id=o,n[a].apply(s,arguments)}return(e.s=e.s||[]).push([o,d,t]),s.then=function(n,t,r){var i=e.fh[o]=e.fh[o]||[],a=e.eh[o]=e.eh[o]||[],d=e.ph[o]=e.ph[o]||[];return n&&i.push(n),t&&a.push(t),r&&d.push(r),s},s};var e=n[a]._={};function s(){e.P(d),e.w=1,na}e.fh={},e.eh={},e.ph={},e.l=t?t.replace(/^\/\//,("https:"==o?o:"http:")+"//"):t,e.p={0:+new Date},e.P=function(n){e.p[n]=new Date-e.p[0]},e.w&&s(),r.addEventListener?r.addEventListener(d,s,!1):r.attachEvent("onload",s);var l=function(){function n(){return["<!DOCTYPE ",o,"><",o,"><head></head><",t,"><",r,' src="',e.l,'"></',r,"></",t,"></",o,">"].join("")}var t="body",r="script",o="html",d=i[t];if(!d)return setTimeout(l,100);e.P(1);var c,s=i.createElement("div"),h=s.appendChild(i.createElement("div")),u=i.createElement("iframe");s.style.display="none",d.insertBefore(s,d.firstChild).id="lightningjs-"+a,u.frameBorder="0",u.id="lightningjs-frame-"+a,/MSIE[ ]+6/.test(navigator.userAgent)&&(u.src="javascript:false"),u.allowTransparency="true",h.appendChild(u);try{u.contentWindow.document.open()}catch(n){e.domain=i.domain,c="javascript:var d=document.open();d.domain='"+i.domain+"';",u.src=c+"void(0);"}try{var p=u.contentWindow.document;p.write(n()),p.close()}catch(e){u.src=c+'d.write("'+n().replace(/"/g,String.fromCharCode(92)+'"')+'");d.close();'}e.P(2)};e.l&&l()}()),n[e].lv="1",n[e]}var r=window.lightningjs=t(e);r.require=t,r.modules=n}({});window.usabilla_live = lightningjs.require("usabilla_live", "//w.usabilla.com/ecdf1756070a.js");</script> <!-- end usabilla live embed code --> <div id="success" class="p-popup-notification"> <div class="p-notification--positive u-no-margin--bottom"> <div class="p-notification__content"> <p class="p-notification__message"> Your submission was sent successfully! <a href="#" onclick="location.href = document.referrer; return false;"><i class="p-notification__close">Close</i></a> </p> </div> </div> </div> <div id="contact-form-success" class="p-popup-notification"> <div class="p-notification--positive u-no-margin--bottom"> <div class="p-notification__content"> <p class="p-notification__message"> Thank you for contacting us. A member of our team will be in touch shortly. <a href="#" onclick="location.href = document.referrer; return false;"><i class="p-notification__close">Close</i></a> </p> </div> </div> </div> <div id="unsubscribed" class="p-popup-notification"> <div class="p-notification--positive u-no-margin--bottom"> <div class="p-notification__content"> <p class="p-notification__message"> You have successfully unsubscribed! <a href="#" onclick="location.href = ''; return false;"><i class="p-notification__close">Close</i></a> </p> </div> </div> </div> <div id="newsletter-signup" class="p-popup-notification"> <div class="p-notification--positive u-no-margin--bottom"> <div class="p-notification__content"> <p class="p-notification__message"> Thank you for signing up for our newsletter! <br /> In these regular emails you will find the latest updates about Ubuntu and upcoming events where you can meet our team.<a href="#" onclick="(e) => e.preventDefault()"><i class="p-notification__close">Close</i></a> </p> </div> </div> </div> <div id="updated" class="p-popup-notification"> <div class="p-notification--positive u-no-margin--bottom"> <div class="p-notification__content"> <p class="p-notification__message"> Your preferences have been successfully updated. <a href="#" alt="Close notification" onclick="location.href = document.referrer; return false;"><i class="p-notification__close">Close</i></a> </p> </div> </div> </div> <header id="navigation" class="p-navigation--sliding is-dark is-reduced "> <div class="p-navigation__row--25-75"> <div class="p-navigation__banner"> <div class="p-navigation__tagged-logo"> <a class="p-navigation__link" href="/"> Canonical Ubuntu </a> </div> <ul class="p-navigation__items"> <li class="p-navigation__item"> <a href="/search" class="js-search-button p-navigation__link--search-toggle" aria-label="Search"></a> </li> <li class="p-navigation__item"> <a href="/navigation" class="js-menu-button p-navigation__link">Menu</a> </li> </ul> </div> <nav class="p-navigation__nav js-show-nav" aria-label="Categories"> <ul class="p-navigation__items" role="menu"> <li class="p-navigation__item--dropdown-toggle" role="menuitem" id="products" onmouseenter="fetchDropdown('/templates/meganav/products', 'products', event); this.onmouseenter = null;"> <a class="p-navigation__link" href="/navigation#products-navigation" aria-controls="products-content" tabindex="0" onfocus="fetchDropdown('/templates/meganav/products', 'products');">Products</a> </li> <li class="p-navigation__item--dropdown-toggle" role="menuitem" id="use-case" onmouseenter="fetchDropdown('/templates/meganav/use-case', 'use-case', event); this.onmouseenter = null;"> <a class="p-navigation__link" href="/navigation#use-case-navigation" aria-controls="use-case-content" tabindex="0" onfocus="fetchDropdown('/templates/meganav/use-case', 'use-case');">Use cases</a> </li> <li class="p-navigation__item--dropdown-toggle" role="menuitem" id="support" onmouseenter="fetchDropdown('/templates/meganav/support', 'support', event); this.onmouseenter = null;"> <a class="p-navigation__link" href="/navigation#support-navigation" aria-controls="support-content" tabindex="0" onfocus="fetchDropdown('/templates/meganav/support', 'support');">Support</a> </li> <li class="p-navigation__item--dropdown-toggle" role="menuitem" id="community" onmouseenter="fetchDropdown('/templates/meganav/community', 'community', event); this.onmouseenter = null;"> <a class="p-navigation__link" href="/navigation#community-navigation" aria-controls="community-content" tabindex="0" onfocus="fetchDropdown('/templates/meganav/community', 'community');">Community</a> </li> <li class="p-navigation__item--dropdown-toggle" role="menuitem" id="download-ubuntu" onmouseenter="fetchDropdown('/templates/meganav/download-ubuntu', 'download-ubuntu', event); this.onmouseenter = null;"> <a class="p-navigation__link" href="/navigation#download-ubuntu-navigation" aria-controls="#download-ubuntu-content" tabindex="0" onfocus="fetchDropdown('/templates/meganav/download-ubuntu', 'download-ubuntu');">Download Ubuntu</a> </li> <li class="p-navigation__item--dropdown-toggle global-nav-mobile global-nav" role="menuitem" id="all-canonical"></li> <li class="p-navigation__item--dropdown-toggle js-account" role="menuitem" id="canonical-login"></li> <li class="p-navigation__item"> <a href="/search" class="js-search-button p-navigation__link--search-toggle"></a> </li> </ul> <div class="p-navigation__search"> <form action="/search" class="p-search-box is-light js-search-form"> <!-- honeypot search input --> <input type="search" id="search" class="p-search-box__input u-hide " name="search" placeholder="Search our sites" aria-label="Search our sites" value=""/> <!-- end of honeypot search input --> <input type="search" class="p-search-box__input" name="q" placeholder="Search our sites" required="" aria-label="Search our sites" /> <button type="reset" class="p-search-box__reset"> <i class="p-icon--close"></i> </button> <button type="submit" class="p-search-box__button"> <i class="p-icon--search"></i> </button> </form> </div> </nav> </div> <div class="p-navigation__search-overlay"></div> <div id="control-height"></div> </header> <div class="dropdown-window-overlay fade-animation"></div> <div class="dropdown-window is-dark slide-animation is-reduced "> <div class="u-hide dropdown-content-desktop" id="products-content"></div> <div class="u-hide dropdown-content-desktop" id="use-case-content"></div> <div class="u-hide dropdown-content-desktop" id="support-content"></div> <div class="u-hide dropdown-content-desktop" id="community-content"></div> <div class="u-hide dropdown-content-desktop" id="download-ubuntu-content"></div> <div class="u-hide dropdown-content-desktop global-nav-desktop" id="all-canonical-content"></div> </div> <div id="secondary-navigation" class="p-navigation is-secondary is-dark"> <div class="p-navigation__row--25-75"> <div class="p-navigation__banner"> <div class="p-navigation__tagged-logo"> <a class="p-navigation__link" href="/openstack"> <div class="p-navigation__logo-tag"> <img class="p-navigation__logo-icon" src="https://assets.ubuntu.com/v1/82818827-CoF_white.svg" alt="" /> </div> <span class="p-navigation__logo-title">Canonical&nbsp;OpenStack</span> </a> </div> <a href="#" class="p-navigation__toggle--open" title="Toggle navigation"><i class="p-icon--chevron-down is-light"></i></a> </div> <nav class="p-navigation__nav" aria-label="Canonical&nbsp;OpenStack navigation"> <ul class="p-navigation__items"> <li class="p-navigation__item "> <a class="p-navigation__link" href="/openstack/what-is-openstack" >What is OpenStack</a> </li> <li class="p-navigation__item "> <a class="p-navigation__link" href="/openstack/features" >Features</a> </li> <li class="p-navigation__item "> <a class="p-navigation__link" href="/openstack/managed" >Managed</a> </li> <li class="p-navigation__item "> <a class="p-navigation__link" href="/openstack/consulting" >Consulting</a> </li> <li class="p-navigation__item is-selected"> <a class="p-navigation__link" href="/openstack/install" aria-current="page">Install</a> </li> <li class="p-navigation__item "> <a class="p-navigation__link" href="/openstack/support" >Support</a> </li> </ul> </nav> </div> </div> <div class="wrapper u-no-margin--top"> <main id="main-content" class="inner-wrapper"> <section class="p-strip--suru-bottomed is-bordered"> <div class="row u-equal-height u-vertically-center spaced-bottom"> <div class="col-7"> <h1>Install OpenStack yourself</h1> <p> Try OpenStack in five simple steps. Set up a small-scale cloud or deploy a large cluster across hundreds of physical machines. Use <a href="https://microstack.run/">MicroStack</a> or <a href="/openstack">Charmed OpenStack</a> depending on your use case. </p> <p> If you need OpenStack consulting or a fully managed service, <a href="/openstack/contact-us">talk to an expert.</a> </p> <p> <a href="#single-multi-large-cluster" class="p-button--positive">Install OpenStack</a> </p> <p> <a href="/engage/openstack-ebook-beginners">Download guide to OpenStack for Beginners&nbsp;&rsaquo;</a> </p> </div> <div class="col-5 u-hide--medium u-hide--small u-align--center"> <img src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,w_290,h_200/https://assets.ubuntu.com/v1/2b03a6b4-Install+Openstack.svg" srcset="https://res.cloudinary.com/canonical/image/fetch/c_limit,f_auto,q_auto,fl_sanitize,w_580,h_400/https://assets.ubuntu.com/v1/2b03a6b4-Install+Openstack.svg 2x" alt="" width="290" height="200" loading="auto" /> </div> </div> </section> <section id="single-multi-large-cluster" class="p-strip u-no-padding--bottom"> <div class="u-fixed-width"> <h2>Single-node, multi-node or large-scale cluster?</h2> <p> <strong>Choose the option that suits you best:</strong> </p> <div class="p-tabs"> <div class="p-tabs__list js-tabbed-content" role="tablist" aria-label="openstack-deployment"> <div class="p-tabs__item"> <button style="background-color: transparent" class="p-tabs__link" role="tab" aria-selected="true" aria-controls="single-node-mode" id="single-node-mode-tab">Single&dash;node mode</button> </div> <div class="p-tabs__item"> <button style="background-color: transparent" class="p-tabs__link" role="tab" aria-selected="false" aria-controls="multi-node-mode" id="multi-node-mode-tab" tabindex="-1">Multi&dash;node mode</button> </div> <div class="p-tabs__item"> <button style="background-color: transparent" class="p-tabs__link" role="tab" aria-selected="false" aria-controls="multi-node-mode-with-bare-metal-automation" id="multi-node-mode-with-bare-metal-automation-tab" tabindex="-1">Multi&dash;node mode with bare metal automation</button> </div> </div> </div> </div> </section> <section tabindex="0" role="tabpanel" id="single-node-mode" aria-labelledby="single-node-mode-tab"> <div class="p-strip is-shallow u-no-padding--top"> <div class="row"> <h2>Single-node mode</h2> <div class="col-6"> <ul class="p-list"> <li class="p-list__item is-ticked">Uses MicroStack</li> <li class="p-list__item is-ticked">Works on machines with limited hardware resources</li> <li class="p-list__item is-ticked">Suitable for testing and development</li> </ul> </div> </div> </div> <div class="p-strip u-no-padding--top"> <div class="row"><p>This tutorial shows how to install OpenStack (based on project Sunbeam) in the simplest way possible. It will deploy an <strong>OpenStack 2024.1</strong> (Caracal) cloud.</p> <p>The cloud will only allow access to its VMs from the local host. To enable access from any host on your network, follow the <a href="https://discourse.ubuntu.com/t/35765">Single-node guided</a> tutorial instead.</p> <h2><a class="p-link--anchor-heading" href="#p-88705-requirements" name="p-88705-requirements">Requirements</a></h2> <p>You will need a single machine whose requirements are:</p> <ul> <li>physical or virtual machine running Ubuntu 24.04 LTS</li> <li>a multi-core amd64 processor ideally with 4+ cores</li> <li>a minimum of 16 GiB of free memory</li> <li>100 GiB of SSD storage available on the root disk</li> </ul> <div class="p-notification--caution"> <div class="p-notification__response"> <p><strong>Caution:</strong> Any change in IP address of the local host will be detrimental to the deployment. A virtual host will generally have a more stable address.</p> </div> </div> <h2><a class="p-link--anchor-heading" href="#p-88705-deploy-the-cloud" name="p-88705-deploy-the-cloud">Deploy the cloud</a></h2> <h3><a class="p-link--anchor-heading" href="#p-88705-install-the-openstack-snap" name="p-88705-install-the-openstack-snap">Install the openstack snap</a></h3> <div class="p-notification"> <div class="p-notification__response"> <p><strong>Duration</strong>: 5 minutes<br/> Depending on internet connection speed to required resources may be shorter or longer.</p> </div> </div> <p>Begin by installing the openstack snap:</p> <pre><code>sudo snap install openstack --channel 2024.1/candidate </code></pre> <div class="p-notification--caution"> <div class="p-notification__response"> <p><strong>Caution:</strong> It is highly recommended to use the <code>--channel 2024.1/candidate</code> switch which includes all the latest bug fixes and updates before the next stable release coming in Q1 2025.</p> </div> </div> <h3><a class="p-link--anchor-heading" href="#p-88705-prepare-the-machine" name="p-88705-prepare-the-machine">Prepare the machine</a></h3> <div class="p-notification"> <div class="p-notification__response"> <p><strong>Duration</strong>: 5 minutes</p> </div> </div> <p>Sunbeam can generate a script to ensure that the machine has all of the required dependencies installed and is configured correctly for use in OpenStack - you can review this script using:</p> <pre><code>sunbeam prepare-node-script --bootstrap </code></pre> <p>or the script can be directly executed in this way:</p> <pre><code>sunbeam prepare-node-script --bootstrap | bash -x &amp;&amp; newgrp snap_daemon </code></pre> <p>The script will ensure some software requirements are satisfied on the host. In particular, it will:</p> <ul> <li>install <code>openssh-server</code> if it is not found</li> <li>configure passwordless sudo for all commands for the current user (<code>NOPASSWD:ALL</code>)</li> </ul> <h3><a class="p-link--anchor-heading" href="#p-88705-bootstrap-the-cloud" name="p-88705-bootstrap-the-cloud">Bootstrap the cloud</a></h3> <div class="p-notification"> <div class="p-notification__response"> <p><strong>Duration</strong>: 30 minutes<br/> Depending on internet connection speed to required resources may be shorter or longer.</p> </div> </div> <p>Deploy the OpenStack cloud using the <code>cluster bootstrap</code> command and accept software defaults:</p> <pre><code>sunbeam cluster bootstrap --accept-defaults </code></pre> <div class="p-notification"> <div class="p-notification__response"> <p><strong>Note:</strong> If your host is a virtual one managed with <a href="https://multipass.run">Multipass</a>, you will need to ensure it has an FQDN set in the <code>/etc/hosts</code> file. See bug <a href="https://github.com/canonical/multipass/issues/3277">GH #3277</a>.</p> </div> </div> <h3><a class="p-link--anchor-heading" href="#p-88705-configure-the-cloud-and-obtain-credentials" name="p-88705-configure-the-cloud-and-obtain-credentials">Configure the cloud and obtain credentials</a></h3> <div class="p-notification"> <div class="p-notification__response"> <p><strong>Duration</strong>: 5 minutes<br/> Depending on internet connection speed to required resources may be shorter or longer.</p> </div> </div> <p>Now configure the deployed cloud using the <code>configure</code> command:</p> <pre><code>sunbeam configure --accept-defaults --openrc demo-openrc </code></pre> <p>The <code>--openrc</code> option specifies a regular user (non-admin) cloud init file (<code>demo-openrc</code> here).</p> <h2><a class="p-link--anchor-heading" href="#p-88705-launch-a-vm" name="p-88705-launch-a-vm">Launch a VM</a></h2> <div class="p-notification"> <div class="p-notification__response"> <p><strong>Duration</strong>: 2 minutes<br/> First VM launch will take longer.</p> </div> </div> <p>Verify the cloud by launching a VM called ‘test’ based on the ‘ubuntu’ image (Ubuntu 22.04 LTS). The <code>launch</code> command is used:</p> <pre><code>sunbeam launch ubuntu --name test </code></pre> <p>Sample output:</p> <pre><code class="lang-plaintext">Launching an OpenStack instance ... Access instance with `ssh -i /home/ubuntu/.config/openstack/sunbeam ubuntu@10.20.20.200` </code></pre> <p>Connect to the VM over SSH using the provided command.</p> <h2><a class="p-link--anchor-heading" href="#p-88705-related-how-tos" name="p-88705-related-how-tos">Related how-tos</a></h2> <p>Now that OpenStack is set up, be sure to check out the following how-to guides:</p> <ul> <li><a href="https://discourse.ubuntu.com/t/36232">Accessing the OpenStack dashboard</a></li> <li><a href="https://discourse.ubuntu.com/t/36231">Using the OpenStack CLI</a></li> </ul></div> </div> </section> <section tabindex="0" role="tabpanel" id="multi-node-mode" aria-hidden="true" aria-labelledby="multi-node-mode-tab"> <div class="p-strip is-shallow u-no-padding--top"> <div class="row"> <h2>Multi-node mode</h2> <div class="col-6"> <ul class="p-list"> <li class="p-list__item is-ticked">Uses MicroStack</li> <li class="p-list__item is-ticked">OpenStack clusters with full HA</li> <li class="p-list__item is-ticked">Suitable for small-scale production environments</li> </ul> </div> </div> </div> <div class="p-strip u-no-padding--top"> <div class="row"><p>This tutorial shows how to install a multi-node OpenStack cluster (based on project Sunbeam). It will deploy an <strong>OpenStack 2024.1</strong> (Caracal) cloud.</p> <h2><a class="p-link--anchor-heading" href="#p-89684-requirements" name="p-89684-requirements">Requirements</a></h2> <p>You will need <strong>three</strong> machines, each of which has the following requirements:</p> <ul> <li>physical machine running Ubuntu 24.04 LTS</li> <li>a multi-core amd64 processor (ideally with 4+ cores)</li> <li>a minimum of 32 GiB of free memory</li> <li>250 GiB of SSD storage available on the root disk</li> <li>a least one un-partitioned disk of at least 200 GiB in size</li> <li>two network interfaces <ul> <li>primary: for access to the OpenStack control plane</li> <li>secondary: for remote access to cloud VMs</li> </ul> </li> </ul> <div class="p-notification--caution"> <div class="p-notification__response"> <p><strong>Caution:</strong> Any change in IP address of any machine will be detrimental to the deployment. Dedicated physical machines with fixed IP address allocations are therefore required.</p> </div> </div> <div class="p-notification"> <div class="p-notification__response"> <p><strong>Important:</strong> For environments constrained by a proxy server, the intended MicroStack nodes must first be configured accordingly. See section <strong>Configure for the proxy at the OS level</strong> on the <a href="https://discourse.ubuntu.com/t/43946">Manage a proxied environment</a> page before proceeding.</p> </div> </div> <h3><a class="p-link--anchor-heading" href="#p-89684-machine-names" name="p-89684-machine-names">Machine names</a></h3> <p>For the purpose of this tutorial, the following machine names are used:</p> <div class="md-table"> <table> <thead> <tr> <th>Machine</th> <th>FQDN</th> <th>Un-partitioned disk</th> </tr> </thead> <tbody> <tr> <td>sunbeam01</td> <td><a href="http://sunbeam01.example.com">sunbeam01.example.com</a></td> <td>/dev/sdb</td> </tr> <tr> <td>sunbeam02</td> <td><a href="http://sunbeam02.example.com">sunbeam02.example.com</a></td> <td>/dev/sdb</td> </tr> <tr> <td>sunbeam03</td> <td><a href="http://sunbeam03.example.com">sunbeam03.example.com</a></td> <td>/dev/sdb</td> </tr> </tbody> </table> </div><h3><a class="p-link--anchor-heading" href="#p-89684-control-plane-networking" name="p-89684-control-plane-networking">Control plane networking</a></h3> <p>The network associated with the primary network interface requires a range of approximately ten IP addresses that will be used for API service endpoints.</p> <p>For the purposes of this tutorial, the following configuration is in place:</p> <div class="md-table"> <table> <thead> <tr> <th>Network component</th> <th>Value</th> </tr> </thead> <tbody> <tr> <td>CIDR</td> <td>172.16.1.0/24</td> </tr> <tr> <td>Gateway</td> <td>172.16.1.1</td> </tr> <tr> <td>Address range</td> <td>172.16.1.201-172.16.1.220</td> </tr> <tr> <td>Interface name on machine</td> <td>eno1</td> </tr> </tbody> </table> </div><h3><a class="p-link--anchor-heading" href="#p-89684-external-networking" name="p-89684-external-networking">External networking</a></h3> <p>The network associated with the secondary network interface requires a range of IP addresses that will be sufficient for allocating floating IP addresses to VMs. This will, in turn, allow them to be contacted by remote hosts.</p> <p>For the purposes of this tutorial, the following configuration is in place:</p> <div class="md-table"> <table> <thead> <tr> <th>Network component</th> <th>Value</th> </tr> </thead> <tbody> <tr> <td>CIDR</td> <td>172.16.2.0/24</td> </tr> <tr> <td>Gateway</td> <td>172.16.2.1</td> </tr> <tr> <td>Address range</td> <td>172.16.2.2-172.16.2.254</td> </tr> <tr> <td>Interface name on machine</td> <td>eno2</td> </tr> </tbody> </table> </div><h2><a class="p-link--anchor-heading" href="#p-89684-bootstrap-the-first-machine" name="p-89684-bootstrap-the-first-machine">Bootstrap the first machine</a></h2> <p>Commands in this section are performed on <code>sunbeam01</code>.</p> <div class="p-notification"> <div class="p-notification__response"> <p><strong>Note:</strong> During the deployment process you will be asked to input information in order to configure your new cloud. These questions are explained in more detail on the <a href="https://discourse.ubuntu.com/t/36230">Interactive configuration prompts</a> page in the reference section.</p> </div> </div> <h3><a class="p-link--anchor-heading" href="#p-89684-install-the-openstack-snap" name="p-89684-install-the-openstack-snap">Install the openstack snap</a></h3> <p>Begin by installing the <strong>openstack</strong> snap:</p> <pre><code>sudo snap install openstack --channel 2024.1/candidate </code></pre> <div class="p-notification--caution"> <div class="p-notification__response"> <p><strong>Caution:</strong> It is highly recommended to use the <code>--channel 2024.1/candidate</code> switch which includes all the latest bug fixes and updates before the next stable release coming in Q1 2025.</p> </div> </div> <h3><a class="p-link--anchor-heading" href="#p-89684-prepare-the-machine" name="p-89684-prepare-the-machine">Prepare the machine</a></h3> <p>Sunbeam can generate a script to ensure that the machine has all of the required dependencies installed and is configured correctly for use in OpenStack - you can review this script using:</p> <pre><code>sunbeam prepare-node-script --bootstrap </code></pre> <p>or the script can be directly executed in this way:</p> <pre><code>sunbeam prepare-node-script --bootstrap | bash -x &amp;&amp; newgrp snap_daemon </code></pre> <p>The script will ensure some software requirements are satisfied on the host. In particular, it will:</p> <ul> <li>install <code>openssh-server</code> if it is not found</li> <li>configure passwordless sudo for all commands for the current user (<code>NOPASSWD:ALL</code>)</li> </ul> <h3><a class="p-link--anchor-heading" href="#p-89684-bootstrap-the-cloud" name="p-89684-bootstrap-the-cloud">Bootstrap the cloud</a></h3> <p>Deploy the OpenStack cloud using the <code>cluster bootstrap</code> command:</p> <pre><code>sunbeam cluster bootstrap --role control,compute,storage </code></pre> <p>This first node will therefore be a control node, a compute node, and a storage node.</p> <p><strong>On snap channel <code>2024.1/candidate</code></strong>, you will first be prompted whether or not to enable network proxy usage. If ‘Yes’, several sub-questions will be asked.</p> <pre><code>Use proxy to access external network resources? [y/n] (y): http_proxy (): https_proxy (): no_proxy (): </code></pre> <p>Note that proxy settings can also be supplied by using a manifest (see <a href="https://discourse.ubuntu.com/t/42672">Deployment manifest</a>).</p> <p>When prompted, enter the CIDR and the address range for the control plane networking and the full path to the un-partitioned disk. Here we use the values given earlier:</p> <pre><code>Management network (172.16.1.0/24): OpenStack APIs IP ranges (172.16.1.201-172.16.1.240): 172.16.1.201-172.16.1.220 Disks to attach to MicroCeph: /dev/sdb </code></pre> <div class="p-notification--caution"> <div class="p-notification__response"> <p><strong>Caution:</strong> The address range used for the control plane must be addressable by all nodes in the deployment.</p> </div> </div> <p>The un-partitioned disk(s) will be detected and allocated for cloud storage (Ceph).</p> <h2><a class="p-link--anchor-heading" href="#p-89684-add-the-second-machine" name="p-89684-add-the-second-machine">Add the second machine</a></h2> <p>To add second machine <code>sunbeam02</code>, some commands are performed on the first machine (<code>sunbeam01</code>) and some are performed on the new machine (<code>sunbeam02</code>) itself.</p> <h3><a class="p-link--anchor-heading" href="#p-89684-create-a-registration-token" name="p-89684-create-a-registration-token">Create a registration token</a></h3> <p>Run the below command on <code>sunbeam01</code>.</p> <p>A registration token is needed before adding a new member. Run the <code>cluster add</code> command against the FQDN of the new node:</p> <pre><code>sunbeam cluster add sunbeam02.example.com --output sunbeam02.asc </code></pre> <div class="p-notification--caution"> <div class="p-notification__response"> <p><strong>Caution:</strong> Clustering does not support base hostnames. A node is only known by their FQDN.</p> </div> </div> <p>Sample output (token):</p> <pre><code>YmRlODViYjYtMGFlNy00MmFjLWE4NzMtNjI0ODg4YmUzZTM0Cg== </code></pre> <p>Keep the token in a safe place. It will be used in a future step.</p> <h3><a class="p-link--anchor-heading" href="#p-89684-install-the-openstack-snap" name="p-89684-install-the-openstack-snap">Install the openstack snap</a></h3> <p>Run the below command on <code>sunbeam02</code>.</p> <p>Install the openstack snap:</p> <pre><code>sudo snap install openstack --channel 2024.1/candidate </code></pre> <div class="p-notification--caution"> <div class="p-notification__response"> <p><strong>Caution:</strong> It is highly recommended to use the <code>--channel 2024.1/candidate</code> switch which includes all the latest bug fixes and updates before the next stable release coming in Q1 2025.</p> </div> </div> <h3><a class="p-link--anchor-heading" href="#p-89684-prepare-the-machine" name="p-89684-prepare-the-machine">Prepare the machine</a></h3> <p>Run the below command on <code>sunbeam02</code>.</p> <p>Sunbeam can generate a script to ensure that the machine has all of the required dependencies installed and is configured correctly for use in MicroStack - you can review this script using:</p> <pre><code>sunbeam prepare-node-script </code></pre> <p>or the script can be directly executed in this way:</p> <pre><code>sunbeam prepare-node-script | bash -x &amp;&amp; newgrp snap_daemon </code></pre> <p>The script will ensure some software requirements are satisfied on the host. In particular, it will:</p> <ul> <li>install <code>openssh-server</code> if it is not found</li> <li>configure passwordless sudo for all commands for the current user (<code>NOPASSWD:ALL</code>)</li> </ul> <h3><a class="p-link--anchor-heading" href="#p-89684-add-the-new-node" name="p-89684-add-the-new-node">Add the new node</a></h3> <p>Run the below command on <code>sunbeam02</code>.</p> <p>Add the machine as a new cluster member by using the <code>cluster join</code> command. Refer to the registration token obtained earlier:</p> <pre><code>cat sunbeam02.asc | sunbeam cluster join --role control,compute,storage - </code></pre> <div class="p-notification--caution"> <div class="p-notification__response"> <p><strong>Caution</strong>: The ending dash is mandatory when passing the token in standard input</p> </div> </div> <p>The final part of the join process will prompt for a free network interface to use for external networking. When prompted, enter the interface name for the external networking. Here we use the values given earlier:</p> <pre><code>External network’s interface [eno1/eno2] (eno1): eno2 </code></pre> <p>Any remote hosts intending to connect to VMs on this node must have connectivity with the interface selected for external traffic.</p> <h2><a class="p-link--anchor-heading" href="#p-89684-add-the-third-machine" name="p-89684-add-the-third-machine">Add the third machine</a></h2> <p>To add the third machine, we repeat the steps that were taken to add the second machine.</p> <h3><a class="p-link--anchor-heading" href="#p-89684-create-a-registration-token" name="p-89684-create-a-registration-token">Create a registration token</a></h3> <p>Run the below command on <code>sunbeam01</code>.</p> <p>A registration token is needed before adding a new member. Run the <code>cluster add</code> command against the FQDN of the new node:</p> <pre><code>sunbeam cluster add sunbeam03.example.com --output sunbeam03.asc </code></pre> <p>Sample output (token):</p> <pre><code>NGI0Mzg2NzktODA5OC00ZTRmLWIyZWEtNmU2NmQ2MjgxZmU1Cg== </code></pre> <h3><a class="p-link--anchor-heading" href="#p-89684-install-the-openstack-snap" name="p-89684-install-the-openstack-snap">Install the openstack snap</a></h3> <p>Run the below command on <code>sunbeam03</code>.</p> <p>Install the openstack snap:</p> <pre><code>sudo snap install openstack --channel 2024.1/candidate </code></pre> <div class="p-notification--caution"> <div class="p-notification__response"> <p><strong>Caution:</strong> It is highly recommended to use the <code>--channel 2024.1/beta</code> switch which includes all the latest bug fixes and updates before the next stable release coming in Q1 2025.</p> </div> </div> <h3><a class="p-link--anchor-heading" href="#p-89684-prepare-the-machine" name="p-89684-prepare-the-machine">Prepare the machine</a></h3> <p>Run the below command on <code>sunbeam03</code>.</p> <pre><code>sunbeam prepare-node-script | bash -x &amp;&amp; newgrp snap_daemon </code></pre> <h3><a class="p-link--anchor-heading" href="#p-89684-join-the-machine-to-the-cluster" name="p-89684-join-the-machine-to-the-cluster">Join the machine to the cluster</a></h3> <p>Run the below command on <code>sunbeam03</code>.</p> <p>Join the machine to the cluster by using the <code>cluster join</code> command. Refer to the registration token obtained earlier:</p> <pre><code>sunbeam cluster join --role control,compute,storage NGI0Mzg2NzktODA5OC00ZTRmLWIyZWEtNmU2NmQ2MjgxZmU1Cg== </code></pre> <p>The final part of the join process will prompt for a free network interface to use for external networking. When prompted, enter the interface name for the external networking. Here we use the values given earlier:</p> <pre><code>External network's interface [eno1/eno2] (eno1): eno2 </code></pre> <p>Any remote hosts intending to connect to VMs on this node must have connectivity with the interface selected for external traffic.</p> <h2><a class="p-link--anchor-heading" href="#p-89684-resize-the-control-plane" name="p-89684-resize-the-control-plane">Resize the control plane</a></h2> <p>Run the below command on either of the three nodes.</p> <p>Finally the control plane of the cloud must be resized to make use of the second and third nodes, providing resilience and expanded capacity:</p> <pre><code>sunbeam cluster resize </code></pre> <h2><a class="p-link--anchor-heading" href="#p-89684-configure-the-cloud" name="p-89684-configure-the-cloud">Configure the cloud</a></h2> <p>Now configure the deployed cloud using the <code>configure</code> command on the bootstrap node:</p> <pre><code>sunbeam configure --openrc demo-openrc </code></pre> <p>The <code>--openrc</code> option specifies a regular user (non-admin) cloud init file (<code>demo-openrc</code> here).</p> <p>A series of questions will now be asked. Below is a sample output of an entire interactive session. The values in square brackets, when present, provide acceptable values. A value in parentheses is the default value. Here we use the values given earlier:</p> <div class="p-notification--positive"> <div class="p-notification__response"> <p>The first question relates to local or remote VM access. For a multi-node cloud such as this one, remote access is a necessity.</p> </div> </div> <pre><code class="lang-plaintext">Local or remote access to VMs [local/remote] (local): remote External network (172.16.2.0/24): External network's gateway (172.16.2.1): Populate OpenStack cloud with demo user, default images, flavors etc [y/n] (y): Username to use for access to OpenStack (demo): Password to use for access to OpenStack (mt********): Project network (192.168.0.0/24): Enable ping and SSH access to instances? [y/n] (y): External network’s allocation range (172.16.2.2-172.16.2.254): External network’s type [flat/vlan] (flat): Writing openrc to demo-openrc ... done External network's interface [eno1/eno2] (eno1): eno2 </code></pre> <p>Any remote hosts intending to connect to VMs on this node must have connectivity with the interface selected for external traffic (last question above).</p> <p>These questions are explained in more detail on the <a href="https://discourse.ubuntu.com/t/36230">Interactive configuration prompts</a> page in the reference section.</p> <h2><a class="p-link--anchor-heading" href="#p-89684-launch-a-vm" name="p-89684-launch-a-vm">Launch a VM</a></h2> <p>Run the below command on either of the three nodes.</p> <p>Verify the cloud by launching a VM called ‘test’ based on the ‘ubuntu’ image (Ubuntu 22.04 LTS). The <code>launch</code> command is used:</p> <pre><code>sunbeam launch ubuntu --name test </code></pre> <p>Sample output:</p> <pre><code class="lang-plaintext">Launching an OpenStack instance ... Access instance with `ssh -i /home/ubuntu/.config/openstack/sunbeam ubuntu@172.16.2.200` </code></pre> <div class="p-notification--caution"> <div class="p-notification__response"> <p><strong>Caution:</strong> Since “remote” access to VMs has been configured, you won’t be able to SSH into them from any of the nodes in the cluster. Copy the private key given in the above output from the launching node to an external machine with an access to the 172.16.2.0/24 network. Note that the VM will not be ready instantaneously; waiting time is mostly determined by the cloud’s available resources.</p> </div> </div> <h2><a class="p-link--anchor-heading" href="#p-89684-related-how-tos" name="p-89684-related-how-tos">Related how-tos</a></h2> <p>Now that OpenStack is set up, be sure to check out the following howto guides:</p> <ul> <li><a href="https://discourse.ubuntu.com/t/36232">Accessing the OpenStack dashboard</a></li> <li><a href="https://discourse.ubuntu.com/t/36231">Using the OpenStack CLI</a></li> </ul></div> </div> </section> <section tabindex="0" role="tabpanel" id="multi-node-mode-with-bare-metal-automation" aria-labelledby="multi-node-mode-with-bare-metal-automation-tab" aria-hidden="hidden"> <div class="p-strip is-shallow u-no-padding--top"> <div class="row"> <h2>Multi-node mode with bare metal automation</h2> <div class="col-6"> <ul class="p-list"> <li class="p-list__item is-ticked">Uses OpenStack Charms</li> <li class="p-list__item is-ticked"> Uses <a href="https://maas.io">MAAS</a> for bare metal automation </li> <li class="p-list__item is-ticked">Suitable for large-scale production environments</li> </ul> </div> </div> </div> <div class="p-strip u-no-padding--top"> <div class="row"> <p> Check the <a href="https://docs.openstack.org/project-deploy-guide/charm-deployment-guide/latest/">OpenStack Charms Deployment Guide</a> for detailed instructions on how to set up OpenStack in multi-node mode with bare metal automation using OpenStack Charms. </p> </div> </div> </section> <section class="p-strip is-bordered u-no-padding--top"> <div class="u-fixed-width"> <h2>Take the next step</h2> <p>Is your OpenStack already up and running? If so, we hope you liked it and are now ready to take the next step.</p> </div> <div class="row"> <div class="col-6 p-card"> <img class="p-card__thumbnail--large" src="https://assets.ubuntu.com/v1/3a4d4155-Training.svg" alt="" /> <hr class="p-rule--muted" /> <p> <a href="/openstack/tutorials">Check our tutorials&nbsp;&rsaquo;</a> </p> <p class="p-card__content"> Learn OpenStack through a series of tutorials. Starting with just a single machine, learn how to use OpenStack for cloud infrastructure implementation purposes, from a single-node installation to large-scale clusters. </p> </div> <div class="col-6 p-card"> <img class="p-card__thumbnail--large" src="https://assets.ubuntu.com/v1/67d90042-compliance-icon-no-padding.svg" alt="" /> <hr class="p-rule--muted" /> <p> <a href="https://www.openstack.org/user-survey/survey-2024/landing">Fill in the survey&nbsp;&rsaquo;</a> </p> <p class="p-card__content"> The OpenStack User Survey provides users an opportunity to influence the community and software direction. By sharing information about your configuration and requirements, the Open Infrastructure Foundation User Committee will be able to advocate on your behalf. </p> </div> <div class="col-6 p-card"> <img class="p-card__thumbnail--large" src="https://assets.ubuntu.com/v1/b0af9ede-UA_24-7_Support.svg" alt="" /> <hr class="p-rule--muted" /> <p> <a href="/pro">Get commercial support&nbsp;&rsaquo;</a> </p> <p class="p-card__content"> Canonical provides full commercial support for OpenStack clouds deployed with MicroStack. Simply get any Ubuntu Pro subscription with Support, attach it to all nodes in your cluster and benefit from phone and ticket support. </p> </div> <div class="col-6 p-card"> <img class="p-card__thumbnail--large" src="https://assets.ubuntu.com/v1/81e3bf86-We+operate+your+Kubernetes.svg" alt="" /> <hr class="p-rule--muted" /> <p> <a href="/openstack/managed">Get fully-managed cloud&nbsp;&rsaquo;</a> </p> <p class="p-card__content"> Liked OpenStack but don't want to manage it yourself? Don't worry - Canonical can design, build and operate the cloud for you. Offload OpenStack operations to our team of cloud experts and benefit from public cloud -like experience. </p> </div> </div> </section> <div class="p-strip p-contextual-footer "> <div class="row p-divider"> <div class="col-4 p-divider__block"> <h3 class="p-heading--4">How about Managed OpenStack?</h3> <p>No need to design and install OpenStack. Canonical can build and operate the cloud for you.</p> <p><a class="p-button" href="/openstack/contact-us?product=openstack">Contact us</a></p> </div> <div class="col-4 p-divider__block"> <form action="/marketo/submit" method="post"> <h3 class="p-heading--4">Sign up for our monthly Cloud&nbsp;Newsletter</h3> <ul class="p-list u-clearfix"> <li class="p-list__item"> <label class="u-off-screen" for="Email">Your email</label> <input type="email" pattern="^[^ ]+@[^ ]+\.[a-z]{2,26}$" placeholder="Your email" name="email" id="Email" required /> </li> <li class="p-list__item"> <label class="p-checkbox"> <input class="p-checkbox__input" name="canonicalUpdatesOptIn" aria-labelledby="canonicalUpdatesOptIn" value="yes" type="checkbox" /> <span class="p-checkbox__label contextual-footer__text--label" id="canonicalUpdatesOptIn">I agree to receive information about Canonical's products and services.</span>&nbsp; </label> </li> <li class="p-list__item u-no-margin--top"> <p>In submitting this form, I confirm that I have read and agree to <a href="/legal/data-privacy/newsletter">Canonical's Privacy Notice</a> and <a href="/legal/data-privacy">Privacy Policy</a>.</p> </li> <li class="p-list__item"> <span class="u-off-screen"><input type="text" name="_marketo_comments" value=""></span> <span><button type="submit" class="p-button" onclick="dataLayer.push({'event' : 'GAEvent', 'eventCategory' : 'Contextual footer link', 'eventAction' : 'Cloud newsletter', 'eventLabel' : 'Sign-up for news updates', 'eventValue' : undefined });">Subscribe now</button></span> <input value="1212" name="formid" type="hidden" /> <input type="hidden" name="Consent_to_Processing__c" value="yes" /> <input type="hidden" name="returnURL" value="/openstack/install#success" /> <input type="hidden" aria-hidden="true" aria-label="hidden field" name="utm_campaign" id="utm_campaign" value="" /> <input type="hidden" aria-hidden="true" aria-label="hidden field" name="utm_medium" id="utm_medium" value="" /> <input type="hidden" aria-hidden="true" aria-label="hidden field" name="utm_source" id="utm_source" value="" /> <input type="hidden" aria-hidden="true" aria-label="hidden field" name="utm_content" id="utm_content" value="" /> <input type="hidden" aria-hidden="true" aria-label="hidden field" name="utm_term" id="utm_term" value="" /> <input type="hidden" aria-hidden="true" aria-label="hidden field" name="GCLID__c" id="GCLID__c" value="" /> <input type="hidden" aria-hidden="true" aria-label="hidden field" name="Facebook_Click_ID__c" id="Facebook_Click_ID__c" value="" /> <input type="hidden" aria-hidden="true" aria-label="hidden field" id="preferredLanguage" name="preferredLanguage" maxlength="255" value="" /> </li> </ul> </form> </div> <div class="col-4 p-divider__block"> <h3 class="p-heading--4">Documentation</h3> <ul class="p-list"> <li class="p-list__item"><a href="https://microstack.run/docs" onclick="dataLayer.push({'event' : 'GAEvent', 'eventCategory' : 'Contextual footer link', 'eventAction' : 'openstack documentation', 'eventLabel' : 'MicroStack', 'eventValue' : undefined });">MicroStack documentation</a> </li> <li class="p-list__item"><a href="https://jaas.ai/openstack-base/bundle/73" onclick="dataLayer.push({'event' : 'GAEvent', 'eventCategory' : 'Contextual footer link', 'eventAction' : 'openstack documentation', 'eventLabel' : 'OpenStack Charms documentation', 'eventValue' : undefined });">Charmed OpenStack documentation</a> </li> <li class="p-list__item"><a href="https://docs.openstack.org/charm-guide/latest/" onclick="dataLayer.push({'event' : 'GAEvent', 'eventCategory' : 'Contextual footer link', 'eventAction' : 'openstack documentation', 'eventLabel' : 'Charmed OpenStack', 'eventValue' : undefined });">Upstream OpenStack Charms documentation</a> </li> <li class="p-list__item"><a href="/openstack/tutorials" onclick="dataLayer.push({'event' : 'GAEvent', 'eventCategory' : 'Contextual footer link', 'eventAction' : 'openstack documentation', 'eventLabel' : 'OpenStack tutorials', 'eventValue' : undefined });">OpenStack tutorials</a> </li> </ul> </div> </div> </div> <!-- Set default Marketo information for contact form below--> <div class="u-hide" id="contact-form-container" data-form-location="/shared/forms/interactive/openstack" data-form-id="1251" data-lp-id="2086" data-return-url="https://ubuntu.com/openstack/thank-you" data-lp-url="https://pages.ubuntu.com/things-contact-us.html"></div> </main> <!-- /.inner-wrapper --> </div> <!-- /.wrapper --> <!-- footer content goes here --> <footer class="is-dark p-strip u-clearfix" style="background-color: #2d2d2d;"> <nav aria-label="Footer navigation" id="main-navigation" class="p-footer__nav p-section"> <div class="row"> <hr class="p-rule--muted u-no-margin--bottom" /> <div class="col-3 col-medium-2"> <h2 class="p-heading--5"> <a class="u-hide--small" href="/openstack"> OpenStack </a> <a class="u-hide--medium u-hide--large js-footer-accordion-cta" href="/openstack" aria-controls="/openstack-footer-nav"> OpenStack </a> </h2> </div> <div class="col-9 col-medium-4 u-hide--small"> <ul class="p-inline-list p-footer-list" id="/openstack-footer-nav"> <li class="p-inline-list__item"><a href="/openstack/what-is-openstack">What is OpenStack</a></li> <li class="p-inline-list__item"><a href="/openstack/features">Features</a></li> <li class="p-inline-list__item"><a href="/openstack/managed">Managed</a></li> <li class="p-inline-list__item"><a href="/openstack/consulting">Consulting</a></li> <li class="p-inline-list__item"><a href="/openstack/install">Install</a></li> <li class="p-inline-list__item"><a href="/openstack/support">Support</a></li> </ul> </div> </div> <div class="row"> <hr class="p-rule--muted u-no-margin--bottom" /> <div class="col-3 col-medium-2"> <h2 class="p-heading--5"> <a class="u-hide--small" href="/ceph"> Ceph </a> <a class="u-hide--medium u-hide--large js-footer-accordion-cta" href="/ceph" aria-controls="/ceph-footer-nav"> Ceph </a> </h2> </div> <div class="col-9 col-medium-4 u-hide--small"> <ul class="p-inline-list p-footer-list" id="/ceph-footer-nav"> <li class="p-inline-list__item"><a href="/ceph/what-is-ceph">What is Ceph</a></li> <li class="p-inline-list__item"><a href="/ceph/managed">Managed</a></li> <li class="p-inline-list__item"><a href="/ceph/consulting">Consulting</a></li> <li class="p-inline-list__item"><a href="/ceph/docs">Docs</a></li> <li class="p-inline-list__item"><a href="/ceph/install">Install</a></li> </ul> </div> </div> <div class="row"> <hr class="p-rule--muted u-no-margin--bottom" /> <div class="col-3 col-medium-2"> <h2 class="p-heading--5"> <a class="u-hide--small" href="/kubernetes"> Kubernetes </a> <a class="u-hide--medium u-hide--large js-footer-accordion-cta" href="/kubernetes" aria-controls="/kubernetes-footer-nav"> Kubernetes </a> </h2> </div> <div class="col-9 col-medium-4 u-hide--small"> <ul class="p-inline-list p-footer-list" id="/kubernetes-footer-nav"> <li class="p-inline-list__item"><a href="/kubernetes/what-is-kubernetes">What is Kubernetes</a></li> <li class="p-inline-list__item"><a href="/kubernetes/managed">Managed</a></li> <li class="p-inline-list__item"><a href="/kubernetes/install">Install</a></li> <li class="p-inline-list__item"><a href="/kubernetes/charmed-k8s/docs">Docs</a></li> <li class="p-inline-list__item"><a href="/kubernetes/resources">Resources</a></li> </ul> </div> </div> <div class="row"> <hr class="p-rule--muted u-no-margin--bottom" /> <div class="col-3 col-medium-2"> <h2 class="p-heading--5"> <a class="u-hide--small" href="/managed"> Managed Services </a> <a class="u-hide--medium u-hide--large js-footer-accordion-cta" href="/managed" aria-controls="/managed-footer-nav"> Managed Services </a> </h2> </div> <div class="col-9 col-medium-4 u-hide--small"> <ul class="p-inline-list p-footer-list" id="/managed-footer-nav"> <li class="p-inline-list__item"><a href="/openstack/managed">OpenStack</a></li> <li class="p-inline-list__item"><a href="/kubernetes/managed">Kubernetes</a></li> <li class="p-inline-list__item"><a href="/ceph/managed">Ceph</a></li> <li class="p-inline-list__item"><a href="/managed/apps">Apps</a></li> <li class="p-inline-list__item"><a href="/managed/firefighting-support">Firefighting</a></li> </ul> </div> </div> <div class="row"> <hr class="p-rule--muted u-no-margin--bottom" /> <div class="col-3 col-medium-2"> <h2 class="p-heading--5"> <a class="u-hide--small" href="/ai"> AI / ML </a> <a class="u-hide--medium u-hide--large js-footer-accordion-cta" href="/ai" aria-controls="/ai-footer-nav"> AI / ML </a> </h2> </div> <div class="col-9 col-medium-4 u-hide--small"> <ul class="p-inline-list p-footer-list" id="/ai-footer-nav"> <li class="p-inline-list__item"><a href="/ai/mlops">MLOps</a></li> <li class="p-inline-list__item"><a href="/ai/what-is-kubeflow">Kubeflow</a></li> <li class="p-inline-list__item"><a href="/ai/mlflow">MLflow</a></li> <li class="p-inline-list__item"><a href="/ai/consulting">Consulting</a></li> <li class="p-inline-list__item"><a href="/ai/data-science">Data Science</a></li> <li class="p-inline-list__item"><a href="/ai/mlops-workshop">MLOps workshop</a></li> </ul> </div> </div> <div class="row"> <hr class="p-rule--muted u-no-margin--bottom" /> <div class="col-3 col-medium-2"> <h2 class="p-heading--5"> <a class="u-hide--small" href="/robotics"> Robotics </a> <a class="u-hide--medium u-hide--large js-footer-accordion-cta" href="/robotics" aria-controls="/robotics-footer-nav"> Robotics </a> </h2> </div> <div class="col-9 col-medium-4 u-hide--small"> <ul class="p-inline-list p-footer-list" id="/robotics-footer-nav"> <li class="p-inline-list__item"><a href="/robotics/what-is-ros">What is ROS</a></li> <li class="p-inline-list__item"><a href="/robotics/ros-esm">ROS ESM</a></li> <li class="p-inline-list__item"><a href="/robotics/community">Community</a></li> <li class="p-inline-list__item"><a href="/robotics/docs">Docs</a></li> </ul> </div> </div> <div class="row"> <hr class="p-rule--muted u-no-margin--bottom" /> <div class="col-3 col-medium-2"> <h2 class="p-heading--5"> <a class="u-hide--small" href="/internet-of-things"> IoT </a> <a class="u-hide--medium u-hide--large js-footer-accordion-cta" href="/internet-of-things" aria-controls="/internet-of-things-footer-nav"> IoT </a> </h2> </div> <div class="col-9 col-medium-4 u-hide--small"> <ul class="p-inline-list p-footer-list" id="/internet-of-things-footer-nav"> <li class="p-inline-list__item"><a href="/internet-of-things/appstore">App store</a></li> <li class="p-inline-list__item"><a href="/embedded">Embedded Linux</a></li> <li class="p-inline-list__item"><a href="/internet-of-things/management">Management</a></li> </ul> </div> </div> <div class="row"> <hr class="p-rule--muted u-no-margin--bottom" /> <div class="col-3 col-medium-2"> <h2 class="p-heading--5"> <a class="u-hide--small" href="/core"> Ubuntu Core </a> <a class="u-hide--medium u-hide--large js-footer-accordion-cta" href="/core" aria-controls="/core-footer-nav"> Ubuntu Core </a> </h2> </div> <div class="col-9 col-medium-4 u-hide--small"> <ul class="p-inline-list p-footer-list" id="/core-footer-nav"> <li class="p-inline-list__item"><a href="/core/features">Features</a></li> <li class="p-inline-list__item"><a href="/core/stories">Success stories</a></li> <li class="p-inline-list__item"><a href="/core/services">Services</a></li> <li class="p-inline-list__item"><a href="/core/docs">Docs</a></li> </ul> </div> </div> <div class="row"> <hr class="p-rule--muted u-no-margin--bottom" /> <div class="col-3 col-medium-2"> <h2 class="p-heading--5"> <a class="u-hide--small" href="/desktop"> Ubuntu Desktop </a> <a class="u-hide--medium u-hide--large js-footer-accordion-cta" href="/desktop" aria-controls="/desktop-footer-nav"> Ubuntu Desktop </a> </h2> </div> <div class="col-9 col-medium-4 u-hide--small"> <ul class="p-inline-list p-footer-list" id="/desktop-footer-nav"> <li class="p-inline-list__item"><a href="/desktop/organisations">Organisations</a></li> <li class="p-inline-list__item"><a href="/desktop/developers">Developers</a></li> <li class="p-inline-list__item"><a href="/desktop/flavours">Flavours</a></li> <li class="p-inline-list__item"><a href="/desktop/wsl">WSL</a></li> </ul> </div> </div> <div class="row"> <hr class="p-rule--muted u-no-margin--bottom" /> <div class="col-3 col-medium-2"> <h2 class="p-heading--5"> <a class="u-hide--small" href="/server"> Ubuntu Server </a> <a class="u-hide--medium u-hide--large js-footer-accordion-cta" href="/server" aria-controls="/server-footer-nav"> Ubuntu Server </a> </h2> </div> <div class="col-9 col-medium-4 u-hide--small"> <ul class="p-inline-list p-footer-list" id="/server-footer-nav"> <li class="p-inline-list__item"><a href="/server/hyperscale">Hyperscale</a></li> <li class="p-inline-list__item"><a href="/server/docs">Docs</a></li> </ul> </div> </div> <div class="row"> <hr class="p-rule--muted u-no-margin--bottom" /> <div class="col-3 col-medium-2"> <h2 class="p-heading--5"> <a class="u-hide--small" href="/cloud"> Cloud </a> <a class="u-hide--medium u-hide--large js-footer-accordion-cta" href="/cloud" aria-controls="/cloud-footer-nav"> Cloud </a> </h2> </div> <div class="col-9 col-medium-4 u-hide--small"> <ul class="p-inline-list p-footer-list" id="/cloud-footer-nav"> <li class="p-inline-list__item"><a href="/cloud/cloud-computing">What is cloud computing</a></li> <li class="p-inline-list__item"><a href="/cloud/private-cloud">What is private cloud</a></li> <li class="p-inline-list__item"><a href="/cloud/hybrid-cloud">What is hybrid cloud</a></li> <li class="p-inline-list__item"><a href="/cloud/multi-cloud">What is multi-cloud</a></li> <li class="p-inline-list__item"><a href="/cloud/public-cloud">Public cloud</a></li> </ul> </div> </div> <div class="row"> <hr class="p-rule--muted u-no-margin--bottom" /> <div class="col-3 col-medium-2"> <h2 class="p-heading--5"> <a class="u-hide--small" href="/security"> Security </a> <a class="u-hide--medium u-hide--large js-footer-accordion-cta" href="/security" aria-controls="/security-footer-nav"> Security </a> </h2> </div> <div class="col-9 col-medium-4 u-hide--small"> <ul class="p-inline-list p-footer-list" id="/security-footer-nav"> <li class="p-inline-list__item"><a href="/security/esm">ESM</a></li> <li class="p-inline-list__item"><a href="/security/livepatch">Livepatch</a></li> <li class="p-inline-list__item"><a href="/security/compliance-automation">Certifications &amp; Hardening</a></li> <li class="p-inline-list__item"><a href="/security/cves">CVEs</a></li> <li class="p-inline-list__item"><a href="/security/notices">Notices</a></li> <li class="p-inline-list__item"><a href="/security/docker-images">Docker Images</a></li> </ul> </div> </div> <div class="row"> <hr class="p-rule--muted u-no-margin--bottom" /> <div class="col-3 col-medium-2"> <h2 class="p-heading--5"> <a class="u-hide--small" href="/landscape"> Landscape </a> <a class="u-hide--medium u-hide--large js-footer-accordion-cta" href="/landscape" aria-controls="/landscape-footer-nav"> Landscape </a> </h2> </div> <div class="col-9 col-medium-4 u-hide--small"> <ul class="p-inline-list p-footer-list" id="/landscape-footer-nav"> <li class="p-inline-list__item"><a href="/landscape/features">Features</a></li> <li class="p-inline-list__item"><a href="/landscape/managed">Managed</a></li> <li class="p-inline-list__item"><a href="/landscape/compare">Compare</a></li> <li class="p-inline-list__item"><a href="/landscape/docs/quickstart-deployment">Install</a></li> <li class="p-inline-list__item"><a href="/landscape/docs">Docs</a></li> <li class="p-inline-list__item"><a href="https://landscape.canonical.com/">Log in to Landscape</a></li> </ul> </div> </div> <div class="row"> <hr class="p-rule--muted u-no-margin--bottom" /> <div class="col-3 col-medium-2"> <h2 class="p-heading--5"> <a class="u-hide--small" href="/containers"> Containers </a> <a class="u-hide--medium u-hide--large js-footer-accordion-cta" href="/containers" aria-controls="/containers-footer-nav"> Containers </a> </h2> </div> <div class="col-9 col-medium-4 u-hide--small"> <ul class="p-inline-list p-footer-list" id="/containers-footer-nav"> <li class="p-inline-list__item"><a href="/containers/what-are-containers">What are containers</a></li> <li class="p-inline-list__item"><a href="/containers/chiseled">Chiseled Ubuntu</a></li> <li class="p-inline-list__item"><a href="/containers/chiseled/dotnet">Chiseled and .NET</a></li> </ul> </div> </div> <div class="row"> <hr class="p-rule--muted u-no-margin--bottom" /> <div class="col-3 col-medium-2"> <h2 class="p-heading--5"> <a class="u-hide--small" href="/download"> Downloads </a> <a class="u-hide--medium u-hide--large js-footer-accordion-cta" href="/download" aria-controls="/download-footer-nav"> Downloads </a> </h2> </div> <div class="col-9 col-medium-4 u-hide--small"> <ul class="p-inline-list p-footer-list" id="/download-footer-nav"> <li class="p-inline-list__item"><a href="/download/desktop">Desktop</a></li> <li class="p-inline-list__item"><a href="/download/server">Server</a></li> <li class="p-inline-list__item"><a href="/download/core">Core</a></li> <li class="p-inline-list__item"><a href="/download/cloud">Cloud</a></li> </ul> </div> </div> <div class="row"> <hr class="p-rule--muted u-no-margin--bottom" /> <div class="col-3 col-medium-2"> <h2 class="p-heading--5"> <a class="u-hide--small" href="/support"> Support </a> <a class="u-hide--medium u-hide--large js-footer-accordion-cta" href="/support" aria-controls="/support-footer-nav"> Support </a> </h2> </div> <div class="col-9 col-medium-4 u-hide--small"> <ul class="p-inline-list p-footer-list" id="/support-footer-nav"> <li class="p-inline-list__item"><a href="/pro/dashboard">Your subscriptions</a></li> <li class="p-inline-list__item"><a href="/pro/users">Account users</a></li> <li class="p-inline-list__item"><a href="/pricing/pro">Pricing</a></li> <li class="p-inline-list__item"><a href="https://discourse.ubuntu.com/c/project/ubuntu-pro/116/">Discourse</a></li> </ul> </div> </div> <div class="row"> <hr class="p-rule--muted u-no-margin--bottom" /> <div class="col-3 col-medium-2"> <h2 class="p-heading--5"> <a class="u-hide--small" href="/pricing"> Pricing </a> <a class="u-hide--medium u-hide--large js-footer-accordion-cta" href="/pricing" aria-controls="/pricing-footer-nav"> Pricing </a> </h2> </div> <div class="col-9 col-medium-4 u-hide--small"> <ul class="p-inline-list p-footer-list" id="/pricing-footer-nav"> <li class="p-inline-list__item"><a href="/pricing/consulting">Consulting</a></li> <li class="p-inline-list__item"><a href="/pricing/desktop">Desktops</a></li> <li class="p-inline-list__item"><a href="/pricing/devices">Devices</a></li> </ul> </div> </div> <!-- The following 3 sections are custom and cannot be pulled from nav.yaml --> <div class="row"> <hr class="p-rule--muted" /> <div class="col-3 col-medium-2"> <h2 class="p-heading--5"> Solutions </h2> </div> <div class="col-9 col-medium-4"> <ul class="p-inline-list p-footer-list u-responsive-realign"> <li class="p-inline-list__item"> <a href="https://canonical.com/solutions/ai">AI</a> </li> <li class="p-inline-list__item"> <a href="https://canonical.com/data">Data</a> </li> <li class="p-inline-list__item"> <a href="https://canonical.com/solutions/infrastructure">Infrastructure</a> </li> <li class="p-inline-list__item"> <a href="https://canonical.com/solutions/secure-open-source">Secure open source</a> </li> </ul> </div> </div> <div class="row"> <hr class="p-rule--muted" /> <div class="col-3 col-medium-2"> <h2 class="p-heading--5"> Sectors </h2> </div> <div class="col-9 col-medium-4"> <ul class="p-inline-list p-footer-list u-responsive-realign"> <li class="p-inline-list__item"> <a href="/automotive">Automotive</a> </li> <li class="p-inline-list__item"> <a href="/industrial">Industrial</a> </li> <li class="p-inline-list__item"> <a href="/gov">Government</a> </li> <li class="p-inline-list__item"> <a href="/telco">Telco</a> </li> <li class="p-inline-list__item"> <a href="/financial-services">Finance</a> </li> </ul> </div> </div> </nav> <nav aria-label="Resources navigation"> <div class="row p-section"> <hr class="p-rule--muted" /> <div class="col-3 col-medium-2 col-small-2"> <a class="p-button--positive" href="/contact-us">Contact us</a> </div> <div class="col-6 col-large-2 col-medium-4"> <ul class="p-inline-list u-responsive-realign"> <li class="p-inline-list__item"> <a href="/about">About us</a> </li> <li class="p-inline-list__item"> <a href="/community">Community</a> </li> <li class="p-inline-list__item"> <a href="https://www.canonical.com/careers">Careers</a> </li> <li class="p-inline-list__item"> <a href="/blog">Blog</a> </li> <li class="p-inline-list__item"> <a href="/engage">Resources</a> </li> <li class="p-inline-list__item"> <a href="/blog/press-centre">Press centre</a> </li> </ul> </div> <div class="col-3 col-large-2 col-start-medium-3 col-medium-4"> <ul class="p-inline-list-icons u-no-margin--left u-no-padding--left"> <li class="p-inline-list__item"> <a class="p-inline-list__link--twitter" title="Follow Ubuntu on Twitter" href="https://twitter.com/ubuntu"> <svg xmlns="http://www.w3.org/2000/svg" height="25" width="25" viewBox="0 0 375 374.9999"> <defs> <style> .twitter-icon { fill: #666666; } .cls-2 { fill: #e5e5e5; } </style> </defs> <g> <path class="twitter-icon" d="M 187.46875 7.09375 C 87.851562 7.09375 7.09375 87.851562 7.09375 187.46875 C 7.09375 287.085938 87.851562 367.84375 187.46875 367.84375 C 287.085938 367.84375 367.84375 287.085938 367.84375 187.46875 C 367.84375 87.851562 287.085938 7.09375 187.46875 7.09375" /> </g> <g class="cls-2" transform="translate(85, 75)"> <svg xmlns="http://www.w3.org/2000/svg" x="-32" y="-30" height="280" width="280" viewBox="0 0 50 50"> <path d="M 6.9199219 6 L 21.136719 26.726562 L 6.2285156 44 L 9.40625 44 L 22.544922 28.777344 L 32.986328 44 L 43 44 L 28.123047 22.3125 L 42.203125 6 L 39.027344 6 L 26.716797 20.261719 L 16.933594 6 L 6.9199219 6 z" /> </svg> </g> </svg> </a> </li> <li class="p-inline-list__item"> <a class="p-inline-list__link--facebook" title="Follow Ubuntu on Facebook" href="https://www.facebook.com/ubuntulinux/"> <svg xmlns="http://www.w3.org/2000/svg" height="25" width="25" viewbox="0 0 32 32"> <defs> <style> .facebook-icon { fill: #666666; } .cls-2 { fill: #fff; } </style> </defs> <g> <path class="facebook-icon" d="M15.947 0C7.14 0 0 7.143 0 15.95 0 24.76 7.142 31.9 15.95 31.9s15.948-7.14 15.948-15.95c0-4.23-1.68-8.286-4.672-11.277C24.234 1.68 20.176 0 15.946 0z" /> </g> <path class="cls-2" d="M18.632 5.102c-2.91 0-4.904 1.776-4.904 5.04v2.55h-3.293v3.814h3.293V26.87c1.353-.18 2.678-.53 3.942-1.045v-9.31h3.285l.492-3.812h-3.784v-2.18c0-1.104.357-2.238 1.894-1.855h2.02V5.252c-.978-.103-1.96-.154-2.943-.15h-.002z" /> </svg> </a> </li> <li class="p-inline-list__item"> <a class="p-inline-list__link--linkedin" title="Find Canonical on LinkedIn" href="https://www.linkedin.com/company/234280"> <svg xmlns="http://www.w3.org/2000/svg" height="25" width="25" viewbox="0 0 33 33"> <defs> <style> .linkedin-icon { fill: #666666; } .cls-2 { fill: #fff; } </style> </defs> <g> <path class="linkedin-icon" d="M16.26 0C7.28 0 0 7.28 0 16.26s7.28 16.262 16.26 16.262 16.262-7.28 16.262-16.26C32.522 7.28 25.242 0 16.262 0z" /> </g> <path class="cls-2" d="M7 8.512v16.38c0 .758.63 1.37 1.404 1.37h16.192c.775 0 1.404-.612 1.404-1.37V8.512c0-.755-.63-1.37-1.404-1.37H8.404C7.63 7.143 7 7.757 7 8.513zm5.76 14.636H9.89v-8.634h2.87v8.634zm-1.435-9.812h-.02c-.962 0-1.585-.663-1.585-1.492 0-.847.642-1.492 1.624-1.492s1.586.645 1.604 1.492c0 .83-.623 1.492-1.623 1.492zm3.022 9.812s.038-7.824 0-8.634h2.87v1.252h-.02c.38-.59 1.058-1.454 2.607-1.454 1.888 0 3.303 1.234 3.303 3.885v4.95h-2.87V18.53c0-1.162-.415-1.953-1.453-1.953-.793 0-1.265.534-1.472 1.05-.076.184-.095.44-.095.7v4.82h-2.87z" /> </svg> </a> </li> <li class="p-inline-list__item"> <a class="p-inline-list__link--instagram" title="Follow Ubuntu on Instagram" href="https://www.instagram.com/ubuntu_os/"> <svg xmlns="http://www.w3.org/2000/svg" height="25" width="25" viewBox="0 0 375 375"> <defs> <style> .instagram-icon { fill: #666666; } .cls-2 { fill: #fff; } </style> </defs> <g clip-path="url(#clip0_11_324)"> <path class="instagram-icon" d="M187.469 7.09375C87.8516 7.09375 7.09375 87.8516 7.09375 187.469C7.09375 287.086 87.8516 367.844 187.469 367.844C287.086 367.844 367.844 287.086 367.844 187.469C367.844 87.8516 287.086 7.09375 187.469 7.09375Z" /> <path class="cls-2" d="M140.78 73.6689C128.777 74.2352 120.581 76.1507 113.415 78.9663C105.999 81.8564 99.7139 85.7347 93.4599 92.0113C87.2059 98.2878 83.3547 104.578 80.4849 112.005C77.7076 119.186 75.826 127.39 75.2958 139.399C74.7656 151.408 74.6483 155.269 74.7069 185.902C74.7656 216.536 74.9009 220.376 75.483 232.41C76.0561 244.411 77.9648 252.605 80.7804 259.773C83.675 267.189 87.5488 273.472 93.8276 279.728C100.106 285.984 106.392 289.827 113.837 292.701C121.012 295.474 129.217 297.364 141.224 297.89C153.232 298.416 157.096 298.538 187.721 298.479C218.346 298.42 222.201 298.285 234.233 297.714C246.265 297.143 254.417 295.221 261.587 292.419C269.003 289.518 275.29 285.651 281.542 279.369C287.794 273.088 291.643 266.794 294.51 259.362C297.29 252.188 299.178 243.982 299.7 231.984C300.225 219.943 300.349 216.099 300.291 185.469C300.232 154.84 300.094 151 299.524 138.97C298.953 126.941 297.042 118.771 294.228 111.599C291.329 104.183 287.46 97.9043 281.184 91.6435C274.907 85.3828 268.608 81.5361 261.178 78.6753C253.999 75.898 245.798 74.0051 233.791 73.4862C221.784 72.9673 217.919 72.8342 187.283 72.8928C156.647 72.9515 152.812 73.0824 140.78 73.6689ZM142.098 277.596C131.099 277.118 125.127 275.29 121.147 273.761C115.877 271.73 112.123 269.276 108.156 265.348C104.19 261.42 101.753 257.652 99.6958 252.393C98.1504 248.413 96.2891 242.448 95.7747 231.449C95.2151 219.562 95.0978 215.992 95.0324 185.875C94.967 155.758 95.082 152.194 95.6032 140.302C96.0725 129.312 97.9112 123.333 99.4386 119.356C101.469 114.079 103.915 110.331 107.852 106.367C111.789 102.403 115.545 99.9619 120.809 97.9043C124.784 96.3521 130.749 94.5066 141.743 93.9832C153.64 93.4191 157.205 93.3063 187.317 93.2409C217.43 93.1755 221.003 93.2883 232.905 93.8117C243.894 94.29 249.875 96.1107 253.848 97.6471C259.121 99.6776 262.873 102.117 266.837 106.06C270.801 110.004 273.244 113.747 275.302 119.022C276.856 122.986 278.702 128.949 279.221 139.95C279.787 151.846 279.916 155.413 279.97 185.523C280.024 215.634 279.918 219.21 279.397 231.097C278.916 242.096 277.093 248.07 275.561 252.054C273.531 257.323 271.083 261.079 267.144 265.041C263.204 269.003 259.452 271.444 254.187 273.501C250.216 275.051 244.244 276.901 233.259 277.425C221.362 277.984 217.798 278.101 187.674 278.167C157.55 278.232 153.996 278.111 142.1 277.596M234.06 125.395C234.064 128.073 234.863 130.689 236.354 132.913C237.845 135.136 239.963 136.868 242.438 137.888C244.914 138.908 247.636 139.172 250.261 138.645C252.886 138.118 255.296 136.824 257.186 134.927C259.076 133.03 260.361 130.616 260.878 127.989C261.396 125.362 261.122 122.64 260.093 120.168C259.064 117.697 257.324 115.586 255.095 114.103C252.866 112.619 250.247 111.831 247.569 111.836C243.98 111.843 240.54 113.276 238.007 115.818C235.474 118.361 234.054 121.806 234.06 125.395ZM129.578 185.799C129.641 217.791 155.623 243.666 187.608 243.605C219.593 243.544 245.487 217.565 245.426 185.573C245.365 153.581 219.377 127.699 187.387 127.762C155.397 127.825 129.517 153.811 129.578 185.799ZM149.897 185.758C149.882 178.321 152.073 171.046 156.193 164.854C160.313 158.663 166.176 153.831 173.041 150.972C179.906 148.112 187.466 147.352 194.763 148.789C202.06 150.225 208.767 153.793 214.036 159.042C219.306 164.29 222.9 170.983 224.366 178.275C225.831 185.566 225.101 193.128 222.269 200.005C219.436 206.882 214.628 212.764 208.453 216.908C202.277 221.052 195.012 223.272 187.574 223.287C182.636 223.297 177.744 222.334 173.178 220.454C168.612 218.573 164.461 215.812 160.962 212.327C157.463 208.842 154.685 204.702 152.787 200.143C150.888 195.584 149.906 190.696 149.897 185.758Z" /> </g> </svg> </a> </li> <li class="p-inline-list__item"> <a class="p-inline-list__link--rss" title="Use the Ubuntu Blog rss feed" href="/blog/feed"> <svg width="25" height="25" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <style> .rss-icon { fill: #666666; } .cls-2 { fill: #E5E5E5; } </style> </defs> <g class="rss-icon"> <circle cx="20" cy="20" r="20"></circle> </g> <g class="cls-2" transform="translate(10.000000, 8.000000)"> <circle cx="3" cy="18.875" r="3"></circle> <path d="M14.5,21.875 L10.25,21.875 C10.25,16.2140813 5.66091869,11.625 3.55271368e-15,11.625 L3.55271368e-15,7.375 C8.00812887,7.375 14.5,13.8668711 14.5,21.875 Z" /> <path d="M17.5,21.875 C17.5,12.2100169 9.66498312,4.375 7.10542736e-15,4.375 L7.10542736e-15,0 C12.0812289,0 21.875,9.7937711 21.875,21.875 L17.5,21.875 Z" /> </g> </svg> </a> </li> </ul> </div> </div> </nav> <div class="row"> <hr class="p-rule--muted" /> <div class="col-3 col-medium-2"> <p class="p-footer--secondary__content">&copy; 2025 Canonical Ltd.</p> </div> <div class="col-9 col-medium-4"> <p>Ubuntu and Canonical are registered trademarks of Canonical Ltd.</p> <hr class="p-rule--muted" /> <nav class="p-footer--secondary__nav"> <ul class="p-inline-list--inline u-responsive-realign u-no-margin--left u-no-padding--left"> <li class="p-inline-list__item"> <a accesskey="8" href="/legal">Legal information</a> </li> <li class="p-inline-list__item"> <a accesskey="9" href="/legal/data-privacy">Data privacy</a> </li> <li class="p-inline-list__item"> <a href="" class="js-revoke-cookie-manager">Manage your tracker settings</a> </li> <li class="p-inline-list__item"> <a href="https://github.com/canonical/ubuntu.com/issues/new?template=ISSUE_TEMPLATE.yaml" id="report-a-bug">Report a bug on this site</a> </li> </ul> </nav> </div> </div> <div class="u-fixed-width"> <p class="u-hide--large link-to-top"> <a href="#">Back to top</a> </p> <script> /* Add the page to the report a bug link */ var bugLink = document.querySelector('#report-a-bug'); bugLink.href += '&reported_from=' + location.href; </script> <span class="u-off-screen"><a href="#">Go to the top of the page</a></span> </div> </footer> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10