mirror of
https://github.com/fleetdm/fleet
synced 2026-04-21 13:37:30 +00:00
Post whitepaper IT leader's guide to Linux device management AND fix whitepaper form hardcode. (#43780)
<!-- Add the related story/sub-task/bug number, like Resolves #123, or remove if NA --> **Related issue:** Resolves #https://github.com/fleetdm/confidential/issues/14837 **Related issue:** Resolves #https://github.com/fleetdm/confidential/issues/14839 Commit 1 - fixes the basic-whitepaper.ejs page so that the LP form headline is not hard coded to GitOps anymore. Commit 2 - posts the whitepaper and sets up the LP page <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Updates** * Form headline on whitepaper download page is now customizable. * Enhanced email submission feedback handling during download process. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
parent
bdf69537e4
commit
33f0d8454a
6 changed files with 123 additions and 65 deletions
54
articles/IT-leaders-guide-to-Linux-device-management.md
Normal file
54
articles/IT-leaders-guide-to-Linux-device-management.md
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
### Linux adoption is growing. Management hasn't kept up.
|
||||
|
||||
* macOS and Windows have mature management ecosystems. Linux does not.
|
||||
* Compliance frameworks don't grant exemptions by operating system.
|
||||
* Security audits don't skip Linux workstations.
|
||||
* These create the Linux gap.
|
||||
|
||||
### Unmanaged devices are unmanaged risk.
|
||||
|
||||
This guide helps IT leaders understand and close the Linux management gap.
|
||||
|
||||
### What you'll learn
|
||||
|
||||
You'll learn about a maturity model for planning your adoption path, a clear framework for defining your requirements, and a concrete evaluation scorecard for comparing management platforms. Whether you manage 50 Linux workstations or 5,000, this guide gives you the structure to make a defensible platform decision and explain it to your team.
|
||||
|
||||
### Chapter list
|
||||
|
||||
- **Why Linux devices are important**
|
||||
* What's driving enterprise Linux adoption and why management is no longer optional.
|
||||
- **The business case for managing Linux devices**
|
||||
* Cost, compliance, talent retention, and the price of inaction.
|
||||
- **Defining your Linux device management needs**
|
||||
* Key questions to ask and a maturity model to map your goals.
|
||||
- **Automated provisioning for Linux desktop in the enterprise**
|
||||
* The provisioning gap, enrollment approaches, and what zero-touch looks like on Linux.
|
||||
- **Security baselines for Linux**
|
||||
* Why baselines matter, what to enforce, and how to fight configuration drift.
|
||||
- **App and certificate management for Linux**
|
||||
* Software distribution challenges, the notarization gap, patching speed, and shrinking certificate lifetimes.
|
||||
- **Protecting the Linux device**
|
||||
* USB and Bluetooth threats, the sudo problem, and remote lock and wipe.
|
||||
- **Controlling your software and your data**
|
||||
* Software sovereignty, data sovereignty, and why your management tooling should reflect the values that made Linux worth adopting.
|
||||
- **Choosing the right solution**
|
||||
* Business and technical requirements, an evaluation criteria table, and a structured way to compare platforms.
|
||||
|
||||
|
||||
|
||||
<meta name="articleTitle" value="The IT leader's guide to Linux device management">
|
||||
|
||||
<meta name="authorFullName" value="n/a">
|
||||
<meta name="authorGitHubUsername" value="fleet-release">
|
||||
|
||||
<meta name="category" value="whitepaper">
|
||||
<meta name="publishedOn" value="2026-04-20">
|
||||
<meta name="description" value="Close the Linux management gap. A guide to help IT leaders understand the business case, security, compliance, and choosing the right solution.">
|
||||
|
||||
|
||||
<meta name="articleImageUrl" value="../website/assets/images/articles/IT-leaders-guide-to-Linux-device-management-cover-image-504x336@2x.png">
|
||||
<meta name="whitepaperFilename" value="IT-leaders-guide-to-Linux-device-management.pdf">
|
||||
<meta name="formHeadline" value="Learn how to close the Linux management gap">
|
||||
|
||||
<meta name="introductionTextBlockOne" value="Linux now exceeds 5% of desktop market share. Stack Overflow's 2025 developer survey shows nearly 30% of developers use Linux as their primary work OS.">
|
||||
<meta name="introductionTextBlockTwo" value="Your most important contributors, developers, engineers, and security practitioners, are choosing Linux. And in most organizations, those devices sit outside formal IT management.">
|
||||
|
|
@ -57,6 +57,7 @@ You will also see how treating device management as a software discipline helps
|
|||
|
||||
|
||||
<meta name="articleImageUrl" value="../website/assets/images/articles/modern-endpoint-management-managing-devices-as-code-cover-image-504x336@2x.png">
|
||||
<meta name="formHeadline" value="Learn how GitOps transforms device management">
|
||||
|
||||
<meta name="whitepaperFilename" value="fleet-modern-endpoint-device-management-managing-devices-as-code.pdf">
|
||||
<meta name="introductionTextBlockOne" value="Traditional device management does not scale. Teams still rely on manual updates, GUI tools, and scattered inventories.">
|
||||
|
|
|
|||
|
|
@ -163,6 +163,8 @@ Whitepaper articles use a separate article template that requires additional `<m
|
|||
- `articleImageUrl`: A relative link to a cover image for the whitepaper. The specified image is placed next to the article title on the whitepaper article template page.
|
||||
- Optional `<meta>` tags:
|
||||
- `introductionTextBlockTwo` - A optional second introduction paragraph for the whitepaper. The contents of this meta tag are added as a separate paragraph to the introduction above the Markdown content.
|
||||
- `formHeadline` - Put in a short phrase that will show immediately above the form fields. If not used, a default generic phrase will be use ("Get the white paper to learn more")
|
||||
|
||||
|
||||
**Example whitepaper article meta tag section**
|
||||
|
||||
|
|
@ -177,6 +179,7 @@ Whitepaper articles use a separate article template that requires additional `<m
|
|||
<meta name="whitepaperFilename" value="fleet-modern-endpoint-device-management-managing-devices-as-code.pdf">
|
||||
<meta name="introductionTextBlockOne" value="Traditional device management does not scale. Teams still rely on manual updates, GUI tools, and scattered inventories.">
|
||||
<meta name="introductionTextBlockTwo" value="Modern IT teams treat device management like software engineering. They define device state in code, review changes in Git, and deploy updates automatically.">
|
||||
<meta name="formHeadline" value="Learn more about modern IT device management">
|
||||
```
|
||||
|
||||
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 772 KiB |
BIN
website/assets/pdfs/IT-leaders-guide-to-Linux-device-management.pdf
vendored
Normal file
BIN
website/assets/pdfs/IT-leaders-guide-to-Linux-device-management.pdf
vendored
Normal file
Binary file not shown.
130
website/views/pages/articles/basic-whitepaper.ejs
vendored
130
website/views/pages/articles/basic-whitepaper.ejs
vendored
|
|
@ -12,77 +12,77 @@
|
|||
</div>
|
||||
</div>
|
||||
<%if(thisPage.meta.articleImageUrl){%>
|
||||
<div purpose="article-image">
|
||||
<img alt="A preview image of the whitepaper" src="<%= thisPage.meta.articleImageUrl %>">
|
||||
</div>
|
||||
<% } %>
|
||||
</div>
|
||||
<div purpose="article-and-sidebar" class="d-flex flex-lg-row-reverse flex-column justify-content-lg-between">
|
||||
<div purpose="sidebar-container">
|
||||
<div purpose="right-sidebar" class="d-flex flex-column">
|
||||
<div purpose="form-container">
|
||||
<div id="download-form" purpose="whitepaper-download-form">
|
||||
<h4>Learn how GitOps transforms device management</h4>
|
||||
<ajax-form class="w-100" action="deliverWhitepaperDownloadRequest" :form-errors.sync="formErrors" :form-data="formData" :form-rules="formRules" :syncing.sync="syncing" :cloud-error.sync="cloudError" @submitted="submittedDownloadForm()" v-if="!cloudSuccess">
|
||||
<div class="form-group">
|
||||
<label for="first-name">First name *</label>
|
||||
<input tabindex="1" class="form-control" id="first-name" type="text" :class="[formErrors.firstName ? 'is-invalid' : '']" v-model.trim="formData.firstName" autocomplete="first-name">
|
||||
<div class="invalid-feedback" v-if="formErrors.firstName">Please enter your first name.</div>
|
||||
<div purpose="article-image">
|
||||
<img alt="A preview image of the whitepaper" src="<%= thisPage.meta.articleImageUrl %>">
|
||||
</div>
|
||||
<% } %>
|
||||
</div>
|
||||
<div purpose="article-and-sidebar" class="d-flex flex-lg-row-reverse flex-column justify-content-lg-between">
|
||||
<div purpose="sidebar-container">
|
||||
<div purpose="right-sidebar" class="d-flex flex-column">
|
||||
<div purpose="form-container">
|
||||
<div id="download-form" purpose="whitepaper-download-form">
|
||||
<h4><%- thisPage.meta.formHeadline || 'Get the white paper to learn more' %></h4>
|
||||
<ajax-form class="w-100" action="deliverWhitepaperDownloadRequest" :form-errors.sync="formErrors" :form-data="formData" :form-rules="formRules" :syncing.sync="syncing" :cloud-error.sync="cloudError" @submitted="submittedDownloadForm()" v-if="!cloudSuccess">
|
||||
<div class="form-group">
|
||||
<label for="first-name">First name *</label>
|
||||
<input tabindex="1" class="form-control" id="first-name" type="text" :class="[formErrors.firstName ? 'is-invalid' : '']" v-model.trim="formData.firstName" autocomplete="first-name">
|
||||
<div class="invalid-feedback" v-if="formErrors.firstName">Please enter your first name.</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="last-name">Last name *</label>
|
||||
<input tabindex="2" class="form-control" id="last-name" type="text" :class="[formErrors.lastName ? 'is-invalid' : '']" v-model.trim="formData.lastName" autocomplete="last-name">
|
||||
<div class="invalid-feedback" v-if="formErrors.lastName">Please enter your last name.</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="email-address">Work email *</label>
|
||||
<input tabindex="3" class="form-control" id="email-address" :class="[formErrors.emailAddress ? 'is-invalid' : '']" v-model.trim="formData.emailAddress">
|
||||
<div class="invalid-feedback" v-if="formErrors.emailAddress" focus-first>This doesn’t appear to be a valid email address</div>
|
||||
</div>
|
||||
<ajax-button tabindex="4" purpose="download-button" spinner="true" type="submit" :syncing="syncing" class="btn btn-primary">Download whitepaper</ajax-button>
|
||||
<cloud-error v-if="cloudError === 'invalidEmailDomain'">
|
||||
<p>
|
||||
Please enter your work or school email address.
|
||||
</p>
|
||||
</cloud-error>
|
||||
<cloud-error v-else-if="cloudError">
|
||||
</cloud-error>
|
||||
</ajax-form>
|
||||
<div v-else>
|
||||
<p>Your download should start automatically. If not, you can click <a href="/pdfs/<%- thisPage.meta.whitepaperFilename%>" download="<%- thisPage.meta.whitepaperFilename %>">this link</a> to download this whitepaper</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="last-name">Last name *</label>
|
||||
<input tabindex="2" class="form-control" id="last-name" type="text" :class="[formErrors.lastName ? 'is-invalid' : '']" v-model.trim="formData.lastName" autocomplete="last-name">
|
||||
<div class="invalid-feedback" v-if="formErrors.lastName">Please enter your last name.</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div purpose="article-container">
|
||||
<div purpose="article-content" parasails-has-no-page-script>
|
||||
<%- partial(path.relative(path.dirname(__filename), path.resolve( sails.config.appPath, path.join(sails.config.builtStaticContent.compiledPagePartialsAppPath, thisPage.htmlId)))) %>
|
||||
<div purpose="download-cta" class="d-lg-none d-flex">
|
||||
<a purpose="download-button" class="btn btn-primary" href="#download-form">Download whitepaper</a>
|
||||
</div>
|
||||
<div purpose="about-fleet-section">
|
||||
<h3>About Fleet</h3>
|
||||
|
||||
<p>Fleet is the single endpoint management platform for macOS, iOS, Android, Windows, Linux, ChromeOS, and cloud infrastructure. Trusted by over 1,300 organizations, Fleet empowers IT and security teams to accelerate productivity, build verifiable trust, and optimize costs.</p>
|
||||
|
||||
<p>By bringing infrastructure-as-code (IaC) practices to device management, Fleet ensures endpoints remain secure and operational, freeing engineering teams to focus on strategic initiatives.</p>
|
||||
|
||||
<p>Fleet offers total deployment flexibility: on-premises, air-gapped, container-native (Docker and Kubernetes), or cloud-agnostic (AWS, Azure, GCP, DigitalOcean). Organizations can also choose fully managed SaaS via Fleet Cloud, ensuring complete control over data residency and legal jurisdiction.</p>
|
||||
</div>
|
||||
<div purpose="social-share-and-edit-buttons" class="d-flex flex-row justify-content-between align-items-center">
|
||||
<div purpose="social-share-buttons" class="d-flex flex-row">
|
||||
<a :href="`https://news.ycombinator.com/submitlink?u=https://fleetdm.com${encodeURIComponent(thisPage.url)}&t=${encodeURIComponent(thisPage.meta.articleTitle)}`"><img src="/images/social-share-icon-hacker-news-20x20@2x.png" alt="Share this article on Hacker News"></a>
|
||||
<a :href="`https://www.linkedin.com/sharing/share-offsite/?url=${encodeURIComponent('https://fleetdm.com'+thisPage.url)}`"><img src="/images/social-share-icon-linkedin-20x20@2x.png" alt="Share this article on LinkedIn"></a>
|
||||
<a :href="`https://twitter.com/intent/tweet?url=${encodeURIComponent('https://fleetdm.com'+thisPage.url)}`"><img src="/images/social-share-icon-twitter-20x20@2x.png" alt="Share this article on Twitter"></a>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="email-address">Work email *</label>
|
||||
<input tabindex="3" class="form-control" id="email-address" :class="[formErrors.emailAddress ? 'is-invalid' : '']" v-model.trim="formData.emailAddress">
|
||||
<div class="invalid-feedback" v-if="formErrors.emailAddress" focus-first>This doesn’t appear to be a valid email address</div>
|
||||
<div purpose="edit-link">
|
||||
<a :href="'https://github.com/fleetdm/fleet/edit/main/articles/'+thisPage.sectionRelativeRepoPath"> <img src="/images/icon-edit-16x16@2x.png" alt="Suggest an edit">Suggest an edit</a>
|
||||
</div>
|
||||
<ajax-button tabindex="4" purpose="download-button" spinner="true" type="submit" :syncing="syncing" class="btn btn-primary">Download whitepaper</ajax-button>
|
||||
<cloud-error v-if="cloudError === 'invalidEmailDomain'">
|
||||
<p>
|
||||
Please enter your work or school email address.
|
||||
</p>
|
||||
</cloud-error>
|
||||
<cloud-error v-else-if="cloudError">
|
||||
</cloud-error>
|
||||
</ajax-form>
|
||||
<div v-else>
|
||||
<p>Your download should start automatically. If not, you can click <a href="/pdfs/<%- thisPage.meta.whitepaperFilename%>" download="<%- thisPage.meta.whitepaperFilename %>">this link</a> to download this whitepaper</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div purpose="article-container">
|
||||
<div purpose="article-content" parasails-has-no-page-script>
|
||||
<%- partial(path.relative(path.dirname(__filename), path.resolve( sails.config.appPath, path.join(sails.config.builtStaticContent.compiledPagePartialsAppPath, thisPage.htmlId)))) %>
|
||||
<div purpose="download-cta" class="d-lg-none d-flex">
|
||||
<a purpose="download-button" class="btn btn-primary" href="#download-form">Download whitepaper</a>
|
||||
</div>
|
||||
<div purpose="about-fleet-section">
|
||||
<h3>About Fleet</h3>
|
||||
|
||||
<p>Fleet is the single endpoint management platform for macOS, iOS, Android, Windows, Linux, ChromeOS, and cloud infrastructure. Trusted by over 1,300 organizations, Fleet empowers IT and security teams to accelerate productivity, build verifiable trust, and optimize costs.</p>
|
||||
|
||||
<p>By bringing infrastructure-as-code (IaC) practices to device management, Fleet ensures endpoints remain secure and operational, freeing engineering teams to focus on strategic initiatives.</p>
|
||||
|
||||
<p>Fleet offers total deployment flexibility: on-premises, air-gapped, container-native (Docker and Kubernetes), or cloud-agnostic (AWS, Azure, GCP, DigitalOcean). Organizations can also choose fully managed SaaS via Fleet Cloud, ensuring complete control over data residency and legal jurisdiction.</p>
|
||||
</div>
|
||||
<div purpose="social-share-and-edit-buttons" class="d-flex flex-row justify-content-between align-items-center">
|
||||
<div purpose="social-share-buttons" class="d-flex flex-row">
|
||||
<a :href="`https://news.ycombinator.com/submitlink?u=https://fleetdm.com${encodeURIComponent(thisPage.url)}&t=${encodeURIComponent(thisPage.meta.articleTitle)}`"><img src="/images/social-share-icon-hacker-news-20x20@2x.png" alt="Share this article on Hacker News"></a>
|
||||
<a :href="`https://www.linkedin.com/sharing/share-offsite/?url=${encodeURIComponent('https://fleetdm.com'+thisPage.url)}`"><img src="/images/social-share-icon-linkedin-20x20@2x.png" alt="Share this article on LinkedIn"></a>
|
||||
<a :href="`https://twitter.com/intent/tweet?url=${encodeURIComponent('https://fleetdm.com'+thisPage.url)}`"><img src="/images/social-share-icon-twitter-20x20@2x.png" alt="Share this article on Twitter"></a>
|
||||
</div>
|
||||
<div purpose="edit-link">
|
||||
<a :href="'https://github.com/fleetdm/fleet/edit/main/articles/'+thisPage.sectionRelativeRepoPath"> <img src="/images/icon-edit-16x16@2x.png" alt="Suggest an edit">Suggest an edit</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<%- /* Expose server-rendered data as window.SAILS_LOCALS :: */ exposeLocalsToBrowser() %>
|
||||
<%- /* Expose server-rendered data as window.SAILS_LOCALS :: */ exposeLocalsToBrowser() %>
|
||||
Loading…
Reference in a new issue