CINXE.COM

How to install Landscape manually - Landscape Docs - Ubuntu Community Hub

<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>How to install Landscape manually - Landscape Docs - Ubuntu Community Hub</title> <meta name="description" content="Note: If you have an Ubuntu Pro subscription, we recommend you attach your Pro token for easy access to your Pro services. For more information, see how to attach your Ubuntu Pro subscription and how to enable Landscap&amp;hellip;"> <meta name="generator" content="Discourse 3.3.0 - https://github.com/discourse/discourse version 5bbdc8a813caf55ab3147ac65b5ffafb5e0aab90"> <link rel="icon" type="image/png" href="https://ubuntucommunity.s3.us-east-2.amazonaws.com/optimized/3X/b/e/be7e4cc6ef7ce95e285337634be009b70561d719_2_32x32.png"> <link rel="apple-touch-icon" type="image/png" href="https://ubuntucommunity.s3.us-east-2.amazonaws.com/optimized/3X/f/3/f38b9c7e7decc51bc26320541c441bfa28f99298_2_180x180.png"> <meta name="theme-color" media="all" content="#ffffff"> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, user-scalable=yes, viewport-fit=cover"> <link rel="canonical" href="https://discourse.ubuntu.com/t/how-to-install-landscape-manually/23085" /> <link rel="search" type="application/opensearchdescription+xml" href="https://discourse.ubuntu.com/opensearch.xml" title="Ubuntu Community Hub Search"> <link href="/stylesheets/color_definitions_base__2_4df0b5b6908053d16d0c877a7fa322b583f4db7f.css?__ws=discourse.ubuntu.com" media="all" rel="stylesheet" class="light-scheme"/> <link href="/stylesheets/desktop_ca0328f3c15e6bdcab41165f40d567681bececef.css?__ws=discourse.ubuntu.com" media="all" rel="stylesheet" data-target="desktop" /> <link href="/stylesheets/checklist_ca0328f3c15e6bdcab41165f40d567681bececef.css?__ws=discourse.ubuntu.com" media="all" rel="stylesheet" data-target="checklist" /> <link href="/stylesheets/discourse-calendar_ca0328f3c15e6bdcab41165f40d567681bececef.css?__ws=discourse.ubuntu.com" media="all" rel="stylesheet" data-target="discourse-calendar" /> <link href="/stylesheets/discourse-data-explorer_ca0328f3c15e6bdcab41165f40d567681bececef.css?__ws=discourse.ubuntu.com" media="all" rel="stylesheet" data-target="discourse-data-explorer" /> <link href="/stylesheets/discourse-details_ca0328f3c15e6bdcab41165f40d567681bececef.css?__ws=discourse.ubuntu.com" media="all" rel="stylesheet" data-target="discourse-details" /> <link href="/stylesheets/discourse-gamification_ca0328f3c15e6bdcab41165f40d567681bececef.css?__ws=discourse.ubuntu.com" media="all" rel="stylesheet" data-target="discourse-gamification" /> <link href="/stylesheets/discourse-lazy-videos_ca0328f3c15e6bdcab41165f40d567681bececef.css?__ws=discourse.ubuntu.com" media="all" rel="stylesheet" data-target="discourse-lazy-videos" /> <link href="/stylesheets/discourse-local-dates_ca0328f3c15e6bdcab41165f40d567681bececef.css?__ws=discourse.ubuntu.com" media="all" rel="stylesheet" data-target="discourse-local-dates" /> <link href="/stylesheets/discourse-narrative-bot_ca0328f3c15e6bdcab41165f40d567681bececef.css?__ws=discourse.ubuntu.com" media="all" rel="stylesheet" data-target="discourse-narrative-bot" /> <link href="/stylesheets/discourse-presence_ca0328f3c15e6bdcab41165f40d567681bececef.css?__ws=discourse.ubuntu.com" media="all" rel="stylesheet" data-target="discourse-presence" /> <link href="/stylesheets/discourse-solved_ca0328f3c15e6bdcab41165f40d567681bececef.css?__ws=discourse.ubuntu.com" media="all" rel="stylesheet" data-target="discourse-solved" /> <link href="/stylesheets/discourse-templates_ca0328f3c15e6bdcab41165f40d567681bececef.css?__ws=discourse.ubuntu.com" media="all" rel="stylesheet" data-target="discourse-templates" /> <link href="/stylesheets/markdown-note_ca0328f3c15e6bdcab41165f40d567681bececef.css?__ws=discourse.ubuntu.com" media="all" rel="stylesheet" data-target="markdown-note" /> <link href="/stylesheets/poll_ca0328f3c15e6bdcab41165f40d567681bececef.css?__ws=discourse.ubuntu.com" media="all" rel="stylesheet" data-target="poll" /> <link href="/stylesheets/spoiler-alert_ca0328f3c15e6bdcab41165f40d567681bececef.css?__ws=discourse.ubuntu.com" media="all" rel="stylesheet" data-target="spoiler-alert" /> <link href="/stylesheets/discourse-calendar_desktop_ca0328f3c15e6bdcab41165f40d567681bececef.css?__ws=discourse.ubuntu.com" media="all" rel="stylesheet" data-target="discourse-calendar_desktop" /> <link href="/stylesheets/discourse-gamification_desktop_ca0328f3c15e6bdcab41165f40d567681bececef.css?__ws=discourse.ubuntu.com" media="all" rel="stylesheet" data-target="discourse-gamification_desktop" /> <link href="/stylesheets/poll_desktop_ca0328f3c15e6bdcab41165f40d567681bececef.css?__ws=discourse.ubuntu.com" media="all" rel="stylesheet" data-target="poll_desktop" /> <link href="/stylesheets/desktop_theme_51_3618fb4255806e97c9b9e1faa6ccc5d4029f5e5b.css?__ws=discourse.ubuntu.com" media="all" rel="stylesheet" data-target="desktop_theme" data-theme-id="51" data-theme-name="discotoc"/> <link href="/stylesheets/desktop_theme_50_61357ff8a1e12ac7fcad6b74566fe569f67101d5.css?__ws=discourse.ubuntu.com" media="all" rel="stylesheet" data-target="desktop_theme" data-theme-id="50" data-theme-name="discourse cookie policy"/> <link href="/stylesheets/desktop_theme_10_9580173011171922db555275ad11ec5b22663414.css?__ws=discourse.ubuntu.com" media="all" rel="stylesheet" data-target="desktop_theme" data-theme-id="10" data-theme-name="ubuntu discourse"/> <link href="/stylesheets/desktop_theme_2_580b90f56065bcedde51e40cfdc741ff0221c030.css?__ws=discourse.ubuntu.com" media="all" rel="stylesheet" data-target="desktop_theme" data-theme-id="2" data-theme-name="default"/> <link href="https://fonts.googleapis.com/css?family=Ubuntu:100,300,400" rel="stylesheet"> <style> body { font-family: 'Ubuntu', sans-serif; font-weight: 400; } h1 { font-weight: 100; } </style> <meta name="google-site-verification" content="grFP-bTinUn8jXfEmhZCV8ccDV1IJG2wexOuguu7z_M"> <script defer="" src="/theme-javascripts/f7a737190fe36b9aee0dd740a1ddde023af282d4.js?__ws=discourse.ubuntu.com" data-theme-id="2" nonce="frmZVkMjXJYhyF7gQKp6IyyRy"></script> <link href="https://fonts.googleapis.com/css?family=Ubuntu:100,400,700" rel="stylesheet" type="text/css"> <script defer="" src="/theme-javascripts/5fd6ab93349b47da044725d430da846ba195a894.js?__ws=discourse.ubuntu.com" data-theme-id="15" nonce="frmZVkMjXJYhyF7gQKp6IyyRy"></script> <link rel="alternate nofollow" type="application/rss+xml" title="RSS feed of &#39;How to install Landscape manually&#39;" href="https://discourse.ubuntu.com/t/how-to-install-landscape-manually/23085.rss" /> <meta property="og:site_name" content="Ubuntu Community Hub" /> <meta property="og:type" content="website" /> <meta name="twitter:card" content="summary" /> <meta property="og:image" content="https://ubuntucommunity.s3.us-east-2.amazonaws.com/original/3X/9/0/905b15b7d477513b2af0668c333736b100eef109.svg" /> <meta property="og:url" content="https://discourse.ubuntu.com/t/how-to-install-landscape-manually/23085" /> <meta name="twitter:url" content="https://discourse.ubuntu.com/t/how-to-install-landscape-manually/23085" /> <meta property="og:title" content="How to install Landscape manually" /> <meta name="twitter:title" content="How to install Landscape manually" /> <meta property="og:description" content="Note: If you have an Ubuntu Pro subscription, we recommend you attach your Pro token for easy access to your Pro services. For more information, see how to attach your Ubuntu Pro subscription and how to enable Landscape in the Ubuntu Pro Client. This is the baseline deployment recommendation we have for Landscape Server when Juju is not used. At a minimum, you need two machines: the database server and application server. For a manual installation of Landscape 24.04 LTS: Database server:..." /> <meta name="twitter:description" content="Note: If you have an Ubuntu Pro subscription, we recommend you attach your Pro token for easy access to your Pro services. For more information, see how to attach your Ubuntu Pro subscription and how to enable Landscape in the Ubuntu Pro Client. This is the baseline deployment recommendation we have for Landscape Server when Juju is not used. At a minimum, you need two machines: the database server and application server. For a manual installation of Landscape 24.04 LTS: Database server:..." /> <meta property="og:article:section" content="Documentation" /> <meta property="og:article:section:color" content="729FCF" /> <meta property="og:article:section" content="Landscape Docs" /> <meta property="og:article:section:color" content="0088CC" /> <meta name="twitter:label1" value="Reading time" /> <meta name="twitter:data1" value="9 mins 🕑" /> <meta name="twitter:label2" value="Likes" /> <meta name="twitter:data2" value="7 ❤" /> <meta property="article:published_time" content="2025-01-09T22:41:19+00:00" /> <meta property="og:ignore_canonical" content="true" /> <script type="application/ld+json">{"@context":"http://schema.org","@type":"QAPage","name":"How to install Landscape manually","mainEntity":{"@type":"Question","name":"How to install Landscape manually","text":"Note: If you have an Ubuntu Pro subscription, we recommend you attach your Pro token for easy access to your Pro services. For more information, see <a href=\"/t/46800\">how to attach your Ubuntu Pro subscription<\/a> and <a href=\"/t/46870\">how to enable Landscape in the Ubuntu Pro Client<\/a>.\n\nThis is the baseline deployment recommendation we&hellip;","upvoteCount":0,"answerCount":0,"datePublished":"2021-07-02T13:08:57.200Z","author":{"@type":"Person","name":"yanisa-hs","url":"https://discourse.ubuntu.com/u/yanisa-hs"}}}</script> </head> <body class="crawler browser-update"> <nav class="p-navigation--secondary"> <div class="u-fixed-width"> <a class="p-navigation--secondary__banner" href="/"> <h5 class="p-navigation--secondary__logo"> Discourse </h5> </a> </div> </nav> <header> <a href="/"> Ubuntu Community Hub </a> </header> <div id="main-outlet" class="wrap" role="main"> <div id="topic-title"> <h1> <a href="/t/how-to-install-landscape-manually/23085">How to install Landscape manually</a> </h1> <div class="topic-category" itemscope itemtype="http://schema.org/BreadcrumbList"> <span itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"> <a href="/c/documentation/landscape-docs/90" class="badge-wrapper bullet" itemprop="item"> <span class='badge-category-bg' style='background-color: #729FCF'></span> <span class='badge-category clear-badge'> <span class='category-name' itemprop='name'>Documentation</span> </span> </a> <meta itemprop="position" content="1" /> </span> <span itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"> <a href="/c/documentation/landscape-docs/90" class="badge-wrapper bullet" itemprop="item"> <span class='badge-category-bg' style='background-color: #0088CC'></span> <span class='badge-category clear-badge'> <span class='category-name' itemprop='name'>Landscape Docs</span> </span> </a> <meta itemprop="position" content="2" /> </span> </div> </div> <div itemscope itemtype='http://schema.org/DiscussionForumPosting'> <meta itemprop='headline' content='How to install Landscape manually'> <link itemprop='url' href='https://discourse.ubuntu.com/t/how-to-install-landscape-manually/23085'> <meta itemprop='datePublished' content='2021-07-02T13:08:57Z'> <meta itemprop='articleSection' content='Landscape Docs'> <meta itemprop='keywords' content=''> <div itemprop='publisher' itemscope itemtype="http://schema.org/Organization"> <meta itemprop='name' content='Canonical Inc.'> <div itemprop='logo' itemscope itemtype="http://schema.org/ImageObject"> <meta itemprop='url' content='https://ubuntucommunity.s3.us-east-2.amazonaws.com/original/3X/d/1/d1318a905da7b730a81d0b3f393762cb7d478e38.svg'> </div> </div> <div id='post_1' class='topic-body crawler-post'> <div class='crawler-post-meta'> <span class="creator" itemprop="author" itemscope itemtype="http://schema.org/Person"> <a itemprop="url" href='https://discourse.ubuntu.com/u/yanisa-hs'><span itemprop='name'>yanisa-hs</span></a> </span> <link itemprop="mainEntityOfPage" href="https://discourse.ubuntu.com/t/how-to-install-landscape-manually/23085"> <span class="crawler-post-infos"> <time datetime='2021-07-02T13:08:57Z' class='post-time'> July 2, 2021, 1:08pm </time> <meta itemprop='dateModified' content='2025-01-09T22:41:19Z'> <span itemprop='position'>1</span> </span> </div> <div class='post' itemprop='text'> <div class="p-notification"> <div class="p-notification__response"> <p><strong>Note:</strong> If you have an Ubuntu Pro subscription, we recommend you attach your Pro token for easy access to your Pro services. For more information, see <a href="/t/46800">how to attach your Ubuntu Pro subscription</a> and <a href="/t/46870">how to enable Landscape in the Ubuntu Pro Client</a>.</p> </div> </div> <p>This is the baseline deployment recommendation we have for Landscape Server when Juju is not used. At a minimum, you need two machines: the database server and application server.</p> <p>For a manual installation of Landscape 24.04 LTS:</p> <ul> <li><strong>Database server</strong>: runs Ubuntu 22.04 LTS (“jammy”) or Ubuntu 24.04 (“noble”), with the versions of PostgreSQL that are in the Ubuntu archives for Jammy and Noble. Jammy uses PostgreSQL 14 and Noble uses PostgreSQL 16.</li> <li><strong>Application server</strong>: runs Ubuntu 22.04 LTS (“jammy”) or Ubuntu 24.04 (“noble”) and hosts the Landscape services</li> </ul> <p>This is a long document. If you want a quick installation that just works, but doesn’t scale to a large number of machines, then install the <code>landscape-server-quickstart</code> package. For more information, visit <a href="https://ubuntu.com/landscape/docs/quickstart-deployment">how to install Landscape Server with quickstart mode</a>.</p> <p><strong>Contents:</strong></p> <ul> <li><a href="#heading--prepare-for-the-installation">Prepare for the installation</a></li> <li><a href="#heading--install-the-database-server">Install the database server</a> <ol> <li><a href="#heading--install-postgresql-and-required-libraries">Install PostgreSQL and required libraries</a></li> <li><a href="#heading--create-a-superuser-Landscape-can-use">Create a superuser Landscape can use</a></li> <li><a href="#heading--configure-postgresql">Configure PostgreSQL</a></li> <li><a href="#heading--tune-postgresql">Tune PostgreSQL</a> <ul> <li><a href="#heading--landscape-specific-tips-for-tuning-postgresql">Landscape-specific tips for tuning PostgreSQL</a></li> </ul> </li> </ol> </li> <li><a href="#heading--install-the-application-server">Install the application server</a> <ol> <li><a href="#heading--add-the-landscape-package-archive">Add the Landscape package archive</a></li> <li><a href="#heading--install-the-server-package">Install the server package</a></li> <li><a href="#heading--install-the-license-file">Install the license file</a></li> <li><a href="#heading--configure-rabbitmq">Configure rabbitmq</a></li> <li><a href="#heading--configure-database-and-broker-access">Configure database and broker access</a></li> <li><a href="#heading--run-the-landscape-setup-script">Run the Landscape setup script</a></li> <li><a href="#heading--configure-landscape-services-and-schema-upgrades">Configure Landscape services and schema upgrades</a></li> <li><a href="#heading--configure-web-server">Configure web server</a></li> <li><a href="#heading--start-landscape-services">Start Landscape services</a></li> <li><a href="#heading--create-the-first-user">Create the first user</a></li> <li><a href="#heading--configure-the-first-client">Configure the first client</a></li> <li><a href="#heading--add-an-email-alias">(Optional) Add an email alias</a></li> </ol> </li> </ul> <p><a href="#heading--prepare-for-the-installation"></a></p><h1 id="heading--prepare-for-the-installation"><a href="#heading--prepare-for-the-installation">Prepare for the installation</a></h1><p></p> <p>What you will need:</p> <ul> <li>Ubuntu server install media for the version of Ubuntu you’re using</li> <li>An Ubuntu Pro subscription</li> <li>Server X509 certificate and key, signed by a publicly known Certificate Authority, and issued for the FQDN hostname of the application server.</li> <li>Custom (internal) CAs can be used, but this process isn’t documented here in depth because many parts of that process take place outside of Landscape. Administrators deploying custom CAs generally know what needs to be done, but there is some guidance throughout this document.</li> </ul> <p><a href="#heading--install-the-database-server"></a></p><h1 id="heading--install-the-database-server"><a href="#heading--install-the-database-server">Install the database server</a></h1><p></p> <p>After having installed the basic server profile of Ubuntu Server, we need to install the PostgreSQL database and configure it for use by Landscape. Please follow these steps:</p> <p><a href="#heading--install-postgresql-and-required-libraries"></a></p><h2 id="heading--install-postgresql-and-required-libraries"><a href="#heading--install-postgresql-and-required-libraries">Install PostgreSQL and required libraries</a></h2><p></p> <p>Run one of the following commands to install the database software.</p> <p>For an Ubuntu 22.04 (“jammy”) database server:</p> <pre><code class="lang-auto">sudo apt install postgresql postgresql-14-debversion postgresql-plpython3-14 postgresql-contrib </code></pre> <p>For an Ubuntu 24.04 (“noble”) database server:</p> <pre><code class="lang-auto">sudo apt install postgresql postgresql-16-debversion postgresql-plpython3-16 postgresql-contrib </code></pre> <p><a href="#heading--create-a-superuser-Landscape-can-use"></a></p><h2 id="heading--create-a-superuser-Landscape-can-use"><a href="#heading--create-a-superuser-Landscape-can-use">Create a superuser Landscape can use</a></h2><p></p> <p>Landscape needs a database superuser in order to create the lower privilege users it needs to perform routine tasks and access the data, as well as alter the database schema whenever needed:</p> <pre><code class="lang-auto">sudo -u postgres createuser --createdb --createrole --superuser --pwprompt landscape_superuser </code></pre> <p>You should use a strong password.</p> <div class="p-notification"> <div class="p-notification__response"> <p><strong>Warning!</strong> Do not use an <code>@</code> symbol in the password.</p> </div> </div> <p>If this database is to be shared with other services, it’s recommended that another cluster is created instead for those services (or for Landscape). Please refer to the PostgreSQL documentation in that case.</p> <p><a href="#heading--configure-postgresql"></a></p><h2 id="heading--configure-postgresql"><a href="#heading--configure-postgresql">Configure PostgreSQL</a></h2><p></p> <p>We now need to allow the application server to access this database server. Landscape uses several users for this access, so we need to allow them all. Edit the <code>/etc/postgresql/&lt;version&gt;/main/pg_hba.conf</code> file (where <code>&lt;version&gt;</code> is the installed version of postgres for example <code>/etc/postgresql/12/...</code>) and add the following to the end:</p> <pre><code class="lang-auto">host all landscape,landscape_maintenance,landscape_superuser &lt;IP-OF-APP&gt; md5 </code></pre> <p>Replace <code>&lt;IP-OF-APP&gt;</code> with the IP address of the application server, followed by <code>/32</code>. Alternatively, you can specify the network address using the CIDR notation. Some examples of valid values:</p> <ul> <li><code>192.168.122.199/32</code>: the IP address of the APP server</li> <li><code>192.168.122.0/24</code>: a network address</li> </ul> <p>Now come changes to the main PostgreSQL configuration file. Edit <code>/etc/postgresql/&lt;version&gt;/main/postgresql.conf</code> and:</p> <ul> <li>Find the <code>listen_addresses</code> parameter, which is probably commented, and change it to:</li> </ul> <pre><code class="lang-auto">listen_addresses = '*' </code></pre> <ul> <li>Set <code>max_prepared_transactions</code> to the same value as <code>max_connections</code>. For example:</li> </ul> <pre><code class="lang-auto">max_connections = 400 ... max_prepared_transactions = 400 </code></pre> <p>Finally, restart the database service:</p> <pre><code class="lang-auto">sudo systemctl restart postgresql </code></pre> <p><a href="#heading--tune-postgresql"></a></p><h2 id="heading--tune-postgresql"><a href="#heading--tune-postgresql">Tune PostgreSQL</a></h2><p></p> <p>It is strongly recommended to fine tune this PostgreSQL installation according to the hardware of the server. Keeping the default settings (especially of <code>max_connections</code>) is known to be problematic. For more information, visit <a href="http://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server">PostgreSQL’s guide on tuning your PostgreSQL server</a>.</p> <p><a href="#heading--landscape-specific-tips-for-tuning-postgresql"></a></p><h3 id="heading--landscape-specific-tips-for-tuning-postgresql"><a href="#heading--landscape-specific-tips-for-tuning-postgresql">Landscape-specific tips for tuning PostgreSQL</a></h3><p></p> <p>The following parameters at a minimum should be touched:</p> <ul> <li><a href="http://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-SHARED-BUFFERS"><code>shared_buffers</code></a></li> <li><a href="https://www.postgresql.org/docs/current/runtime-config-query.html#GUC-EFFECTIVE-CACHE-SIZE"><code>effective_cache_size</code></a></li> <li><a href="http://www.postgresql.org/docs/current/runtime-config-wal.html#GUC-WAL-BUFFERS"><code>wal_buffers</code></a></li> <li><a href="https://www.postgresql.org/docs/15/runtime-config-connection.html#GUC-MAX-CONNECTIONS"><code>max_connections</code></a></li> </ul> <p>A good starting value for <code>max_connections</code> is 200, even on modest hardware. As your needs grow, this number should be adjusted and re-evaluated carefully. It may be helpful to use a tuning tool like <a href="https://pgtune.leopard.in.ua/">pgtune</a>.</p> <p>When you adjust <code>max_connections</code>, you are likely to overrun shared memory allowed by the kernel (per process) and may need to increase the <a href="https://www.postgresql.org/docs/current/kernel-resources.html#SYSVIPC"><code>SHMMAX</code></a> parameter.</p> <p>If the tuning changed the value of <code>max_connections</code>, make sure you also change <code>max_prepared_transactions</code> to the same value.</p> <p><a href="#heading--install-the-application-server"></a></p><h1 id="heading--install-the-application-server"><a href="#heading--install-the-application-server">Install the application server</a></h1><p></p> <p>The application server will host the following Landscape services:</p> <ul> <li>application server</li> <li>message server</li> <li>ping server</li> <li>job handler</li> <li>async-frontend</li> <li>combo loader</li> <li>api server</li> <li>package upload service</li> <li>package search</li> </ul> <p>Additionally, other services needed by Landscape will also be running on this machine, such as:</p> <ul> <li>apache</li> <li>rabbitmq-server</li> </ul> <p><a href="#heading--add-the-landscape-package-archive"></a></p><h2 id="heading--add-the-landscape-package-archive"><a href="#heading--add-the-landscape-package-archive">Add the Landscape package archive</a></h2><p></p> <p>Landscape is distributed in a public PPA. You can add it to the system with these commands, replacing <code>{LANDSCAPE_PPA}</code> with the appropriate repository:</p> <pre><code class="lang-auto">sudo add-apt-repository {LANDSCAPE_PPA} sudo apt-get update </code></pre> <ul> <li><code>{LANDSCAPE_PPA}</code>: The PPA for the specific Landscape installation you’re using. The PPA for the most recent Landscape LTS is: <code>ppa:landscape/self-hosted-24.04</code>. The PPA for Landscape’s stable rolling release is: <code>ppa:landscape/latest-stable</code>. We recommend using an LTS for production deployments.</li> </ul> <p><a href="#heading--install-the-server-package"></a></p><h2 id="heading--install-the-server-package"><a href="#heading--install-the-server-package">Install the server package</a></h2><p></p> <p>Install the server package and its dependencies:</p> <pre><code class="lang-auto">sudo apt-get install landscape-server rabbitmq-server apache2 </code></pre> <p><a href="#heading--install-the-license-file"></a></p><h2 id="heading--install-the-license-file"><a href="#heading--install-the-license-file">Install the license file</a></h2><p></p> <p>If you were given a license file, copy it to <code>/etc/landscape/license.d</code>:</p> <pre><code class="lang-auto">sudo cp license.txt /etc/landscape/license.d </code></pre> <p>Make sure it’s readable by the <code>landscape</code> user and root.</p> <p>If you have no such file, Landscape will manage machines with Ubuntu Pro subscriptions associated with them.</p> <p><a href="#heading--configure-rabbitmq"></a></p><h2 id="heading--configure-rabbitmq"><a href="#heading--configure-rabbitmq">Configure rabbitmq</a></h2><p></p> <div class="p-notification"> <div class="p-notification__response"> <p>If you’re installing Landscape on Jammy 22.04 or later, you may want to change the default timeout of 30 minutes in RabbitMQ. For more information, see <a href="/t/43162">how to configure RabbitMQ for Jammy 22.04 or later</a>.</p> </div> </div> <p>Just run the following commands, replacing <code>&lt;password&gt;</code> with a password of your choice. It will be needed later.</p> <pre><code class="lang-auto">sudo rabbitmqctl add_user landscape &lt;password&gt; sudo rabbitmqctl add_vhost landscape sudo rabbitmqctl set_permissions -p landscape landscape ".*" ".*" ".*" sudo rabbitmqctl add_vhost landscape-hostagent sudo rabbitmqctl set_permissions -p landscape-hostagent landscape ".*" ".*" ".*" </code></pre> <p>To make rabbitmq listen only on the loopback interface (127.0.0.1), edit the file <code>/etc/rabbitmq/rabbitmq-env.conf</code> with the following content:</p> <pre><code class="lang-auto">NODE_IP_ADDRESS=127.0.0.1 </code></pre> <p>Then restart it:</p> <pre><code class="lang-auto">sudo systemctl restart rabbitmq-server </code></pre> <p><a href="#heading--configure-database-and-broker-access"></a></p><h2 id="heading--configure-database-and-broker-access"><a href="#heading--configure-database-and-broker-access">Configure database and broker access</a></h2><p></p> <p>We now need to make some configuration changes to the <code>/etc/landscape/service.conf</code> file to tell Landscape how to use some other services:</p> <p>Please make the following changes:</p> <p>Section <code>[stores]</code>:</p> <ul> <li><code>host</code>: the IP or hostname of the database server. If not the default PostgreSQL port (5432), add a :NNNN port definition after the hostname (e.g., 10.0.1.5:3232)</li> <li>Ensure a strong password is set for user landscape (this differs from landscape_superuser password from earlier and will be created when setup script is executed)</li> </ul> <p>Section <code>[broker]</code>:</p> <ul> <li>Replace the <code>password</code> value with the password chosen above when configuring rabbitmq</li> </ul> <p>Section <code>[schema]</code>:</p> <ul> <li>Change the value of <code>store_user</code> to the landscape super user we created above during the DB installation</li> <li>Add an entry for <code>store_password</code> with the password that was chosen in that same step</li> </ul> <p>Section <code>[landscape]</code>:</p> <ul> <li>Add an entry for <code>secret-token</code> and set it as a random string. You can set any string you want, but it should be reasonably long. You can use <code>openssl</code> to create a random string. For example, <code>openssl rand -base64 128 | tr -d '\n'</code>.</li> </ul> <p><a href="#heading--run-the-landscape-setup-script"></a></p><h2 id="heading--run-the-landscape-setup-script"><a href="#heading--run-the-landscape-setup-script">Run the Landscape setup script</a></h2><p></p> <p>This script will bootstrap the databases Landscape needs to work and setup the remaining of the configuration:</p> <pre><code class="lang-auto">sudo setup-landscape-server </code></pre> <div class="p-notification"> <div class="p-notification__response"> <p>Depending on the hardware, this may take several minutes to complete</p> </div> </div> <p><a href="#heading--configure-landscape-services-and-schema-upgrades"></a></p><h2 id="heading--configure-landscape-services-and-schema-upgrades"><a href="#heading--configure-landscape-services-and-schema-upgrades">Configure Landscape services and schema upgrades</a></h2><p></p> <p>We need to enable the Landscape services now. Please edit <code>/etc/default/landscape-server</code> and change the <code>RUN_ALL</code> line to <code>yes</code>:</p> <pre><code class="lang-auto"># To run all Landscape services set this to "yes" RUN_ALL="yes" </code></pre> <div class="p-notification"> <div class="p-notification__response"> <p>If more performance and availability are needed out of Landscape Server, it’s possible to spread out the services amongst several machines. In that case, for example, one could run message servers in one machine, application servers in another one, etc.</p> </div> </div> <p>The message, application and ping services can be configured to run multiple instances. If your hardware has several cores and enough memory (4Gb or more), running two or more of each will improve performance. To run multiple instances of a service, just set the value in the respective <code>RUN_</code> line to the number of instances. For example, if you want to run two message servers, just set:</p> <pre><code class="lang-auto">RUN_MSGSERVER="2" </code></pre> <div class="p-notification"> <div class="p-notification__response"> <p>In order to take advantage of this multiple-instances setting, you need to configure some sort of load balancer or proxy. See the <code>README.multiple-services</code> file in the <code>landscape-server</code> package documentation directory for an example using Apache’s <code>proxy_loadbalancer</code> module.</p> </div> </div> <p>In that same file, the <code>UPGRADE_SCHEMA</code> option needs to be reviewed. If set to <code>yes</code>, whenever the package <code>landscape-server</code> is updated it will attempt to update the database schema too. It is a very convenient setting, but please think about the following before enabling it:</p> <ul> <li>schema updates can take several minutes</li> <li>if the package is updated while the database is offline, or unreachable, the update will fail</li> <li>you should have a backup of the database before updating the package</li> </ul> <p>Without this setting enabled, a package update might result in services that won’t start anymore because of a needed schema change. In that case:</p> <ul> <li>stop all the Landscape services</li> <li>backup your database</li> <li>Update the schema on the application server:</li> </ul> <pre><code class="lang-auto">sudo setup-landscape-server </code></pre> <ul> <li>start all Landscape services again</li> </ul> <p><a href="#heading--configure-web-server"></a></p><h2 id="heading--configure-web-server"><a href="#heading--configure-web-server">Configure web server</a></h2><p></p> <p>Landscape uses Apache to, among other things, redirect requests to each service and provide SSL support. The usual way to do this in Ubuntu is to create a Virtual Host for Landscape.</p> <p>Below is a suggested configuration file that does just that. Install it as <code>/etc/apache2/sites-available/landscape.conf</code> and change the following values:</p> <ul> <li><code>@hostname@</code>: the FQDN of the hostname the clients (browser and machines) will use to connect to Landscape Server. This is what will be in the URL, and it needs to be resolvable via DNS. For example, <code>lds.example.com</code></li> <li><code>@certfile@</code>: the full filesystem path to where the SSL certificate for this server is installed. For example, <code>/etc/ssl/certs/landscape_server.pem</code></li> <li><code>@keyfile@</code>: the full filesystem path to where the corresponding private key of that certificate is installed. For example, <code>/etc/ssl/private/landscape_server.key</code></li> </ul> <p>If you are using a custom certificate authority for your SSL certificate, then you <strong>MUST</strong> put the CA public certificate in the file <code>/etc/ssl/certs/landscape_server_ca.crt</code> and uncomment the <code>SSLCertificateChainFile /etc/ssl/certs/landscape_server_ca.crt</code> line.</p> <p>Make sure the user apache runs as can read those files! Also, make sure the private key can only be read by root and that same apache user.</p> <pre><code class="lang-auto">&lt;VirtualHost *:80&gt; # This Hostname is the HTTP/1.1 hostname that users and Landscape clients will access # It must be the same as your SSL Certificate's CommonName # And the DNS Hostname for this machine # It is not recommended that you use an IP address here... ServerName @hostname@ ServerAdmin webmaster@@hostname@ ErrorLog /var/log/apache2/landscape_error.log CustomLog /var/log/apache2/landscape_access.log combined DocumentRoot /opt/canonical/landscape/canonical/landscape # Set a Via header in outbound requests to the proxy, so proxied apps can # know who the actual client is ProxyVia on ProxyTimeout 10 &lt;Directory "/"&gt; Options +Indexes Order deny,allow Allow from all Require all granted Satisfy Any ErrorDocument 403 /offline/unauthorized.html ErrorDocument 404 /offline/notfound.html &lt;/Directory&gt; Alias /offline /opt/canonical/landscape/canonical/landscape/offline Alias /static /opt/canonical/landscape/canonical/static Alias /repository /var/lib/landscape/landscape-repository &lt;Location "/repository"&gt; Order deny,allow Deny from all ErrorDocument 403 default ErrorDocument 404 default &lt;/Location&gt; &lt;LocationMatch "/repository/[^/]+/[^/]+/(dists|pool)/.*"&gt; Allow from all &lt;/LocationMatch&gt; &lt;Location "/icons"&gt; Order allow,deny Allow from all &lt;/Location&gt; &lt;Location "/ping"&gt; Order allow,deny Allow from all &lt;/Location&gt; &lt;Location "/message-system"&gt; Order allow,deny Allow from all &lt;/Location&gt; &lt;Location "/static"&gt; Header always append X-Frame-Options SAMEORIGIN &lt;/Location&gt; &lt;Location "/r"&gt; FileETag none ExpiresActive on ExpiresDefault "access plus 10 years" Header append Cache-Control "public" &lt;/Location&gt; RewriteEngine On RewriteRule ^/r/([^/]+)/(.*) /$2 RewriteRule ^/ping$ http://localhost:8070/ping [P] RewriteCond %{REQUEST_URI} !^/icons RewriteCond %{REQUEST_URI} !^/static/ RewriteCond %{REQUEST_URI} !^/offline/ RewriteCond %{REQUEST_URI} !^/repository/ RewriteCond %{REQUEST_URI} !^/message-system # Replace the @hostname@ with the DNS hostname for this machine. # If you change the port number that Apache is providing SSL on, you must change the # port number 443 here. RewriteRule ^/(.*) https://@hostname@:443/$1 [R=permanent] &lt;/VirtualHost&gt; &lt;VirtualHost *:443&gt; ServerName @hostname@ ServerAdmin webmaster@@hostname@ ErrorLog /var/log/apache2/landscape_error.log CustomLog /var/log/apache2/landscape_access.log combined DocumentRoot /opt/canonical/landscape/canonical/landscape SSLEngine On SSLCertificateFile @certfile@ SSLCertificateKeyFile @keyfile@ # If you have either an SSLCertificateChainFile or, a self-signed CA signed certificate # uncomment the line below. # Note: Some versions of Apache will not accept the SSLCertificateChainFile directive. # Try using SSLCACertificateFile instead in that case. # SSLCertificateChainFile /etc/ssl/certs/landscape_server_ca.crt # Disable to avoid POODLE attack SSLProtocol all -SSLv3 -SSLv2 -TLSv1 SSLHonorCipherOrder On SSLCompression Off SSLCipherSuite EECDH+AESGCM+AES128:EDH+AESGCM+AES128:EECDH+AES128:EDH+AES128:ECDH+AESGCM+AES128:aRSA+AESGCM+AES128:ECDH+AES128:DH+AES128:aRSA+AES128:EECDH+AESGCM:EDH+AESGCM:EECDH:EDH:ECDH+AESGCM:aRSA+AESGCM:ECDH:DH:aRSA:HIGH:!MEDIUM:!aNULL:!NULL:!LOW:!3DES:!DSS:!EXP:!PSK:!SRP:!CAMELLIA:!DHE-RSA-AES128-SHA:!DHE-RSA-AES256-SHA:!aECDH # Try to keep this close to the storm timeout. Not less, maybe slightly # more ProxyTimeout 305 &lt;Directory "/"&gt; Options -Indexes Order deny,allow Allow from all Require all granted Satisfy Any ErrorDocument 403 /offline/unauthorized.html ErrorDocument 404 /offline/notfound.html &lt;/Directory&gt; &lt;Location "/ajax"&gt; Order allow,deny Allow from all &lt;/Location&gt; Alias /offline /opt/canonical/landscape/canonical/landscape/offline Alias /config /opt/canonical/landscape/apacheroot Alias /hash-id-databases /var/lib/landscape/hash-id-databases ProxyRequests off &lt;Proxy *&gt; Order deny,allow Allow from all ErrorDocument 403 /offline/unauthorized.html ErrorDocument 500 /offline/exception.html ErrorDocument 502 /offline/unplanned-offline.html ErrorDocument 503 /offline/unplanned-offline.html &lt;/Proxy&gt; ProxyPass /robots.txt ! ProxyPass /favicon.ico ! ProxyPass /offline ! ProxyPass /static ! ProxyPreserveHost on &lt;Location "/r"&gt; FileETag none ExpiresActive on ExpiresDefault "access plus 10 years" Header append Cache-Control "public" &lt;/Location&gt; &lt;Location "/static"&gt; Header always append X-Frame-Options SAMEORIGIN &lt;/Location&gt; RewriteEngine On RewriteRule ^/.*\+\+.* / [F] RewriteRule ^/r/([^/]+)/(.*) /$2 # See /etc/landscape/service.conf for a description of all the # Landscape services and the ports they run on. # Replace the @hostname@ with the DNS hostname for this machine. # If you change the port number that Apache is providing SSL on, you must change the # port number 443 here. RewriteRule ^/message-system http://localhost:8090/++vh++https:@hostname@:443/++/ [P,L] RewriteRule ^/ajax http://localhost:9090/ [P,L] RewriteRule ^/combo(.*) http://localhost:8080/combo$1 [P,L] RewriteRule ^/api/(.*) http://localhost:9080/api/$1 [P,L] RewriteRule ^/attachment/(.*) http://localhost:8090/attachment/$1 [P,L] RewriteRule ^/upload/(.*) http://localhost:9100/$1 [P,L] RewriteRule ^/(new_dashboard.*) http://localhost:8080/$1 [P,L] RewriteRule ^/(assets.*) http://localhost:8080/$1 [P,L] RewriteCond %{REQUEST_URI} !^/robots.txt$ RewriteCond %{REQUEST_URI} !^/favicon.ico$ RewriteCond %{REQUEST_URI} !^/offline/ RewriteCond %{REQUEST_URI} !^/(r/[^/]+/)?static/ RewriteCond %{REQUEST_URI} !^/config/ RewriteCond %{REQUEST_URI} !^/hash-id-databases/ # Replace the @hostname@ with the DNS hostname for this machine. # If you change the port number that Apache is providing SSL on, you must change the # port number 443 here. RewriteRule ^/(.*) http://localhost:8080/++vh++https:@hostname@:443/++/$1 [P] &lt;Location /message-system&gt; Order allow,deny Allow from all &lt;/Location&gt; &lt;Location /&gt; # Insert filter SetOutputFilter DEFLATE # Don't compress images or .debs SetEnvIfNoCase Request_URI \ \.(?:gif|jpe?g|png|deb)$ no-gzip dont-vary # Make sure proxies don't deliver the wrong content Header append Vary User-Agent env=!dont-vary &lt;/Location&gt; &lt;/VirtualHost&gt; Listen 6554 &lt;VirtualHost *:6554&gt; ServerName ${hostname} ServerAdmin webmaster@${hostname} ErrorLog /var/log/apache2/landscape_error.log CustomLog /var/log/apache2/landscape_access.log combined SSLEngine On SSLCertificateFile ${ssl_certificate_crt} SSLCertificateKeyFile ${ssl_certificate_key} # Disable to avoid POODLE attack SSLProtocol all -SSLv3 -SSLv2 -TLSv1 SSLHonorCipherOrder On SSLCompression Off SSLCipherSuite EECDH+AESGCM+AES128:EDH+AESGCM+AES128:EECDH+AES128:EDH+AES128:ECDH+AESGCM+AES128:aRSA+AESGCM+AES128:ECDH+AES128:DH+AES128:aRSA+AES128:EECDH+AESGCM:EDH+AESGCM:EECDH:EDH:ECDH+AESGCM:aRSA+AESGCM:ECDH:DH:aRSA:HIGH:!MEDIUM:!aNULL:!NULL:!LOW:!3DES:!DSS:!EXP:!PSK:!SRP:!CAMELLIA:!DHE-RSA-AES128-SHA:!DHE-RSA-AES256-SHA:!aECDH # If you have either an SSLCertificateChainFile or, a self-signed CA signed certificate # uncomment the line below. # Note: Some versions of Apache will not accept the SSLCertificateChainFile # directive. Try using SSLCACertificateFile instead # SSLCertificateChainFile /etc/ssl/certs/landscape_server_ca.crt ProxyPass / h2c://localhost:50051/ ProxyPassReverse / http://localhost:50051/ &lt;/VirtualHost&gt; </code></pre> <p>We now need to enable some modules:</p> <pre><code class="lang-auto">for module in rewrite proxy_http ssl headers expires proxy_http2; do sudo a2enmod $module; done </code></pre> <p>Unless you require it and take necessary steps to secure that endpoint, it is recommended to disable mod-status:</p> <pre><code class="lang-auto">sudo a2dismod status </code></pre> <p>Disable the default http vhost:</p> <pre><code class="lang-auto">sudo a2dissite 000-default </code></pre> <p>Finally we can enable the new site:</p> <pre><code class="lang-auto">sudo a2ensite landscape.conf sudo systemctl restart apache2.service </code></pre> <p><a href="#heading--start-landscape-services"></a></p><h2 id="heading--start-landscape-services"><a href="#heading--start-landscape-services">Start Landscape services</a></h2><p></p> <p>Just run the helper script <code>lsctl</code>:</p> <pre><code class="lang-auto">sudo lsctl restart </code></pre> <p><a href="#heading--create-the-first-user"></a></p><h2 id="heading--create-the-first-user"><a href="#heading--create-the-first-user">Create the first user</a></h2><p></p> <p>The first user that is created in Landscape automatically becomes the administrator of the “standalone” account. To create it, please go to https://&lt;servername&gt; and fill in the requested information.</p> <p><a href="#heading--configure-the-first-client"></a></p><h2 id="heading--configure-the-first-client"><a href="#heading--configure-the-first-client">Configure the first client</a></h2><p></p> <p>On the client machine, install <code>landscape-client</code>.</p> <pre><code class="lang-plaintext">sudo apt update &amp;&amp; sudo apt install -y landscape-client </code></pre> <p>If you are using the self-signed certificate on your Landscape Server, download your self-signed certificate from Landscape Server to the client machine with this command:</p> <pre><code class="lang-auto">echo -n | openssl s_client -connect LANDSCAPE-SERVER-IP:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | sudo tee /etc/landscape/server.pem </code></pre> <p>To configure the Landscape Client package, run:</p> <pre><code class="lang-auto">sudo landscape-config --computer-title "My First Computer" --account-name standalone --url https://&lt;servername&gt;/message-system --ping-url http://&lt;servername&gt;/ping </code></pre> <p>If you used a custom CA, you will need to pass the <code>--ssl-public-key</code> parameter pointing to the CA file so that the client can recognize the issuer of the server certificate.</p> <p>You can now accept your client in the Landscape UI, and it will begin to upload data.</p> <p><a href="#heading--add-an-email-alias"></a></p><h2 id="heading--add-an-email-alias"><a href="#heading--add-an-email-alias">(Optional) Add an email alias</a></h2><p></p> <p>You can configure Postfix to handle Landscape Server email notifications and alerts. To ensure that important system emails get attention, we recommend you also add an alias for Landscape on your local environment. For details, see <a href="/t/52978">how to configure Postfix for emails</a>.</p> </div> <div itemprop="interactionStatistic" itemscope itemtype="http://schema.org/InteractionCounter"> <meta itemprop="interactionType" content="http://schema.org/LikeAction"/> <meta itemprop="userInteractionCount" content="0" /> <span class='post-likes'></span> </div> <div class='crawler-linkback-list' itemscope itemtype='http://schema.org/ItemList'> <div itemprop='itemListElement' itemscope itemtype='http://schema.org/ListItem'> <a itemprop='url' href="https://discourse.ubuntu.com/t/upgrade-a-landscape-19-10-manual-installation-to-landscape-22-10-beta/33234">Upgrade a Landscape 19.10 Manual Installation to Landscape 22.10 Beta</a> <meta itemprop='position' content='13'> </div> <div itemprop='itemListElement' itemscope itemtype='http://schema.org/ListItem'> <a itemprop='url' href="https://discourse.ubuntu.com/t/landscape-how-to-guides/42219">Landscape how-to guides</a> <meta itemprop='position' content='14'> </div> <div itemprop='itemListElement' itemscope itemtype='http://schema.org/ListItem'> <a itemprop='url' href="https://discourse.ubuntu.com/t/upgrade-a-landscape-19-10-manual-installation-to-landscape-23-03/34335">Upgrade a Landscape 19.10 Manual Installation to Landscape 23.03</a> <meta itemprop='position' content='15'> </div> <div itemprop='itemListElement' itemscope itemtype='http://schema.org/ListItem'> <a itemprop='url' href="https://discourse.ubuntu.com/t/how-to-install-landscape-server-on-fips-compliant-machines/38960">How to install Landscape Server on FIPS-compliant machines</a> <meta itemprop='position' content='16'> </div> <div itemprop='itemListElement' itemscope itemtype='http://schema.org/ListItem'> <a itemprop='url' href="https://discourse.ubuntu.com/t/install-and-configure-landscape/45117">Install and Configure Landscape</a> <meta itemprop='position' content='17'> </div> <div itemprop='itemListElement' itemscope itemtype='http://schema.org/ListItem'> <a itemprop='url' href="https://discourse.ubuntu.com/t/about-self-hosted-landscape/23081">About self-hosted Landscape</a> <meta itemprop='position' content='18'> </div> <div itemprop='itemListElement' itemscope itemtype='http://schema.org/ListItem'> <a itemprop='url' href="https://discourse.ubuntu.com/t/landscape-documentation/23070">Landscape Documentation</a> <meta itemprop='position' content='19'> </div> </div> </div> <div id='post_2' itemprop='comment' itemscope itemtype='http://schema.org/Comment' class='topic-body crawler-post'> <div class='crawler-post-meta'> <span class="creator" itemprop="author" itemscope itemtype="http://schema.org/Person"> <a itemprop="url" href='https://discourse.ubuntu.com/u/Fastidious'><span itemprop='name'>Fastidious</span></a> </span> <span class="crawler-post-infos"> <time itemprop='datePublished' datetime='2021-12-13T22:00:29Z' class='post-time'> December 13, 2021, 10:00pm </time> <meta itemprop='dateModified' content='2021-12-13T22:00:29Z'> <span itemprop='position'>2</span> </span> </div> <div class='post' itemprop='text'> <p>It is covered on this entry that:</p> <blockquote> <p>If you are using a custom certificate authority for your SSL certificate, then you <strong>MUST</strong> put the CA public certificate in the file <code>/etc/ssl/certs/landscape_server_ca.crt</code> and uncomment the <code>SSLCertificateChainFile /etc/ssl/certs/landscape_server_ca.crt</code> line.</p> </blockquote> <p>A custom CA as opposite to a snake oil generated certificate? Could this be clarified? I am assuming most of us will want to use a valid certificate, and not an in-house generated one.</p> </div> <div itemprop="interactionStatistic" itemscope itemtype="http://schema.org/InteractionCounter"> <meta itemprop="interactionType" content="http://schema.org/LikeAction"/> <meta itemprop="userInteractionCount" content="0" /> <span class='post-likes'></span> </div> </div> <div id='post_3' itemprop='comment' itemscope itemtype='http://schema.org/Comment' class='topic-body crawler-post'> <div class='crawler-post-meta'> <span class="creator" itemprop="author" itemscope itemtype="http://schema.org/Person"> <a itemprop="url" href='https://discourse.ubuntu.com/u/rajanpatel'><span itemprop='name'>rajanpatel</span></a> </span> <span class="crawler-post-infos"> <time itemprop='datePublished' datetime='2022-10-06T03:13:29Z' class='post-time'> October 6, 2022, 3:13am </time> <meta itemprop='dateModified' content='2022-10-06T03:13:29Z'> <span itemprop='position'>3</span> </span> </div> <div class='post' itemprop='text'> <p>You don’t have to use a self signed certificate, or create a custom CA to use Landscape. Some organisations may prefer this, but you can install a valid SSL certificate from any provider into Landscape. You can even use LetsEncrypt, and use <a href="https://snapcraft.io/certbot">certbot</a> to simplify the installation.</p> <p>On the machine running the Apache web server, install certbot.</p> <pre><code class="lang-bash">sudo snap install --classic certbot </code></pre> <p>Then use certbot to obtain and install an SSL certificate for your FQDN: <a href="http://landscapebeta.yourdomain.com">landscapebeta.yourdomain.com</a></p> <pre><code class="lang-bash">sudo certbot --apache -d landscapebeta.yourdomain.com </code></pre> </div> <div itemprop="interactionStatistic" itemscope itemtype="http://schema.org/InteractionCounter"> <meta itemprop="interactionType" content="http://schema.org/LikeAction"/> <meta itemprop="userInteractionCount" content="0" /> <span class='post-likes'></span> </div> </div> <div id='post_4' itemprop='comment' itemscope itemtype='http://schema.org/Comment' class='topic-body crawler-post'> <div class='crawler-post-meta'> <span class="creator" itemprop="author" itemscope itemtype="http://schema.org/Person"> <a itemprop="url" href='https://discourse.ubuntu.com/u/svante-svedin-e'><span itemprop='name'>svante-svedin-e</span></a> </span> <span class="crawler-post-infos"> <time itemprop='datePublished' datetime='2024-03-15T11:10:18Z' class='post-time'> March 15, 2024, 11:10am </time> <meta itemprop='dateModified' content='2024-03-15T11:10:18Z'> <span itemprop='position'>4</span> </span> </div> <div class='post' itemprop='text'> <p>Hello and Good Job !</p> <p>One thing i miss in the manual installation guide is the postfix setup instructions. It would probably be helpful to have the similar instructions as in the quick start guide.</p> </div> <div itemprop="interactionStatistic" itemscope itemtype="http://schema.org/InteractionCounter"> <meta itemprop="interactionType" content="http://schema.org/LikeAction"/> <meta itemprop="userInteractionCount" content="2" /> <span class='post-likes'>2 Likes</span> </div> </div> <div id='post_5' itemprop='comment' itemscope itemtype='http://schema.org/Comment' class='topic-body crawler-post'> <div class='crawler-post-meta'> <span class="creator" itemprop="author" itemscope itemtype="http://schema.org/Person"> <a itemprop="url" href='https://discourse.ubuntu.com/u/yanisa-hs'><span itemprop='name'>yanisa-hs</span></a> </span> <span class="crawler-post-infos"> <time itemprop='datePublished' datetime='2024-03-18T16:27:46Z' class='post-time'> March 18, 2024, 4:27pm </time> <meta itemprop='dateModified' content='2024-03-18T16:27:46Z'> <span itemprop='position'>5</span> </span> </div> <div class='post' itemprop='text'> <p>Hey <a class="mention" href="/u/svante-svedin-e">@svante-svedin-e</a>, that is great feedback! I’ve added it to our to-do list <img src="https://discourse.ubuntu.com/images/emoji/twitter/slight_smile.png?v=12" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"> Thanks!!</p> </div> <div itemprop="interactionStatistic" itemscope itemtype="http://schema.org/InteractionCounter"> <meta itemprop="interactionType" content="http://schema.org/LikeAction"/> <meta itemprop="userInteractionCount" content="0" /> <span class='post-likes'></span> </div> </div> <div id='post_6' itemprop='comment' itemscope itemtype='http://schema.org/Comment' class='topic-body crawler-post'> <div class='crawler-post-meta'> <span class="creator" itemprop="author" itemscope itemtype="http://schema.org/Person"> <a itemprop="url" href='https://discourse.ubuntu.com/u/mikefrygm'><span itemprop='name'>mikefrygm</span></a> </span> <span class="crawler-post-infos"> <time itemprop='datePublished' datetime='2024-05-06T11:46:29Z' class='post-time'> May 6, 2024, 11:46am </time> <meta itemprop='dateModified' content='2024-05-06T11:46:29Z'> <span itemprop='position'>6</span> </span> </div> <div class='post' itemprop='text'> <p>Support for Postgres 15?</p> <p>In my org, Landscape is flagged because it using a deprecated version of Postgres. Can I easily upgrade to version 15?</p> </div> <div itemprop="interactionStatistic" itemscope itemtype="http://schema.org/InteractionCounter"> <meta itemprop="interactionType" content="http://schema.org/LikeAction"/> <meta itemprop="userInteractionCount" content="1" /> <span class='post-likes'>1 Like</span> </div> </div> <div id='post_7' itemprop='comment' itemscope itemtype='http://schema.org/Comment' class='topic-body crawler-post'> <div class='crawler-post-meta'> <span class="creator" itemprop="author" itemscope itemtype="http://schema.org/Person"> <a itemprop="url" href='https://discourse.ubuntu.com/u/yanisa-hs'><span itemprop='name'>yanisa-hs</span></a> </span> <span class="crawler-post-infos"> <time itemprop='datePublished' datetime='2024-05-06T16:26:17Z' class='post-time'> May 6, 2024, 4:26pm </time> <meta itemprop='dateModified' content='2024-05-06T16:26:17Z'> <span itemprop='position'>7</span> </span> </div> <div class='post' itemprop='text'> <p>Hey <a class="mention" href="/u/mikefrygm">@mikefrygm</a>! Yes, you should be able to use Postgres 15 with Landscape <img src="https://discourse.ubuntu.com/images/emoji/twitter/slight_smile.png?v=12" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"> We haven’t formally tested it but don’t foresee any issues.</p> </div> <div itemprop="interactionStatistic" itemscope itemtype="http://schema.org/InteractionCounter"> <meta itemprop="interactionType" content="http://schema.org/LikeAction"/> <meta itemprop="userInteractionCount" content="0" /> <span class='post-likes'></span> </div> </div> <div id='post_8' itemprop='comment' itemscope itemtype='http://schema.org/Comment' class='topic-body crawler-post'> <div class='crawler-post-meta'> <span class="creator" itemprop="author" itemscope itemtype="http://schema.org/Person"> <a itemprop="url" href='https://discourse.ubuntu.com/u/rajanpatel'><span itemprop='name'>rajanpatel</span></a> </span> <span class="crawler-post-infos"> <time itemprop='datePublished' datetime='2024-05-06T22:08:32Z' class='post-time'> May 6, 2024, 10:08pm </time> <meta itemprop='dateModified' content='2024-05-06T22:08:32Z'> <span itemprop='position'>8</span> </span> </div> <div class='post' itemprop='text'> <p>To further clarify, Landscape Engineers have tested this with PostgreSQL on Ubuntu 24.04 LTS, which ships with PostgreSQL 16 according to: <a href="https://packages.ubuntu.com/noble/postgresql" class="inline-onebox">Ubuntu – Details of package postgresql in noble</a></p> </div> <div itemprop="interactionStatistic" itemscope itemtype="http://schema.org/InteractionCounter"> <meta itemprop="interactionType" content="http://schema.org/LikeAction"/> <meta itemprop="userInteractionCount" content="0" /> <span class='post-likes'></span> </div> </div> <div id='post_9' itemprop='comment' itemscope itemtype='http://schema.org/Comment' class='topic-body crawler-post'> <div class='crawler-post-meta'> <span class="creator" itemprop="author" itemscope itemtype="http://schema.org/Person"> <a itemprop="url" href='https://discourse.ubuntu.com/u/mikefrygm'><span itemprop='name'>mikefrygm</span></a> </span> <span class="crawler-post-infos"> <time itemprop='datePublished' datetime='2024-05-07T11:15:36Z' class='post-time'> May 7, 2024, 11:15am </time> <meta itemprop='dateModified' content='2024-05-07T11:15:36Z'> <span itemprop='position'>9</span> </span> </div> <div class='post' itemprop='text'> <p>Thank you. We are using Ubuntu 22.04.</p> </div> <div itemprop="interactionStatistic" itemscope itemtype="http://schema.org/InteractionCounter"> <meta itemprop="interactionType" content="http://schema.org/LikeAction"/> <meta itemprop="userInteractionCount" content="0" /> <span class='post-likes'></span> </div> </div> <div id='post_10' itemprop='comment' itemscope itemtype='http://schema.org/Comment' class='topic-body crawler-post'> <div class='crawler-post-meta'> <span class="creator" itemprop="author" itemscope itemtype="http://schema.org/Person"> <a itemprop="url" href='https://discourse.ubuntu.com/u/rajanpatel'><span itemprop='name'>rajanpatel</span></a> </span> <span class="crawler-post-infos"> <time itemprop='datePublished' datetime='2024-05-11T21:56:53Z' class='post-time'> May 11, 2024, 9:56pm </time> <meta itemprop='dateModified' content='2024-05-11T21:56:53Z'> <span itemprop='position'>10</span> </span> </div> <div class='post' itemprop='text'> <p>To echo Yanisa’s response, it should work, but you wouldn’t be able to obtain the PostgreSQL 15 package from Canonical. Ubuntu 22.04 includes PostgreSQL 14 and Ubuntu 24.04 includes PostgreSQL 16.</p> </div> <div itemprop="interactionStatistic" itemscope itemtype="http://schema.org/InteractionCounter"> <meta itemprop="interactionType" content="http://schema.org/LikeAction"/> <meta itemprop="userInteractionCount" content="0" /> <span class='post-likes'></span> </div> </div> <div id='post_11' itemprop='comment' itemscope itemtype='http://schema.org/Comment' class='topic-body crawler-post'> <div class='crawler-post-meta'> <span class="creator" itemprop="author" itemscope itemtype="http://schema.org/Person"> <a itemprop="url" href='https://discourse.ubuntu.com/u/bran-castillo'><span itemprop='name'>bran-castillo</span></a> </span> <span class="crawler-post-infos"> <time itemprop='datePublished' datetime='2024-07-31T18:59:40Z' class='post-time'> July 31, 2024, 6:59pm </time> <meta itemprop='dateModified' content='2024-07-31T18:59:40Z'> <span itemprop='position'>11</span> </span> </div> <div class='post' itemprop='text'> <p>There are $ signs on the last three commands that should be removed to be consistent with the rest of the docs.</p> </div> <div itemprop="interactionStatistic" itemscope itemtype="http://schema.org/InteractionCounter"> <meta itemprop="interactionType" content="http://schema.org/LikeAction"/> <meta itemprop="userInteractionCount" content="1" /> <span class='post-likes'>1 Like</span> </div> </div> <div id='post_12' itemprop='comment' itemscope itemtype='http://schema.org/Comment' class='topic-body crawler-post'> <div class='crawler-post-meta'> <span class="creator" itemprop="author" itemscope itemtype="http://schema.org/Person"> <a itemprop="url" href='https://discourse.ubuntu.com/u/yanisa-hs'><span itemprop='name'>yanisa-hs</span></a> </span> <span class="crawler-post-infos"> <time itemprop='datePublished' datetime='2024-07-31T19:23:30Z' class='post-time'> July 31, 2024, 7:23pm </time> <meta itemprop='dateModified' content='2024-07-31T19:23:30Z'> <span itemprop='position'>12</span> </span> </div> <div class='post' itemprop='text'> <p>Good catch! I just removed them. Thanks <a class="mention" href="/u/bran-castillo">@bran-castillo</a>! <img src="https://discourse.ubuntu.com/images/emoji/twitter/smiling_face.png?v=12" title=":smiling_face:" class="emoji" alt=":smiling_face:" loading="lazy" width="20" height="20"></p> </div> <div itemprop="interactionStatistic" itemscope itemtype="http://schema.org/InteractionCounter"> <meta itemprop="interactionType" content="http://schema.org/LikeAction"/> <meta itemprop="userInteractionCount" content="0" /> <span class='post-likes'></span> </div> </div> <div id='post_13' itemprop='comment' itemscope itemtype='http://schema.org/Comment' class='topic-body crawler-post'> <div class='crawler-post-meta'> <span class="creator" itemprop="author" itemscope itemtype="http://schema.org/Person"> <a itemprop="url" href='https://discourse.ubuntu.com/u/dilyn-corner'><span itemprop='name'>dilyn-corner</span></a> </span> <span class="crawler-post-infos"> <time itemprop='datePublished' datetime='2024-08-06T05:43:15Z' class='post-time'> August 6, 2024, 5:43am </time> <meta itemprop='dateModified' content='2024-08-06T05:43:15Z'> <span itemprop='position'>13</span> </span> </div> <div class='post' itemprop='text'> <blockquote> <p>To create it, please go to https:// and fill in the requested information.</p> </blockquote> <p>You have some unescaped &lt; and &gt; in there <img src="https://discourse.ubuntu.com/images/emoji/twitter/slight_smile.png?v=12" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p> <p>It also seems that landscape requires <code>postgresql-16-debversion</code> and <code>postgresql-plpython3-16</code>, but those aren’t being pulled in as dependencies from the landscape deb (at least for the landscape-server package in the landscape/self-hosted-24.04 ppa).</p> <p>It might also be useful to point to at least some sort of documentation around the <code>landscape.conf</code> file for the Apache web server. I could understand not wanting to document it here as that is ostensibly Apache admin related stuff and not specifically Landscape, but the <code>landscape.conf</code> is also a substantial file and so pointing to a solid source of truth on the matter may be prudent.</p> <p>I will also say, using 24.04 it seems that landscape-server still relies on an older version of Python? I had python 3.12 installed (and no earlier versions) and ran into errors related to PEP-0632 (dropping distutils in 3.9).</p> </div> <div itemprop="interactionStatistic" itemscope itemtype="http://schema.org/InteractionCounter"> <meta itemprop="interactionType" content="http://schema.org/LikeAction"/> <meta itemprop="userInteractionCount" content="0" /> <span class='post-likes'></span> </div> </div> <div id='post_14' itemprop='comment' itemscope itemtype='http://schema.org/Comment' class='topic-body crawler-post'> <div class='crawler-post-meta'> <span class="creator" itemprop="author" itemscope itemtype="http://schema.org/Person"> <a itemprop="url" href='https://discourse.ubuntu.com/u/yanisa-hs'><span itemprop='name'>yanisa-hs</span></a> </span> <span class="crawler-post-infos"> <time itemprop='datePublished' datetime='2024-08-06T21:14:56Z' class='post-time'> August 6, 2024, 9:14pm </time> <meta itemprop='dateModified' content='2024-08-06T21:14:56Z'> <span itemprop='position'>14</span> </span> </div> <div class='post' itemprop='text'> <p>Thanks for all your the feedback <a class="mention" href="/u/dilyn-corner">@dilyn-corner</a>! <img src="https://discourse.ubuntu.com/images/emoji/twitter/smiling_face.png?v=12" title=":smiling_face:" class="emoji" alt=":smiling_face:" loading="lazy" width="20" height="20"> Regarding the conf file, this is something we’d like to have more documentation on, but we haven’t had the bandwidth to address it yet. And I’ll pass your other comments on Landscape 24.04 to our engineers.</p> </div> <div itemprop="interactionStatistic" itemscope itemtype="http://schema.org/InteractionCounter"> <meta itemprop="interactionType" content="http://schema.org/LikeAction"/> <meta itemprop="userInteractionCount" content="1" /> <span class='post-likes'>1 Like</span> </div> </div> <div id='post_15' itemprop='comment' itemscope itemtype='http://schema.org/Comment' class='topic-body crawler-post'> <div class='crawler-post-meta'> <span class="creator" itemprop="author" itemscope itemtype="http://schema.org/Person"> <a itemprop="url" href='https://discourse.ubuntu.com/u/mitchburton'><span itemprop='name'>mitchburton</span></a> </span> <span class="crawler-post-infos"> <time itemprop='datePublished' datetime='2024-08-06T21:25:18Z' class='post-time'> August 6, 2024, 9:25pm </time> <meta itemprop='dateModified' content='2024-08-06T21:25:18Z'> <span itemprop='position'>15</span> </span> </div> <div class='post' itemprop='text'> <p>Hi <a class="mention" href="/u/dilyn-corner">@dilyn-corner</a>,</p> <p>None of the <code>postgresql-</code> packages (or postgresql itself) are dependencies of <code>landscape-server</code> because <code>landscape-server</code> is often installed independently, then configured against postgres installed elsewhere. These packages are dependencies of <code>landscape-server-quickstart</code> though.</p> <p>I’ve seen warnings from Python 3.12, but no errors (yet). Thanks for reporting – we’re aiming to support both 3.10 and 3.12 so any errors will have to be dealt with. Which Python specifically are you seeing this on? Is it 3.12.3-0ubuntu1? With the point release of 24.04 approaching, I wouldn’t be surprised if they bumped it.</p> </div> <div itemprop="interactionStatistic" itemscope itemtype="http://schema.org/InteractionCounter"> <meta itemprop="interactionType" content="http://schema.org/LikeAction"/> <meta itemprop="userInteractionCount" content="1" /> <span class='post-likes'>1 Like</span> </div> </div> <div id='post_16' itemprop='comment' itemscope itemtype='http://schema.org/Comment' class='topic-body crawler-post'> <div class='crawler-post-meta'> <span class="creator" itemprop="author" itemscope itemtype="http://schema.org/Person"> <a itemprop="url" href='https://discourse.ubuntu.com/u/dilyn-corner'><span itemprop='name'>dilyn-corner</span></a> </span> <span class="crawler-post-infos"> <time itemprop='datePublished' datetime='2024-08-07T18:55:59Z' class='post-time'> August 7, 2024, 6:55pm </time> <meta itemprop='dateModified' content='2024-08-07T18:55:59Z'> <span itemprop='position'>16</span> </span> </div> <div class='post' itemprop='text'> <p>Glad to hear it, Yanisa! And thank you for the really nice work on these docs! They’ve been very helpful.</p> <p><a class="mention" href="/u/mitchburton">@mitchburton</a> I’m a ghost that will never stop haunting you!</p> <p>The justification for not marking those postgres packages as dependencies of <code>landscape-server</code> makes sense, and I appreciate that they’re installed with <code>landscape-server-quickstart</code>; at the very least I think they’re worth mentioning here, though.</p> <p>It’s interesting that you saw warnings but no errors; I couldn’t run <code>setup-landscape-server</code> until changing some things… I’ll drop my patch and get a paste of the output. Python in use is indeed 3.12.3-0ubuntu1.</p> </div> <div itemprop="interactionStatistic" itemscope itemtype="http://schema.org/InteractionCounter"> <meta itemprop="interactionType" content="http://schema.org/LikeAction"/> <meta itemprop="userInteractionCount" content="1" /> <span class='post-likes'>1 Like</span> </div> </div> </div> </div> <footer class="container wrap"> <nav class='crawler-nav'> <ul> <li itemscope itemtype='http://schema.org/SiteNavigationElement'> <span itemprop='name'> <a href='/' itemprop="url">Home </a> </span> </li> <li itemscope itemtype='http://schema.org/SiteNavigationElement'> <span itemprop='name'> <a href='/categories' itemprop="url">Categories </a> </span> </li> <li itemscope itemtype='http://schema.org/SiteNavigationElement'> <span itemprop='name'> <a href='/guidelines' itemprop="url">Guidelines </a> </span> </li> <li itemscope itemtype='http://schema.org/SiteNavigationElement'> <span itemprop='name'> <a href='https://www.ubuntu.com/legal' itemprop="url">Terms of Service </a> </span> </li> <li itemscope itemtype='http://schema.org/SiteNavigationElement'> <span itemprop='name'> <a href='https://www.ubuntu.com/legal/terms-and-policies/privacy-policy' itemprop="url">Privacy Policy </a> </span> </li> </ul> </nav> <p class='powered-by-link'>Powered by <a href="https://www.discourse.org">Discourse</a>, best viewed with JavaScript enabled</p> </footer> <footer class="d-footer"> <div class="wrap"> <div class="contents"> <p>© 2024 Canonical Ltd.</p> <div class="d-footer__links"> <a href="https://ubuntu.com/legal">Legal information</a> <a href="https://ubuntu.com/legal/data-privacy" target="_blank">Privacy policy</a> <a href="#" class="js-revoke-cookie-manager">Manage your tracker settings</a> </div> </div> </div> </footer> <div class="buorg"><div>Unfortunately, <a href="https://www.discourse.org/faq/#browser">your browser is unsupported</a>. Please <a href="https://browsehappy.com">switch to a supported browser</a> to view rich content, log in and reply.</div></div> </body> </html>

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