Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c829a1f95c |
@@ -1,13 +0,0 @@
|
||||
name: Greetings
|
||||
|
||||
on: [pull_request, issues]
|
||||
|
||||
jobs:
|
||||
greeting:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/first-interaction@v1
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
issue-message: 'Welcome to Clear Linux* OS Docs. Thanks for submitting your first issue.'
|
||||
pr-message: 'Welcome to Clear Linux* OS Docs. Thanks for submitting your first PR.'
|
||||
@@ -34,6 +34,7 @@ clean:
|
||||
rm -rf venv
|
||||
|
||||
venv:
|
||||
virtualenv venv;\
|
||||
virtualenv -p python$(PY_VERSION) venv;
|
||||
source venv/bin/activate; \
|
||||
pip3 install -r requirements.txt;
|
||||
|
||||
|
||||
@@ -65,87 +65,7 @@ to view the rendered documentation.
|
||||
|
||||
If you want to build the documentation exactly as seen on the website, use
|
||||
``make py`` followed by ``make htmlall``. This builds some
|
||||
external dependencies and all supported languages.
|
||||
|
||||
Use virtualenv
|
||||
**************
|
||||
|
||||
To develop documentation in a ``virtualenv``, use the ``venv`` target.
|
||||
The Clear Linux OS documentation make target ``venv`` provides a
|
||||
simple development environment that ensures that you have the
|
||||
latest packages and that you manage Python versions separately. Use of the
|
||||
``virtualenv`` requires **Python 3.6** or higher. For Windows examples below, use Powershell as an Administrator.
|
||||
|
||||
The **virtual environment** uses the same version of Python that was used to **create the virtual environment**.
|
||||
|
||||
Verify ``pip`` is installed. A file path to pip should appear.
|
||||
|
||||
On Clear Linux OS and macOS\*:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
which pip
|
||||
|
||||
On Windows\* 10 OS:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
pip --version
|
||||
|
||||
If ``pip`` is not installed, install it.
|
||||
|
||||
On Clear Linux OS and macOS:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
python3 -m pip install --user --upgrade pip
|
||||
|
||||
On Windows 10 OS:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
py -m pip install --upgrade pip
|
||||
|
||||
.. note::
|
||||
|
||||
This assumes Python was already added to your Windows path.
|
||||
|
||||
Install virtualenv
|
||||
==================
|
||||
|
||||
Install ``virtualenv``.
|
||||
|
||||
On Clear Linux OS and macOS\*:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
python3 -m pip install --user virtualenv
|
||||
|
||||
On Windows 10 OS:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
py -m pip install --user virtualenv
|
||||
|
||||
Create the ``virtualenv`` and install the required packages:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
make venv
|
||||
|
||||
Activate the ``venv``.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
source venv/bin/activate
|
||||
|
||||
Follow `Run the build`_ section to start developing documentation.
|
||||
|
||||
Remove the ``venv`` when finished developing.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
deactivate
|
||||
external dependenices and all supported languages.
|
||||
|
||||
Additional help
|
||||
***************
|
||||
@@ -160,8 +80,7 @@ build before building again by running ``make clean``:
|
||||
|
||||
make clean
|
||||
|
||||
This will completely remove the previous build output, including artifacts
|
||||
from the `make venv` target when done outside an active venv.
|
||||
This will completely remove the previous build output.
|
||||
|
||||
Convenience script
|
||||
==================
|
||||
@@ -179,6 +98,6 @@ To stop the web server simply use ``ctrl-c``.
|
||||
.. _Clear Linux\* OS documentation: https://docs.01.org/clearlinux/
|
||||
.. _Sphinx: http://sphinx-doc.org/
|
||||
.. _reStructuredText: http://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html
|
||||
.. _contribution guidelines: https://docs.01.org/clearlinux/latest/collaboration/collaboration.html
|
||||
.. _contribution guidelines: https://clearlinux.org/documentation/clear-linux/reference/collaboration
|
||||
.. _instructions for installing Sphinx: https://www.sphinx-doc.org/en/master/usage/installation.html
|
||||
|
||||
|
||||
@@ -6,4 +6,3 @@ sphinx-intl==2.0.0
|
||||
sphinx-sitemap==1.0.2
|
||||
Jinja2==2.10.1
|
||||
GitPython==2.1.11
|
||||
sphinx-tabs
|
||||
|
||||
@@ -16,7 +16,7 @@ Why did you make another distro?
|
||||
================================
|
||||
|
||||
The |CL| team felt that performance was left on the table with Linux software.
|
||||
|CL| takes a holistic approach to improve performance across the stack. We
|
||||
|CL| takes a holistic approach to improving performance across the stack. We
|
||||
also wanted to take more modern approaches with OS updates and tooling.
|
||||
|
||||
|
|
||||
@@ -31,7 +31,7 @@ Yes, we absolutely love open source reuse and upstreaming improvements.
|
||||
How often do you update?
|
||||
========================
|
||||
|
||||
The |CL| team puts out multiple releases a week, often releasing two or more
|
||||
The |CL| team puts out multiple releases a week, often releasing 2 or more
|
||||
times a day. This rolling release approach allows |CL| to remain agile to
|
||||
upstream changes and security patches.
|
||||
|
||||
@@ -137,7 +137,7 @@ Is Microsoft\* Visual Studio Code\* available?
|
||||
|
||||
Yes. Find the CLI command for installing `VS Code`_ and other Flatpak apps in
|
||||
the `software store`_. Installing Flatpak apps is also covered in our
|
||||
:ref:`tutorial <flatpak-tutorial>`.
|
||||
:ref:`tutorial <flatpak-tutorial>`.
|
||||
|
||||
The |CL| team is working on a natively packaged version of Visual Studio Code
|
||||
for future release.
|
||||
|
||||
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 88 KiB |
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 93 KiB |
|
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 195 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 93 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 195 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 212 KiB |
|
Before Width: | Height: | Size: 104 KiB |
|
Before Width: | Height: | Size: 237 KiB |
|
Before Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 330 KiB |
|
Before Width: | Height: | Size: 163 KiB |
|
Before Width: | Height: | Size: 211 KiB |
|
Before Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 228 KiB |
|
Before Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 266 KiB |
|
Before Width: | Height: | Size: 128 KiB |
|
Before Width: | Height: | Size: 232 KiB |
|
Before Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 248 KiB |
|
Before Width: | Height: | Size: 68 KiB |
|
Before Width: | Height: | Size: 293 KiB |
|
Before Width: | Height: | Size: 157 KiB |
|
Before Width: | Height: | Size: 276 KiB |
|
Before Width: | Height: | Size: 147 KiB |
|
Before Width: | Height: | Size: 231 KiB |
|
Before Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 302 KiB |
|
Before Width: | Height: | Size: 249 KiB |
|
Before Width: | Height: | Size: 248 KiB |
@@ -1,18 +0,0 @@
|
||||
1) Capture screenshot
|
||||
2) Open in GIMP 2.10
|
||||
3) Select the area of interest
|
||||
4) Copy the selection; take note of X, Y dimensions of the selection
|
||||
5) "File" > "New"
|
||||
- Add 100 extra pixels to X for the "Width"
|
||||
- Add 100 extra pixels to Y for the "Height"
|
||||
- Set "Fill with" to "Transparency"
|
||||
6) Switch from the "Selection" tool to the "Move" tool and move the
|
||||
the top-left corner of the image to 2 squares down and 2 squares across
|
||||
7) Right-click the image and select "Layer" > "Anchor Layer"
|
||||
8) "Filters" > "Decor" > "Light and Shadow" > "Drop Shadow"
|
||||
- X = 20.0
|
||||
- Y = 20.0
|
||||
- Radius = 20.0
|
||||
- Opacity = 0.2
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 124 KiB |
|
Before Width: | Height: | Size: 132 KiB |
|
Before Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 63 KiB |
|
Before Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 98 KiB |
|
Before Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 68 KiB |
|
Before Width: | Height: | Size: 67 KiB |
|
Before Width: | Height: | Size: 67 KiB |
|
Before Width: | Height: | Size: 7.3 KiB |
|
Before Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 63 KiB |
|
Before Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 102 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 189 KiB |
|
Before Width: | Height: | Size: 86 KiB |
|
Before Width: | Height: | Size: 61 KiB |
|
Before Width: | Height: | Size: 152 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 5.9 KiB |
|
Before Width: | Height: | Size: 212 KiB |
@@ -12,8 +12,4 @@ https://www.intel.com/content/www/us/en/privacy/intel-privacy-notice.html
|
||||
http://www.intel.com/content/www/us/en/nuc/nuc-kit-nuc6i5syh.html
|
||||
https://software.intel.com/en-us/mkl
|
||||
https://www.intel.com/content/www/us/en/architecture-and-technology/turbo-boost/turbo-boost-technology.html
|
||||
https://www.nvidia.com/download/index.aspx
|
||||
https://www.intel.com/content/www/us/en/architecture-and-technology/optane-technology/optane-for-data-centers.html
|
||||
https://downloadcenter.intel.com/download/28695/Intel-Server-Board-S2600WF-Family-BIOS-and-Firmware-Update-Package-for-UEFI
|
||||
https://software.intel.com/en-us/articles/quick-start-guide-configure-intel-optane-dc-persistent-memory-on-linux
|
||||
https://software.intel.com/en-us/articles/configure-manage-and-profile-intel-optane-dc-persistent-memory-modules
|
||||
https://www.nvidia.com/download/index.aspx
|
||||
@@ -169,13 +169,13 @@ th,td {
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
.collapsible.active:after {
|
||||
.active:after {
|
||||
content: "\2212";
|
||||
}
|
||||
|
||||
.content-collapse {
|
||||
overflow: hidden;
|
||||
/*transition: max-height 0.2s ease-out;*//*removed as it was breaking nested collapsible sections*/
|
||||
transition: max-height 0.2s ease-out;
|
||||
}
|
||||
|
||||
/*Fix for permalinks to collapsible sections*/
|
||||
@@ -374,16 +374,7 @@ div.highlight-console .highlight:before{
|
||||
white-space: pre;
|
||||
}
|
||||
|
||||
div.highlight-rst .highlight:before{
|
||||
background: #909090;
|
||||
color: white;
|
||||
content: " reStructuredText ";
|
||||
font-family: SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;
|
||||
font-size: 14px;
|
||||
white-space: pre;
|
||||
}
|
||||
|
||||
div.highlight-rest .highlight:before{
|
||||
div.highlight-rst, div.highlight-rest .highlight:before{
|
||||
background: #909090;
|
||||
color: white;
|
||||
content: " reStructuredText ";
|
||||
@@ -480,43 +471,3 @@ div.linenodiv:before { /*add extra new line to make sure code and line numbers a
|
||||
|
||||
/*End support for labeled code-blocks*/
|
||||
|
||||
/*Begin support for multi-column sections*/
|
||||
|
||||
.column {
|
||||
float: left;
|
||||
width: 350px;
|
||||
padding: 10px;
|
||||
margin: 10px;
|
||||
border: 10px;
|
||||
background: white;
|
||||
}
|
||||
|
||||
.column.featurecard {
|
||||
background: #CCE9F5;
|
||||
}
|
||||
|
||||
.column.verticalcard {
|
||||
height: 615px;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/* Clear floats after the columns */
|
||||
.multicolumns:after {
|
||||
content: "";
|
||||
display: table;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.colh2 {
|
||||
font-size: 150%;
|
||||
font-weight: 700;
|
||||
font-family: "Roboto Slab","ff-tisa-web-pro","Georgia",Arial,sans-serif;
|
||||
}
|
||||
|
||||
.video.docutils.container {
|
||||
margin: 10px;
|
||||
width:720px;
|
||||
height:405px;
|
||||
}
|
||||
|
||||
/*End support for multi-column sections*/
|
||||
|
||||
@@ -1,76 +1,60 @@
|
||||
var i;
|
||||
var contents = document.getElementsByClassName("content-collapse section");
|
||||
|
||||
var bashDollarDivs = document.getElementsByClassName("bash-dollars highlight-bash");
|
||||
|
||||
for (i = 0; i< bashDollarDivs.length; i++) {
|
||||
_pre = bashDollarDivs[i].querySelectorAll("pre");
|
||||
for (j = 0; j < _pre.length; j++) {
|
||||
console.log(_pre[j]);
|
||||
_pre[j].innerHTML="<span class='bash-dollar'>"+(_pre[j].textContent.split("\n").filter(Boolean).join("</span>\n<span class='bash-dollar'>"))+"</span>";
|
||||
}
|
||||
}
|
||||
|
||||
//needed for nested collapsible sections - otherwise the top container
|
||||
//won't resize after expanding a child.
|
||||
function resetActiveCollapsedSections() {
|
||||
|
||||
var sections = document.getElementsByClassName("content-collapse section");
|
||||
|
||||
//for (i = 0; i < sections.length; i++) {
|
||||
for (i = sections.length -1; i >= 0; i-- ){
|
||||
|
||||
if (sections[i].style.maxHeight != "0px"){
|
||||
sections[i].style.maxHeight = sections[i].scrollHeight + "px";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < contents.length; i++) {
|
||||
|
||||
//Make sure the "content-collapse section" class is occurring in <div>
|
||||
if (contents[i].tagName.toLowerCase() == 'div') {
|
||||
var element = contents[i].children[0];
|
||||
var element_type = element.tagName.toLowerCase();
|
||||
var btn_id;
|
||||
var divElement;
|
||||
|
||||
divElement = contents[i];
|
||||
btn_id = contents[i].id;
|
||||
|
||||
//if the next element is a span skip to the header
|
||||
if (element_type == 'span') {
|
||||
element = contents[i].children[1];
|
||||
element_type = element.tagName.toLowerCase();
|
||||
} else {
|
||||
divElement.id = "";
|
||||
}
|
||||
|
||||
var btn = document.createElement("BUTTON");
|
||||
//If it is a header capture which level and pass on to button
|
||||
if (element_type.length == 2 && element_type[0] == 'h') {
|
||||
var newClass = 'clps' + element_type[1];
|
||||
//collapses the section by default only if javascript is working
|
||||
contents[i].style.maxHeight = 0;
|
||||
//Build the button and define behavior
|
||||
btn.className += " " + newClass;
|
||||
btn.innerHTML = element.innerHTML;
|
||||
btn.className += " collapsible";
|
||||
btn.id = btn_id;
|
||||
btn.addEventListener("click", function() {
|
||||
this.classList.toggle("active");
|
||||
var content = this.nextElementSibling;
|
||||
if (content.style.maxHeight != "0px"){
|
||||
content.style.maxHeight = 0;
|
||||
} else {
|
||||
content.style.maxHeight = content.scrollHeight + "px";
|
||||
}
|
||||
resetActiveCollapsedSections(); //reset the size of parent containers
|
||||
});
|
||||
|
||||
//Add the button to the page and remove the header
|
||||
contents[i].parentNode.insertBefore(btn, contents[i]);
|
||||
contents[i].removeChild(element);
|
||||
}
|
||||
}
|
||||
}
|
||||
var i;
|
||||
var contents = document.getElementsByClassName("content-collapse section");
|
||||
|
||||
var bashDollarDivs = document.getElementsByClassName("bash-dollars highlight-bash");
|
||||
|
||||
for (i = 0; i< bashDollarDivs.length; i++) {
|
||||
_pre = bashDollarDivs[i].querySelectorAll("pre");
|
||||
for (j = 0; j < _pre.length; j++) {
|
||||
console.log(_pre[j]);
|
||||
_pre[j].innerHTML="<span class='bash-dollar'>"+(_pre[j].textContent.split("\n").filter(Boolean).join("</span>\n<span class='bash-dollar'>"))+"</span>";
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < contents.length; i++) {
|
||||
|
||||
//Make sure the "content-collapse section" class is occurring in <div>
|
||||
if (contents[i].tagName.toLowerCase() == 'div') {
|
||||
var element = contents[i].children[0];
|
||||
var element_type = element.tagName.toLowerCase();
|
||||
var btn_id;
|
||||
var divElement;
|
||||
|
||||
divElement = contents[i];
|
||||
btn_id = contents[i].id;
|
||||
|
||||
//if the next element is a span skip to the header
|
||||
if (element_type == 'span') {
|
||||
element = contents[i].children[1];
|
||||
element_type = element.tagName.toLowerCase();
|
||||
} else {
|
||||
divElement.id = "";
|
||||
}
|
||||
|
||||
var btn = document.createElement("BUTTON");
|
||||
//If it is a header capture which level and pass on to button
|
||||
if (element_type.length == 2 && element_type[0] == 'h') {
|
||||
var newClass = 'clps' + element_type[1];
|
||||
//collapses the section by default only if javascript is working
|
||||
contents[i].style.maxHeight = 0;
|
||||
//Build the button and define behavior
|
||||
btn.className += " " + newClass;
|
||||
btn.innerHTML = element.innerHTML;
|
||||
btn.className += " collapsible";
|
||||
btn.id = btn_id;
|
||||
btn.addEventListener("click", function() {
|
||||
this.classList.toggle("active");
|
||||
var content = this.nextElementSibling;
|
||||
if (content.style.maxHeight != "0px"){
|
||||
content.style.maxHeight = 0;
|
||||
} else {
|
||||
content.style.maxHeight = content.scrollHeight + "px";
|
||||
}
|
||||
});
|
||||
|
||||
//Add the button to the page and remove the header
|
||||
contents[i].parentNode.insertBefore(btn, contents[i]);
|
||||
contents[i].removeChild(element);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -44,7 +44,7 @@ Ease of Use
|
||||
environments without needing to be configured.
|
||||
|
||||
* Being :ref:`stateless` means that configuration settings are easier to manage
|
||||
and remain untouched when system software is updated.
|
||||
and remain untouched when system sofware is updated.
|
||||
|
||||
* :ref:`swupd-guide` simplifies managing software and maintaining compatibility.
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@ For example, the :ref:`collaboration` page toctree looks like:
|
||||
Additionally, each page must include a uniquely named reST label directly before
|
||||
the page title, to enable the `Sphinx ref role`_ for linking to a page.
|
||||
|
||||
For example, this page "Structure and formatting" has the label
|
||||
For example, this page "Structure and formating" has the label
|
||||
``.. _structure-formatting``:
|
||||
|
||||
.. code-block:: rest
|
||||
|
||||
@@ -18,7 +18,7 @@ Use simple English
|
||||
|
||||
Write using simple English: Be brief and communicate only the information that
|
||||
is needed. Be friendly and informative. Emphasize clarity and avoid
|
||||
unnecessary complicated or technical terms. Make the content accessible to
|
||||
unecessary complicated or technical terms. Make the content accessible to
|
||||
non-native speakers.
|
||||
|
||||
Be brief
|
||||
@@ -93,7 +93,7 @@ what they need quickly, and to understand the information more efficiently.
|
||||
document first, and organize supporting information towards the end of the
|
||||
page.
|
||||
* **Write scannable headings.** Expect readers of documentation to skim and scan
|
||||
the content, and to leave if they don't find what they need quickly. Good
|
||||
the content, and to leave if they dont find what they need quickly. Good
|
||||
headings add organization to your content and help the reader to find and
|
||||
understand content more effectively. Follow our guidelines for writing
|
||||
effective `Headings`_.
|
||||
|
||||
@@ -34,7 +34,7 @@ import shlex
|
||||
#]
|
||||
|
||||
extensions = [
|
||||
'sphinx.ext.autodoc', 'sphinx.ext.todo', 'sphinx_sitemap', 'sphinx_tabs.tabs'
|
||||
'sphinx.ext.autodoc', 'sphinx.ext.todo', 'sphinx_sitemap'
|
||||
]
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
|
||||
@@ -19,8 +19,6 @@ installation:
|
||||
* :ref:`system-requirements`
|
||||
* :ref:`compatibility-check`
|
||||
|
||||
.. _preliminary-steps-install-desktop:
|
||||
|
||||
Preliminary steps
|
||||
*****************
|
||||
|
||||
@@ -58,8 +56,6 @@ these steps.
|
||||
|
||||
#. Reboot the target system.
|
||||
|
||||
.. _preliminary-steps-install-desktop-end:
|
||||
|
||||
#. Select :guilabel:`Clear Linux OS` in the boot menu, shown in Figure 1.
|
||||
|
||||
.. figure:: /_figures/bare-metal-install-desktop/bare-metal-install-desktop-01.png
|
||||
@@ -144,9 +140,8 @@ To fulfill minimum installation requirements, complete the
|
||||
|
||||
* Check marks indicate a selection has been made.
|
||||
|
||||
* The installer image contains the default bundles required for
|
||||
installation. An Internet connection is only required if you install
|
||||
additional bundles from `Advanced options`_.
|
||||
* An Internet connection is required. You may want to launch a browser
|
||||
prior to installation to verify your Internet connection.
|
||||
|
||||
|CL| Desktop Installer
|
||||
**********************
|
||||
@@ -651,11 +646,6 @@ Create partitions per requirements in Table 1.
|
||||
- /
|
||||
- *Size depends upon use case/desired bundles.*
|
||||
|
||||
Troubleshooting
|
||||
***************
|
||||
|
||||
:ref:`erase-lvm-troubleshooting-tip`
|
||||
|
||||
.. _Downloads: https://clearlinux.org/downloads
|
||||
|
||||
|
||||
|
||||
@@ -468,99 +468,6 @@ be configured post-installation using the ``cryptsetup`` tool.
|
||||
|
||||
:guilabel:`Confirm` is only highlighted if passphrases match.
|
||||
|
||||
Manage User
|
||||
===========
|
||||
|
||||
Add New User
|
||||
------------
|
||||
|
||||
#. In Required Options, select :guilabel:`Manage User`.
|
||||
|
||||
#. Select :guilabel:`Add New User` as shown in Figure 18.
|
||||
|
||||
.. figure:: /_figures/bare-metal-install-server/bare-metal-install-server-18.png
|
||||
:scale: 100%
|
||||
:alt: Add New User, User Name
|
||||
|
||||
Figure 18: Add New User
|
||||
|
||||
#. Optional: Enter a :guilabel:`User Name`.
|
||||
|
||||
.. note:
|
||||
|
||||
The User Name must be alphanumeric and can include spaces, commas, underscores or hyphens. Maximum length is 64 characters.
|
||||
|
||||
.. figure:: /_figures/bare-metal-install-server/bare-metal-install-server-19.png
|
||||
:scale: 100%
|
||||
:alt: User Name
|
||||
|
||||
Figure 19: User Name
|
||||
|
||||
#. Enter a :guilabel:`Login`.
|
||||
|
||||
.. note::
|
||||
|
||||
The User Login must be alphanumeric and can include hyphens and underscores. Maximum length is 31 characters.
|
||||
|
||||
#. Enter a :guilabel:`Password`.
|
||||
|
||||
.. note:
|
||||
|
||||
Minimum length is 8 characters. Maximum length is 255 characters.
|
||||
|
||||
#. In :guilabel:`Confirm`, enter the same password.
|
||||
|
||||
#. The :guilabel:`Administrator` checkbox is selected by default.
|
||||
|
||||
.. note::
|
||||
|
||||
Selecting Administrator enables sudo privileges for the user. For the installation to proceed, at least one user must be assigned as an Administrator.
|
||||
|
||||
#. Select :kbd:`Confirm`. To reset the form, select :guilabel:`Reset`.
|
||||
|
||||
#. In :guilabel:`Manage User`, navigate to :guilabel:`Confirm`.
|
||||
|
||||
#. With :guilabel:`Confirm` highlighted, select :kbd:`Enter`.
|
||||
|
||||
Modify / Delete User
|
||||
--------------------
|
||||
|
||||
#. In :guilabel:`Manage User`, navigate to the user you wish
|
||||
to modify until highlighted, as shown in Figure 20.
|
||||
|
||||
#. Select :kbd:`Enter` to modify the user.
|
||||
|
||||
.. figure:: /_figures/bare-metal-install-server/bare-metal-install-server-20.png
|
||||
:scale: 100%
|
||||
:alt: Modify User
|
||||
|
||||
Figure 20: Modify User
|
||||
|
||||
#. Modify user details as desired.
|
||||
|
||||
#. Navigate to :kbd:`Confirm` until highlighted.
|
||||
|
||||
.. note::
|
||||
|
||||
Optional: Select :guilabel:`Reset` to rest the form.
|
||||
|
||||
#. Select :guilabel:`Confirm` to save the changes you made.
|
||||
|
||||
#. Optional: In :guilabel:`Modify User`, to delete the user, navigate to
|
||||
the :guilabel:`Delete` button and select :kbd:`Enter`.
|
||||
|
||||
.. figure:: /_figures/bare-metal-install-server/bare-metal-install-server-21.png
|
||||
:scale: 100%
|
||||
:alt: Delete User
|
||||
|
||||
Figure 21: Delete User
|
||||
|
||||
You are returned to :guilabel:`Manage User`.
|
||||
|
||||
#. Navigate to :kbd:`Confirm` until highlighted.
|
||||
|
||||
#. Select :guilabel:`Enter` to complete :guilabel:`Manage User` options.
|
||||
|
||||
Telemetry
|
||||
=========
|
||||
|
||||
@@ -576,18 +483,19 @@ Select your desired option on whether to participate in telemetry.
|
||||
|
||||
#. Select :kbd:`Enter` to confirm.
|
||||
|
||||
.. figure:: /_figures/bare-metal-install-server/bare-metal-install-server-22.png
|
||||
.. figure:: /_figures/bare-metal-install-server/bare-metal-install-server-18.png
|
||||
:scale: 100%
|
||||
:alt: Enable Telemetry
|
||||
|
||||
Figure 22: Enable Telemetry
|
||||
Figure 18: Enable Telemetry
|
||||
|
||||
Recommended options
|
||||
*******************
|
||||
|
||||
After you complete the `Required options`_, we highly recommend completing
|
||||
some `Advanced options`_:
|
||||
these selected `Advanced options`_ at minimum:
|
||||
|
||||
* `Manage User`_ Assign a new user with administrative rights
|
||||
* `Assign Hostname`_ Simplify your development environment
|
||||
|
||||
Skip to finish installation
|
||||
@@ -625,22 +533,22 @@ interface settings are automatically applied.
|
||||
|
||||
.. note:: Multiple network interfaces may appear.
|
||||
|
||||
.. figure:: /_figures/bare-metal-install-server/bare-metal-install-server-23.png
|
||||
.. figure:: /_figures/bare-metal-install-server/bare-metal-install-server-19.png
|
||||
:scale: 100%
|
||||
:alt: Configure Network Interfaces
|
||||
|
||||
Figure 23: Configure Network Interfaces
|
||||
Figure 19: Configure Network Interfaces
|
||||
|
||||
#. Notice :guilabel:`Automatic / dhcp` is selected by default (at bottom).
|
||||
|
||||
Optional: Navigate to the checkbox :guilabel:`Automatic / dhcp` and select
|
||||
:kbd:`Spacebar` to deselect.
|
||||
|
||||
.. figure:: /_figures/bare-metal-install-server/bare-metal-install-server-24.png
|
||||
.. figure:: /_figures/bare-metal-install-server/bare-metal-install-server-20.png
|
||||
:scale: 100%
|
||||
:alt: Network interface configuration
|
||||
|
||||
Figure 24: Network interface configuration
|
||||
Figure 20: Network interface configuration
|
||||
|
||||
#. Navigate to the appropriate fields and assign the desired
|
||||
network configuration.
|
||||
@@ -676,11 +584,11 @@ instruction.
|
||||
|
||||
#. Navigate to the field :guilabel:`HTTPS Proxy`.
|
||||
|
||||
.. figure:: /_figures/bare-metal-install-server/bare-metal-install-server-25.png
|
||||
.. figure:: /_figures/bare-metal-install-server/bare-metal-install-server-21.png
|
||||
:scale: 100%
|
||||
:alt: Configure the network proxy
|
||||
|
||||
Figure 25: Configure the network proxy
|
||||
Figure 21: Configure the network proxy
|
||||
|
||||
#. Enter the desired proxy address and port using conventional syntax,
|
||||
such as: \http://address:port.
|
||||
@@ -701,13 +609,13 @@ select :guilabel:`Test Network Settings` and select :guilabel:`Enter`.
|
||||
.. note::
|
||||
If using the :command:`off-line installer`, this option is not available.
|
||||
|
||||
A progress bar appears as shown in Figure 26.
|
||||
A progress bar appears as shown in Figure 22.
|
||||
|
||||
.. figure:: /_figures/bare-metal-install-server/bare-metal-install-server-26.png
|
||||
.. figure:: /_figures/bare-metal-install-server/bare-metal-install-server-22.png
|
||||
:scale: 100%
|
||||
:alt: Testing Networking dialog
|
||||
|
||||
Figure 26: Testing Networking dialog
|
||||
Figure 22: Testing Networking dialog
|
||||
|
||||
.. note::
|
||||
|
||||
@@ -728,11 +636,11 @@ Bundle selection is disabled if no network connection exists.
|
||||
|
||||
#. Select :kbd:`Spacebar` to select the checkbox for each desired bundle.
|
||||
|
||||
.. figure:: /_figures/bare-metal-install-server/bare-metal-install-server-27.png
|
||||
.. figure:: /_figures/bare-metal-install-server/bare-metal-install-server-23.png
|
||||
:scale: 100%
|
||||
:alt: Bundle Selection
|
||||
|
||||
Figure 27: Bundle Selection
|
||||
Figure 23: Bundle Selection
|
||||
|
||||
#. Optional: To start developing with |CL|, we recommend
|
||||
adding :file:`os-clr-on-clr`.
|
||||
@@ -743,6 +651,107 @@ Bundle selection is disabled if no network connection exists.
|
||||
|
||||
Optional: Skip to `Finish installation`_.
|
||||
|
||||
Manage User
|
||||
===========
|
||||
|
||||
Add New User
|
||||
------------
|
||||
|
||||
#. In Advanced Options, select :guilabel:`Manage User`.
|
||||
|
||||
#. Select :guilabel:`Add New User` as shown in Figure 24.
|
||||
|
||||
.. figure:: /_figures/bare-metal-install-server/bare-metal-install-server-24.png
|
||||
:scale: 100%
|
||||
:alt: Add New User, User Name
|
||||
|
||||
Figure 24: Add New User
|
||||
|
||||
#. Optional: Enter a :guilabel:`User Name`.
|
||||
|
||||
.. note:
|
||||
|
||||
The User Name must be alphanumeric and can include spaces, commas, or
|
||||
hyphens. Maximum length is 64 characters.
|
||||
|
||||
.. figure:: /_figures/bare-metal-install-server/bare-metal-install-server-25.png
|
||||
:scale: 100%
|
||||
:alt: User Name
|
||||
|
||||
Figure 25: User Name
|
||||
|
||||
#. Enter a :guilabel:`Login`.
|
||||
|
||||
.. note::
|
||||
|
||||
The User Login must be alphanumeric and can include hyphens and underscores. Maximum length is 31 characters.
|
||||
|
||||
#. Enter a :guilabel:`Password`.
|
||||
|
||||
.. note:
|
||||
|
||||
Minimum length is 8 characters. Maximum length is 255 characters.
|
||||
|
||||
#. In :guilabel:`Confirm`, enter the same password.
|
||||
|
||||
#. Optional: Navigate to the :guilabel:`Administrative` checkbox and select
|
||||
:kbd:`Spacebar` to assign administrative rights to the user.
|
||||
|
||||
.. note::
|
||||
|
||||
Selecting this option enables sudo privileges for the user.
|
||||
|
||||
#. Select :kbd:`Confirm`.
|
||||
|
||||
.. note::
|
||||
|
||||
If desired, select :guilabel:`Reset` to reset the form.
|
||||
|
||||
#. In :guilabel:`Manage User`, navigate to :guilabel:`Confirm`.
|
||||
|
||||
#. With :guilabel:`Confirm` highlighted, select :kbd:`Enter`.
|
||||
|
||||
Modify / Delete User
|
||||
--------------------
|
||||
|
||||
#. In :guilabel:`Manage User`, navigate to the user you wish
|
||||
to modify until highlighted, as shown in Figure 26.
|
||||
|
||||
#. Select :kbd:`Enter` to modify the user.
|
||||
|
||||
.. figure:: /_figures/bare-metal-install-server/bare-metal-install-server-26.png
|
||||
:scale: 100%
|
||||
:alt: Modify User
|
||||
|
||||
Figure 26: Modify User
|
||||
|
||||
#. Modify user details as desired.
|
||||
|
||||
#. Navigate to :kbd:`Confirm` until highlighted.
|
||||
|
||||
.. note::
|
||||
|
||||
Optional: Select :guilabel:`Reset` to rest the form.
|
||||
|
||||
#. Select :guilabel:`Confirm` to save the changes you made.
|
||||
|
||||
#. Optional: In :guilabel:`Modify User`, to delete the user, navigate to
|
||||
the :guilabel:`Delete` button and select :kbd:`Enter`.
|
||||
|
||||
.. figure:: /_figures/bare-metal-install-server/bare-metal-install-server-27.png
|
||||
:scale: 100%
|
||||
:alt: Delete User
|
||||
|
||||
Figure 27: Delete User
|
||||
|
||||
You are returned to :guilabel:`Manage User`.
|
||||
|
||||
#. Navigate to :kbd:`Confirm` until highlighted.
|
||||
|
||||
#. Select :guilabel:`Enter` to complete :guilabel:`Manage User` options.
|
||||
|
||||
Optional: Skip to `Finish installation`_.
|
||||
|
||||
Kernel Command Line
|
||||
===================
|
||||
|
||||
@@ -840,7 +849,7 @@ Optional: Skip to `Finish installation`_.
|
||||
Automatic OS Updates
|
||||
====================
|
||||
|
||||
Automatic OS updates are enabled by default. In the rare case that you
|
||||
Automatical OS updates are enabled by default. In the rare case that you
|
||||
need to disable automatic software updates, follow the onscreen instructions,
|
||||
shown in Figure 32.
|
||||
|
||||
@@ -942,61 +951,4 @@ entering :guilabel:`Configure Installation Media`:
|
||||
- Windows\* OS: :command:`diskpart`, then :command:`list disk`
|
||||
- macOS\* platform: :command:`diskutil list`
|
||||
|
||||
.. _erase-lvm-troubleshooting-tip:
|
||||
|
||||
Erase LVM Partitions Before Installing |CL|
|
||||
===========================================
|
||||
|
||||
If you’re planning to install |CL| on a drive that has LVM partitions,
|
||||
you must erase them first before using clr-installer.
|
||||
|
||||
Here is an example of a drive (/dev/sda) with LVMs:
|
||||
|
||||
.. code-block:: console
|
||||
:emphasize-lines: 6-9
|
||||
|
||||
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
|
||||
loop0 7:0 0 627.6M 1 loop
|
||||
sda 8:0 0 335.4G 0 disk
|
||||
├─sda1 8:1 0 200M 0 part
|
||||
├─sda2 8:2 0 1G 0 part
|
||||
└─sda3 8:3 0 334.2G 0 part
|
||||
├─LVM-root 252:0 0 70G 0 lvm
|
||||
├─LVM-home 252:1 0 248.4G 0 lvm
|
||||
└─LVM-swap 252:2 0 15.7G 0 lvm
|
||||
|
||||
If you do not erase the LVMs first, you will encounter a clr-installer
|
||||
error like this:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
root@clr-live~ # clr-installer
|
||||
|
||||
Please report this crash using GitHub Issues:
|
||||
https://github.com/clearlinux/clr-installer/issues
|
||||
|
||||
Include the following as attachments to enable diagnosis:
|
||||
/root/pre-install-clr-installer.yaml
|
||||
/root/clr-installer.log
|
||||
|
||||
You may need to remove any personal data of concern from the attachments.
|
||||
The Installer will now exit.
|
||||
exit status 1
|
||||
|
||||
Error Trace:
|
||||
errors.Wrap()
|
||||
errors/errors.go:91
|
||||
storage.makeFs()
|
||||
storage/ops.go:79
|
||||
|
||||
The quickest and simplest method to erasing the LVMs is to execute these
|
||||
commands:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
sudo sgdisk -Z /dev/<device>
|
||||
sudo partprobe
|
||||
sudo dmsetup remove_all --force
|
||||
sudo partprobe
|
||||
|
||||
.. _Downloads: https://clearlinux.org/downloads
|
||||
|
||||
@@ -279,10 +279,3 @@ instance from running.
|
||||
Congratulations! You are up and running with |CL| on AWS. To see what you
|
||||
can do with your |CL| instance, visit our :ref:`tutorials <tutorials>`
|
||||
section for examples on using your |CL| system.
|
||||
|
||||
Related topics
|
||||
**************
|
||||
|
||||
* :ref:`azure`
|
||||
* :ref:`gce`
|
||||
* :ref:`clr-digitalocean`
|
||||
|
||||
@@ -519,13 +519,6 @@ For additional information visit the |CL|
|
||||
To learn more about the MS Azure CLI 2.0 tool and options that are available,
|
||||
visit the `MS Azure documentation and tutorials`_ website.
|
||||
|
||||
Related topics
|
||||
**************
|
||||
|
||||
* :ref:`gce`
|
||||
* :ref:`aws-web`
|
||||
* :ref:`clr-digitalocean`
|
||||
|
||||
.. _`Azure Portal`:
|
||||
https://portal.azure.com
|
||||
|
||||
|
||||
@@ -1,364 +0,0 @@
|
||||
.. _clr-digitalocean:
|
||||
|
||||
|CL-ATTR| on DigitalOcean\*
|
||||
###########################
|
||||
|
||||
This guide explains how to import a |CL-ATTR| image to `DigitalOcean`_
|
||||
and then deploy a VM instance.
|
||||
|
||||
.. contents::
|
||||
:local:
|
||||
:depth: 1
|
||||
|
||||
Prerequisites
|
||||
*************
|
||||
|
||||
* Set up a DigitalOcean account.
|
||||
|
||||
* Create an SSH key on your client system that you will use to remote
|
||||
into the VM. You can follow the `DigitalOcean's SSH key creation guide`_.
|
||||
|
||||
Add |CL| Image to DigitalOcean
|
||||
******************************
|
||||
|
||||
Before you can deploy a |CL| instance on DigitalOcean, you need to add
|
||||
an image since it's currently not available in its marketplace.
|
||||
You can use our pre-built image or you can build your own custom image.
|
||||
|
||||
Use pre-built image
|
||||
===================
|
||||
|
||||
.. note::
|
||||
Our cloud images (`clear-<release version>-digitalocean.img.gz`) for
|
||||
DigitalOcean are considered **Beta** until we finish setting up our
|
||||
automated testing of the images against the DigitalOcean environment.
|
||||
Apart from the initial version, `clear-31870-digitalocean.img.gz`_, we
|
||||
cannot guarantee that future versions and updates to the initial
|
||||
version is problems-free.
|
||||
|
||||
.. bktan8 - commented out until the images are fully validated by DevOps
|
||||
and go live on official Downloads page.
|
||||
Go to the |CL| `downloads` page and copy the URL for the
|
||||
**Cloud Guest Legacy** image. See Figure 1.
|
||||
figure:: ../../_figures/digitalocean/01-digitalocean.png
|
||||
:scale: 100 %
|
||||
:alt: Cloud Guest Legacy image
|
||||
Figure 1: Cloud Guest Legacy image
|
||||
|
||||
#. Copy the URL for `clear-31870-digitalocean.img.gz`_.
|
||||
|
||||
#. Skip to the `Upload image`_ section.
|
||||
|
||||
Build custom image
|
||||
==================
|
||||
|
||||
For this method, you need a |CL| system to generate an image using
|
||||
the *clr-installer* tool.
|
||||
|
||||
#. Add the *clr-installer* and *gzip* bundles.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
sudo swupd bundle-add clr-installer gzip
|
||||
|
||||
#. Create an image configuration YAML file.
|
||||
See `Installer YAML Syntax`_ for more information on the clr-installer
|
||||
configuration YAML syntax.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
cat > clear-digitalocean.yaml << EOF
|
||||
#clear-linux-config
|
||||
|
||||
# switch between aliases if you want to install to an actual block device
|
||||
# i.e /dev/sda
|
||||
block-devices: [
|
||||
{name: "bdevice", file: "clear-digitalocean.img"}
|
||||
]
|
||||
|
||||
targetMedia:
|
||||
- name: \${bdevice}
|
||||
size: "800M"
|
||||
type: disk
|
||||
children:
|
||||
- name: \${bdevice}1
|
||||
fstype: ext4
|
||||
options: -O ^64bit
|
||||
mountpoint: /
|
||||
size: "800M"
|
||||
type: part
|
||||
|
||||
bundles: [
|
||||
bootloader,
|
||||
openssh-server,
|
||||
os-cloudguest,
|
||||
os-core,
|
||||
os-core-update,
|
||||
systemd-networkd-autostart
|
||||
]
|
||||
|
||||
autoUpdate: false
|
||||
postArchive: false
|
||||
postReboot: false
|
||||
telemetry: false
|
||||
legacyBios: true
|
||||
|
||||
keyboard: us
|
||||
language: en_US.UTF-8
|
||||
kernel: kernel-kvm
|
||||
|
||||
version: 0
|
||||
EOF
|
||||
|
||||
The settings that are required in order to make the image
|
||||
work on DigitalOcean are:
|
||||
|
||||
* *os-cloudguest* bundle: Allows DigitalOcean to provision the
|
||||
image with settings such as hostname, resource (CPU, memory,
|
||||
storage) sizing, and user creation.
|
||||
* *legacyBios: true*: The image need to support legacy BIOS to boot
|
||||
on DigitalOcean.
|
||||
|
||||
#. Generate the image.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
sudo clr-installer -c clear-digitalocean.yaml
|
||||
|
||||
The output should be :file:`clear-digitalocean.img`.
|
||||
|
||||
#. Compress the image with *gzip* to save bandwidth and upload time.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
gzip clear-digitalocean.img
|
||||
|
||||
The output should be :file:`clear-digitalocean.img.gz`.
|
||||
|
||||
.. note::
|
||||
|
||||
*bzip2* is the other compression format DigitalOcean accepts.
|
||||
|
||||
Upload image
|
||||
============
|
||||
|
||||
#. On DigitalOcean's website, go to :menuselection:`MANAGE --> Images
|
||||
--> Custom Images`.
|
||||
|
||||
See Figure 1.
|
||||
|
||||
.. figure:: ../../_figures/digitalocean/01-digitalocean.png
|
||||
:scale: 100 %
|
||||
:alt: DigitalOcean - Upload custom images
|
||||
|
||||
Figure 1: DigitalOcean - Upload custom images
|
||||
|
||||
#. Select an upload method.
|
||||
|
||||
* To import a pre-built image from |CL| `downloads`_, click
|
||||
:guilabel:`Import via URL`, paste the URL, and click :guilabel:`Next`.
|
||||
|
||||
See Figure 2.
|
||||
|
||||
.. figure:: ../../_figures/digitalocean/02-digitalocean.png
|
||||
:scale: 100 %
|
||||
:alt: DigitalOcean - Import via URL
|
||||
|
||||
Figure 2: DigitalOcean - Import via URL
|
||||
|
||||
* To import your custom image, click :guilabel:`Upload Image`
|
||||
and select the image from your client system.
|
||||
|
||||
#. Set the :guilabel:`DISTRIBUTION` type as :guilabel:`Unknown`.
|
||||
|
||||
See Figure 3.
|
||||
|
||||
|
|
||||
|
||||
#. Choose your preferred datacenter region.
|
||||
|
||||
#. Click :guilabel:`Upload Image`.
|
||||
Wait for the upload to finish before proceeding to the next section.
|
||||
|
||||
.. figure:: ../../_figures/digitalocean/03-digitalocean.png
|
||||
:scale: 100 %
|
||||
:alt: DigitalOcean - Set image distribution type, region, tag
|
||||
|
||||
Figure 3: DigitalOcean - Set image distribution type, region, tag
|
||||
|
||||
Create and Deploy a |CL| Instance
|
||||
*********************************
|
||||
|
||||
#. On DigitalOcean's website, go to :menuselection:`MANAGE --> Droplets`
|
||||
and then click :guilabel:`Create Droplet`.
|
||||
|
||||
See Figure 4.
|
||||
|
||||
.. figure:: ../../_figures/digitalocean/04-digitalocean.png
|
||||
:scale: 100 %
|
||||
:alt: DigitalOcean - Create Droplet
|
||||
|
||||
Figure 4: DigitalOcean - Create Droplet
|
||||
|
||||
#. Under :guilabel:`Choose an image`, select :guilabel:`Custom images`.
|
||||
|
||||
See Figure 5.
|
||||
|
||||
|
|
||||
|
||||
#. Select your uploaded |CL| image.
|
||||
|
||||
.. figure:: ../../_figures/digitalocean/05-digitalocean.png
|
||||
:scale: 100 %
|
||||
:alt: DigitalOcean - Choose custom image
|
||||
|
||||
Figure 5: DigitalOcean - Choose custom image
|
||||
|
||||
#. Under :guilabel:`Choose a plan`, select your preferred plan.
|
||||
|
||||
See Figure 6.
|
||||
|
||||
.. figure:: ../../_figures/digitalocean/06-digitalocean.png
|
||||
:scale: 100 %
|
||||
:alt: DigitalOcean - Choose plan
|
||||
|
||||
Figure 6: DigitalOcean - Choose plan
|
||||
|
||||
#. Under :guilabel:`Choose a datacenter region`, select the region you
|
||||
want the instance deployed to.
|
||||
|
||||
See Figure 7.
|
||||
|
||||
.. figure:: ../../_figures/digitalocean/07-digitalocean.png
|
||||
:scale: 100 %
|
||||
:alt: DigitalOcean - Choose datacenter region
|
||||
|
||||
Figure 7: DigitalOcean - Choose datacenter region
|
||||
|
||||
#. Assign SSH key to default *clear* user.
|
||||
|
||||
By default, the user *clear* will be added to the instance and
|
||||
an SSH key must be assigned to this account.
|
||||
|
||||
a. Under :guilabel:`Authentication`, select :guilabel:`SSH keys` and
|
||||
click :guilabel:`New SSH Key`.
|
||||
|
||||
See Figure 8.
|
||||
|
||||
.. figure:: ../../_figures/digitalocean/08-digitalocean.png
|
||||
:scale: 100 %
|
||||
:alt: DigitalOcean - Add SSH key
|
||||
|
||||
Figure 8: DigitalOcean - Add SSH key
|
||||
|
||||
#. Copy and paste your SSH public key in the :guilabel:`SSH key content`
|
||||
text field.
|
||||
|
||||
See Figure 9.
|
||||
|
||||
|
|
||||
|
||||
#. Give a name for the SSH key.
|
||||
|
||||
#. Click :guilabel:`Add SSH Key`.
|
||||
|
||||
.. figure:: ../../_figures/digitalocean/09-digitalocean.png
|
||||
:scale: 100 %
|
||||
:alt: DigitalOcean - Add public SSH key
|
||||
|
||||
Figure 9: DigitalOcean - Add public SSH key
|
||||
|
||||
.. note::
|
||||
|
||||
If you need to add additional users to the instance, you can do that
|
||||
wth a YAML-formatted *cloud-config* user data script.
|
||||
For more information on cloud-config scripting for |CL|, see our
|
||||
subset implementation of cloud-init called `micro-config-drive`_.
|
||||
|
||||
a. Under :guilabel:`Select additional options`,
|
||||
select :guilabel:`User data`.
|
||||
|
||||
#. Add your YAML-formatted *cloud-config* user data in the field below.
|
||||
Here is a simple example:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
#cloud-config
|
||||
|
||||
users:
|
||||
- name: foobar
|
||||
gecos: Foo B. Bar
|
||||
homedir: /home/foobar
|
||||
ssh-authorized-keys:
|
||||
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC65OihS4UP27xKOpqKWgT9
|
||||
mgUNwEqhUEpTGGvopjT65Y/KU9Wfj6EYsdGzbHHcMUhFSTxAUAV4POH5d0LR
|
||||
MzI7sXMe528eCmpm2fTOHDDkVrurP/Jr2bjB9IrfSMkBYS8uRd603xNg/RDq
|
||||
EH3XzVeEDdEAxoej0mzsJ2UkQSBi+PD1J7JeCbX2lsb55x2yWzaUa+BTai7+
|
||||
/TU4UabTRDtFTiXhx2rImSSguofDISVll6W5TTzbGmHdoEI+8DIAFU66ZgC9
|
||||
SzL75LQi1YAWlj5XG+dXhN6Ev6KFM34odvWdxeCj0jcx5UIXcieBfOuLujEH
|
||||
dVybwNLG7hxDy/67BA1j username@mydomain.com
|
||||
sudo:
|
||||
- [ "ALL=(ALL) NOPASSWD:ALL" ]
|
||||
|
||||
#. Under :guilabel:`Finalize and create`:
|
||||
|
||||
a. Set the number of instances you want to deploy.
|
||||
|
||||
#. Set the hostname for the instance.
|
||||
|
||||
See Figure 10.
|
||||
|
||||
|
|
||||
|
||||
#. Click :guilabel:`Create Droplet` to deploy the instance.
|
||||
|
||||
.. figure:: ../../_figures/digitalocean/10-digitalocean.png
|
||||
:scale: 100 %
|
||||
:alt: DigitalOcean - Finalize and create Droplet
|
||||
|
||||
Figure 10: DigitalOcean - Finalize and create Droplet
|
||||
|
||||
Connect to Your |CL| Instance
|
||||
*****************************
|
||||
|
||||
#. On DigitalOcean's website, go to :menuselection:`MANAGE --> Droplets`.
|
||||
|
||||
See Figure 11.
|
||||
|
||||
|
|
||||
|
||||
#. Get the IP address of your |CL| instance.
|
||||
|
||||
.. figure:: ../../_figures/digitalocean/11-digitalocean.png
|
||||
:scale: 100 %
|
||||
:alt: DigitalOcean - Get Droplet IP address
|
||||
|
||||
Figure 11: DigitalOcean - Get Droplet IP address
|
||||
|
||||
#. On your client system, SSH into your instance.
|
||||
For example:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
ssh clear@<IP-address-of-instance> -i <SSH-private-key>
|
||||
|
||||
|
||||
Related topics
|
||||
**************
|
||||
|
||||
* :ref:`gce`
|
||||
* :ref:`azure`
|
||||
* :ref:`aws-web`
|
||||
|
||||
.. _clear-31870-digitalocean.img.gz: https://cdn.download.clearlinux.org/releases/31870/clear/clear-31870-digitalocean.img.gz
|
||||
|
||||
.. _DigitalOcean: https://www.digitalocean.com/
|
||||
|
||||
.. _DigitalOcean's SSH key creation guide: https://www.digitalocean.com/docs/droplets/how-to/add-ssh-keys/create-with-openssh/
|
||||
|
||||
.. _downloads: https://clearlinux.org/downloads
|
||||
|
||||
.. _Installer YAML Syntax:
|
||||
https://github.com/clearlinux/clr-installer/blob/master/scripts/InstallerYAMLSyntax.md
|
||||
|
||||
.. _micro-config-drive: https://github.com/clearlinux/micro-config-drive
|
||||
@@ -260,7 +260,7 @@ Related topics
|
||||
|
||||
* :ref:`azure`
|
||||
* :ref:`aws-web`
|
||||
* :ref:`clr-digitalocean`
|
||||
|
||||
|
||||
.. _Google Cloud Platform: https://cloud.google.com/
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ Check processor and EFI firmware compatibility
|
||||
##############################################
|
||||
|
||||
Before installing |CL-ATTR|, check your host system's processor and EFI firmware
|
||||
compatibility. To check compatibility, choose one of the following paths:
|
||||
compatibility. To check compatibilty, choose one of the following paths:
|
||||
|
||||
* From a system with a Linux\* OS installed, follow the instructions to :ref:`check-compatibility-steps`.
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ Get started
|
||||
###########
|
||||
|
||||
The Get Started section guides you through the requirements and installation of
|
||||
|CL-ATTR|. Follow these step-by-step instructions to get started with |CL|, fast.
|
||||
|CL-ATTR|. Follow these step-by-step intructions to get started with |CL|, fast.
|
||||
|
||||
Pre-install
|
||||
***********
|
||||
@@ -15,7 +15,7 @@ There are a couple of things to take care of before you install.
|
||||
* :ref:`compatibility-check`
|
||||
* :ref:`bootable-usb`
|
||||
|
||||
When installing |CL-ATTR| in a VM, consider which kernel to use.
|
||||
When installing |CL-ATTR| in a VM, consider which kernel to use.
|
||||
|
||||
* :ref:`Compatible VM kernels <vm-kernels>`
|
||||
|
||||
@@ -35,7 +35,6 @@ Install
|
||||
bare-metal-install-desktop
|
||||
bare-metal-install-server
|
||||
install-configfile
|
||||
ipxe-install
|
||||
|
||||
.. _virtual-machine-install:
|
||||
|
||||
@@ -56,4 +55,4 @@ Deploy to the cloud
|
||||
:maxdepth: 1
|
||||
:glob:
|
||||
|
||||
cloud-install/*
|
||||
cloud-install/*
|
||||
@@ -1,580 +0,0 @@
|
||||
.. _ipxe-install:
|
||||
|
||||
Install |CL| Over the Network with iPXE
|
||||
#######################################
|
||||
|
||||
PXE :abbr:`PXE (Pre-boot Execution Environment)` is an industry standard
|
||||
that describes client-server interaction with network-boot software and
|
||||
uses the DHCP and TFTP protocols. iPXE, a fork of gPXE, is an open-source
|
||||
version of PXE. It enables computers without built-in PXE capability to
|
||||
network-boot using protocols such as HTTP, :abbr:`iSCSI (Internet Small
|
||||
Computer Systems Interface)`, :abbr:`AoE (ATA over Ethernet\*)`, and
|
||||
:abbr:`FCoE (Fiber Channel over Ethernet\*)`.
|
||||
|
||||
This guide demonstrates how to setup an iPXE server to install |CL-ATTR|
|
||||
over the network.
|
||||
|
||||
Figure 1 depicts the flow of information between an iPXE server and a
|
||||
PXE client.
|
||||
|
||||
.. figure:: ../_figures/ipxe/ipxe-install-1.png
|
||||
:alt: PXE information flow
|
||||
|
||||
Figure 1: PXE information flow
|
||||
|
||||
.. caution::
|
||||
|
||||
The |CL| PXE image that boots through the iPXE process automatically
|
||||
erases all data and partitions on the PXE client system and performs
|
||||
a fresh installation according to a clr-installer YAML configuration
|
||||
file.
|
||||
|
||||
Prerequisites
|
||||
*************
|
||||
|
||||
Your iPXE server must have:
|
||||
|
||||
* Ethernet/LAN boot option
|
||||
* At least two network adapters
|
||||
* Connection to a public (WAN) network
|
||||
* Secure Boot option disabled in BIOS
|
||||
|
||||
Your clients must have:
|
||||
|
||||
* Ethernet/LAN boot option
|
||||
* One network adapter
|
||||
* Secure Boot option disabled in BIOS
|
||||
* The minimum requirements to run |CL|. Review the :ref:`compatibility-check`.
|
||||
|
||||
Connect the iPXE server and clients to a network switch on a private
|
||||
(LAN) network, as shown in Figure 2.
|
||||
|
||||
.. figure:: ../_figures/ipxe/ipxe-install-2.png
|
||||
:alt: Network topology
|
||||
|
||||
Figure 2: Network topology
|
||||
|
||||
Install |CL| on server
|
||||
**********************
|
||||
|
||||
#. Install |CL| on the system that will serve as the iPXE server.
|
||||
We recommend using the `server` version.
|
||||
|
||||
#. Open a terminal window.
|
||||
|
||||
#. Add the :command:`pxe-server` bundle to your |CL| system.
|
||||
The bundle contains all the necessary apps (web server, iPXE firmwares,
|
||||
dnsmasq which provides TFTP, DNS, DHCP functionalities) to run an
|
||||
iPXE server.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
sudo swupd bundle-add pxe-server
|
||||
|
||||
#. Define the following variables used for setting up the iPXE server.
|
||||
Be sure to substitute the value for the WAN_INTERFACE and
|
||||
LAN_INTERFACE variables with your LAN and WAN interfaces names.
|
||||
Use :command:`ip a` to list your network devices and get their
|
||||
names.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
IPXE_APP_NAME=ipxe
|
||||
IPXE_PORT=50000
|
||||
WEB_ROOT_DIR=/var/www
|
||||
IPXE_ROOT_DIR=${WEB_ROOT_DIR}/${IPXE_APP_NAME}
|
||||
TFTP_ROOT_DIR=/srv/tftp
|
||||
CLR_INSTALLER_CONF_DIR=clr-installer-configs
|
||||
WAN_INTERFACE=eno1
|
||||
LAN_INTERFACE=eno2
|
||||
IPXE_SUBNET=192.168.100
|
||||
IPXE_LAN_IP=${IPXE_SUBNET}.1
|
||||
IPXE_SUBNET_MASK_IP=255.255.255.0
|
||||
IPXE_SUBNET_BITMASK=16
|
||||
|
||||
Setup nginx web server to host iPXE
|
||||
***********************************
|
||||
|
||||
#. Set up an nginx web server to serve the |CL| PXE image to clients
|
||||
using these steps:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
sudo mkdir -p /etc/nginx/conf.d
|
||||
sudo cp /usr/share/nginx/conf/nginx.conf.example /etc/nginx/nginx.conf
|
||||
sudo tee -a /etc/nginx/conf.d/${IPXE_APP_NAME}.conf << EOF
|
||||
server {
|
||||
listen ${IPXE_PORT};
|
||||
server_name localhost;
|
||||
# directory to store ipxe
|
||||
location /${IPXE_APP_NAME}/ {
|
||||
root ${WEB_ROOT_DIR}/${IPXE_APP_NAME};
|
||||
rewrite ^/${IPXE_APP_NAME}(/.*)$ \$1 break;
|
||||
}
|
||||
# directory to store clr-installer configs
|
||||
location /${CLR_INSTALLER_CONF_DIR}/ {
|
||||
root ${WEB_ROOT_DIR}/${CLR_INSTALLER_CONF_DIR};
|
||||
rewrite ^/${CLR_INSTALLER_CONF_DIR}(/.*)$ \$1 break;
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
#. Set nginx to start automatically on boot and then start it.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
sudo systemctl enable nginx
|
||||
sudo systemctl start nginx
|
||||
|
||||
Configure iPXE
|
||||
**************
|
||||
|
||||
#. Download the latest |CL| PXE image and extract the files into the iPXE root.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
sudo curl -o /tmp/clear-pxe.tar.xz \
|
||||
https://cdn.download.clearlinux.org/current/clear-$(curl \
|
||||
https://cdn.download.clearlinux.org/latest)-pxe.tar.xz
|
||||
sudo mkdir -p ${IPXE_ROOT_DIR}
|
||||
sudo tar -xJf /tmp/clear-pxe.tar.xz -C ${IPXE_ROOT_DIR}
|
||||
sudo ln -sf $(ls ${IPXE_ROOT_DIR} | grep 'org.clearlinux.*') ${IPXE_ROOT_DIR}/linux
|
||||
|
||||
.. note::
|
||||
|
||||
Ensure that the initial ramdisk file is named :file:`initrd` and
|
||||
the kernel file is named :file:`linux`, which is a symbolic link to the
|
||||
actual kernel file.
|
||||
|
||||
#. Create an iPXE boot script. The script presents a menu of bootable images to
|
||||
download, boot, and install |CL|, according to a designated clr-installer
|
||||
YAML configuration file.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
sudo tee -a ${IPXE_ROOT_DIR}/ipxe_boot_script.ipxe << EOF
|
||||
#!ipxe
|
||||
|
||||
set menu-timeout 5000
|
||||
set submenu-timeout \${menu-timeout}
|
||||
isset \${menu-default} || set menu-default clr-server
|
||||
|
||||
:menu
|
||||
menu Select a version of Clear Linux OS to install
|
||||
item clr-desktop Clear Linux OS (Desktop)
|
||||
item clr-server Clear Linux OS (Server)
|
||||
item ipxe-shell iPXE Shell
|
||||
item reboot Reboot
|
||||
|
||||
choose --timeout \${menu-timeout} --default \${menu-default} selected || goto cancel
|
||||
set menu-timeout 0
|
||||
goto \${selected}
|
||||
|
||||
:clr-desktop
|
||||
echo Booting and installing Clear Linux OS (Desktop)...
|
||||
kernel linux quiet init=/usr/lib/systemd/systemd-bootchart initcall_debug \\
|
||||
tsc=reliable no_timer_check noreplace-smp rw initrd=initrd \\
|
||||
clri.descriptor=http://${IPXE_LAN_IP}:${IPXE_PORT}/${CLR_INSTALLER_CONF_DIR}/clr-desktop.yaml
|
||||
initrd initrd
|
||||
boot || goto failed
|
||||
|
||||
:clr-server
|
||||
echo Booting and installing Clear Linux OS (Server)...
|
||||
kernel linux quiet init=/usr/lib/systemd/systemd-bootchart initcall_debug \\
|
||||
tsc=reliable no_timer_check noreplace-smp rw initrd=initrd \\
|
||||
clri.descriptor=http://${IPXE_LAN_IP}:${IPXE_PORT}/${CLR_INSTALLER_CONF_DIR}/clr-server.yaml
|
||||
initrd initrd
|
||||
boot || goto failed
|
||||
|
||||
:cancel
|
||||
echo Menu canceled, going to iPXE shell
|
||||
|
||||
:ipxe-shell
|
||||
echo Type 'exit' to return to the menu
|
||||
shell
|
||||
set menu-timeout 0
|
||||
set submenu-timeout 0
|
||||
goto menu
|
||||
|
||||
echo Booting
|
||||
:failed
|
||||
echo Booting failed, going to iPXE shell
|
||||
goto shell
|
||||
|
||||
:reboot
|
||||
echo Rebooting...
|
||||
sleep 1
|
||||
reboot
|
||||
EOF
|
||||
|
||||
.. note::
|
||||
|
||||
The `clri.discriptor` option tells clr-installer where to download a YAML
|
||||
configuration file to use. Without this option, the |CL| PXE image will
|
||||
simply boot and not perform any installation.
|
||||
|
||||
Add clr-installer YAML configuration files
|
||||
******************************************
|
||||
|
||||
After the |CL| PXE image boot, clr-installer downloads the YAML configuration file
|
||||
specified in the kernel command-line and installs accordingly.
|
||||
|
||||
See `Installer YAML Syntax`_ for more information on clr-installer configuration
|
||||
YAML syntax.
|
||||
|
||||
#. Create the directory to store the configuration files.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
sudo mkdir -p ${WEB_ROOT_DIR}/${CLR_INSTALLER_CONF_DIR}
|
||||
|
||||
#. Create this sample `Desktop` configuration called :file:`clr-desktop.yaml`.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
sudo tee -a ${WEB_ROOT_DIR}/${CLR_INSTALLER_CONF_DIR}/clr-desktop.yaml << EOF
|
||||
#clear-linux-config
|
||||
|
||||
# switch between aliases if you want to install to an actuall block device
|
||||
# i.e /dev/sda
|
||||
block-devices: [
|
||||
{name: "bdevice", file: "/dev/sda"}
|
||||
]
|
||||
|
||||
targetMedia:
|
||||
- name: \${bdevice}
|
||||
type: disk
|
||||
children:
|
||||
- name: \${bdevice}1
|
||||
fstype: vfat
|
||||
mountpoint: /boot
|
||||
size: "150M"
|
||||
type: part
|
||||
- name: \${bdevice}2
|
||||
fstype: swap
|
||||
size: "250M"
|
||||
type: part
|
||||
- name: \${bdevice}3
|
||||
fstype: ext4
|
||||
mountpoint: /
|
||||
size: "0" # Use remaining disk space
|
||||
type: part
|
||||
|
||||
bundles: [ bootloader, os-core, os-core-update, desktop-autostart, libreoffice,
|
||||
vlc, c-basic, git, openssh-server, vim ]
|
||||
|
||||
autoUpdate: true
|
||||
postArchive: false
|
||||
postReboot: true
|
||||
telemetry: false
|
||||
hostname: clrlinux-desktop
|
||||
keyboard: us
|
||||
language: en_US.UTF-8
|
||||
kernel: kernel-native
|
||||
|
||||
users:
|
||||
- login: clrlinux
|
||||
username: Clear Linux
|
||||
# Password is "clear123"
|
||||
password: \$6\$SJJMfnInWQg.CvMA\$m2F8dJGj71zvi9mSNMktHMsPH3qhBm8pgXDNdaBe2yFfgi479JXvEqWkvQ6OxIUgGNQ5YXFIF0tCn.hEXB90G/
|
||||
admin: true
|
||||
- login: root
|
||||
username: Root Root
|
||||
# Password is "clear123"
|
||||
password: \$6\$SJJMfnInWQg.CvMA\$m2F8dJGj71zvi9mSNMktHMsPH3qhBm8pgXDNdaBe2yFfgi479JXvEqWkvQ6OxIUgGNQ5YXFIF0tCn.hEXB90G/
|
||||
admin: true
|
||||
|
||||
pre-install: [
|
||||
{cmd: "curl -o /tmp/add-issue.sh http://${IPXE_LAN_IP}:${IPXE_PORT}/${CLR_INSTALLER_CONF_DIR}/add-issue.sh"},
|
||||
{cmd: "chmod +x /tmp/add-issue.sh"}
|
||||
]
|
||||
|
||||
post-install: [
|
||||
{cmd: "echo PermitRootLogin yes > \${chrootDir}/etc/ssh/sshd_config"},
|
||||
{cmd: "/tmp/add-issue.sh \${chrootDir}"}
|
||||
]
|
||||
EOF
|
||||
|
||||
|
||||
#. Create this sample `Server` configuration called :file:`clr-server.yaml`.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
sudo tee -a ${WEB_ROOT_DIR}/${CLR_INSTALLER_CONF_DIR}/clr-server.yaml << EOF
|
||||
#clear-linux-config
|
||||
|
||||
# switch between aliases if you want to install to an actuall block device
|
||||
# i.e /dev/sda
|
||||
block-devices: [
|
||||
{name: "bdevice", file: "/dev/sda"}
|
||||
]
|
||||
|
||||
targetMedia:
|
||||
- name: \${bdevice}
|
||||
type: disk
|
||||
children:
|
||||
- name: \${bdevice}1
|
||||
fstype: vfat
|
||||
mountpoint: /boot
|
||||
size: "150M"
|
||||
type: part
|
||||
- name: \${bdevice}2
|
||||
fstype: swap
|
||||
size: "250M"
|
||||
type: part
|
||||
- name: \${bdevice}3
|
||||
fstype: ext4
|
||||
mountpoint: /
|
||||
size: "0" # Use remaining disk space
|
||||
type: part
|
||||
|
||||
bundles: [ bootloader, os-core, os-core-update, vim ]
|
||||
|
||||
autoUpdate: true
|
||||
postArchive: false
|
||||
postReboot: true
|
||||
telemetry: false
|
||||
hostname: clrlinux-server
|
||||
keyboard: us
|
||||
language: en_US.UTF-8
|
||||
kernel: kernel-native
|
||||
|
||||
users:
|
||||
- login: clrlinux
|
||||
username: Clear Linux
|
||||
# Password is "clear123"
|
||||
password: \$6\$SJJMfnInWQg.CvMA\$m2F8dJGj71zvi9mSNMktHMsPH3qhBm8pgXDNdaBe2yFfgi479JXvEqWkvQ6OxIUgGNQ5YXFIF0tCn.hEXB90G/
|
||||
admin: true
|
||||
- login: root
|
||||
username: Root Root
|
||||
# Password is "clear123"
|
||||
password: \$6\$SJJMfnInWQg.CvMA\$m2F8dJGj71zvi9mSNMktHMsPH3qhBm8pgXDNdaBe2yFfgi479JXvEqWkvQ6OxIUgGNQ5YXFIF0tCn.hEXB90G/
|
||||
admin: true
|
||||
|
||||
pre-install: [
|
||||
{cmd: "curl -o /tmp/add-issue.sh http://${IPXE_LAN_IP}:${IPXE_PORT}/${CLR_INSTALLER_CONF_DIR}/add-issue.sh"},
|
||||
{cmd: "chmod +x /tmp/add-issue.sh"}
|
||||
]
|
||||
|
||||
post-install: [
|
||||
{cmd: "echo PermitRootLogin yes > \${chrootDir}/etc/ssh/sshd_config"},
|
||||
{cmd: "/tmp/add-issue.sh \${chrootDir}"}
|
||||
]
|
||||
EOF
|
||||
|
||||
#. Add following content to the :file:`add-issue.sh` script, which will be
|
||||
used by the above two YAML configuration files:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
sudo tee -a ${WEB_ROOT_DIR}/${CLR_INSTALLER_CONF_DIR}/add-issue.sh << EOF
|
||||
#!/bin/bash
|
||||
echo "Creating custom issue file for \$1"
|
||||
|
||||
echo "Welcome to the Clear Linux* OS
|
||||
|
||||
* Documentation: https://clearlinux.org/documentation
|
||||
* Community Support: https://community.clearlinux.org
|
||||
|
||||
" >> \$1/etc/issue
|
||||
|
||||
exit 0
|
||||
EOF
|
||||
|
||||
Configure network
|
||||
*****************
|
||||
|
||||
#. The DNS server, included with the `pxe-server` bundle,
|
||||
conflicts with the DNS stub listener provided in `systemd-resolved`.
|
||||
Disable the DNS stub listener and temporarily stop `systemd-resolved`.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
sudo mkdir -p /etc/systemd
|
||||
sudo tee -a /etc/systemd/resolved.conf << EOF
|
||||
[Resolve]
|
||||
DNSStubListener=no
|
||||
EOF
|
||||
|
||||
sudo systemctl stop systemd-resolved
|
||||
|
||||
#. Disable NetworkManager. The base installation of |CL| comes with two
|
||||
network managers, systemd-networkd and NetworkManager, with the latter
|
||||
being the default. systemd-networkd is recommended for a server use case,
|
||||
so we will disable NetworkManager.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
sudo systemctl mask --now NetworkManager
|
||||
|
||||
#. Assign a static IP address to the LAN side network adapter
|
||||
and restart `systemd-networkd`.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
sudo mkdir -p /etc/systemd/network
|
||||
sudo tee -a /etc/systemd/network/70-internal-static.network << EOF
|
||||
[Match]
|
||||
Name=${LAN_INTERFACE}
|
||||
[Network]
|
||||
DHCP=no
|
||||
Address=${IPXE_LAN_IP}/${IPXE_SUBNET_BITMASK}
|
||||
EOF
|
||||
|
||||
sudo systemctl enable systemd-networkd
|
||||
sudo systemctl restart systemd-networkd
|
||||
|
||||
Setup NAT
|
||||
*********
|
||||
|
||||
#. Configure :abbr:`NAT (Network Address Translation)` to route traffic from
|
||||
the LAN to the WAN network so clients can download upstream bundles for
|
||||
installation. And to make these changes persistent during reboots, save the
|
||||
changes to the firewall.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
sudo iptables -t nat -F POSTROUTING
|
||||
sudo iptables -t nat -A POSTROUTING -o ${WAN_INTERFACE} -j MASQUERADE
|
||||
sudo systemctl enable iptables-save.service
|
||||
sudo systemctl restart iptables-save.service
|
||||
sudo systemctl enable iptables-restore.service
|
||||
sudo systemctl restart iptables-restore.service
|
||||
|
||||
#. Configure the kernel to forward network packets to different interfaces.
|
||||
Otherwise, NAT will not work.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
sudo mkdir -p /etc/sysctl.d
|
||||
sudo tee -a /etc/sysctl.d/80-nat-forwarding.conf << EOF
|
||||
net.ipv4.ip_forward=1
|
||||
EOF
|
||||
|
||||
sudo tee -a /proc/sys/net/ipv4/ip_forward << EOF
|
||||
1
|
||||
EOF
|
||||
|
||||
Setup dnsmaq for DHCP, DNS, and TFTP functionalities
|
||||
****************************************************
|
||||
|
||||
#. Create a configuration file for `dnsmasq` to listen on a dedicated IP address
|
||||
for TFTP, DNS, and DHCP functions. PXE clients on the LAN network will talk to
|
||||
this IP address.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
sudo tee -a /etc/dnsmasq.conf << EOF
|
||||
listen-address=${IPXE_LAN_IP}
|
||||
EOF
|
||||
|
||||
#. Add the options to serve iPXE firmware images to clients over TFTP to
|
||||
the :file:`dnsmasq` configuration file.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
sudo tee -a /etc/dnsmasq.conf << EOF
|
||||
enable-tftp
|
||||
tftp-root=${TFTP_ROOT_DIR}
|
||||
EOF
|
||||
|
||||
#. Add the options to host a DHCP server for clients to the :file:`dnsmasq`
|
||||
configuration file.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
sudo tee -a /etc/dnsmasq.conf << EOF
|
||||
dhcp-leasefile=/var/db/dnsmasq.leases
|
||||
|
||||
dhcp-authoritative
|
||||
dhcp-option=option:router,${IPXE_LAN_IP}
|
||||
dhcp-option=option:dns-server,${IPXE_LAN_IP}
|
||||
|
||||
dhcp-match=set:ipxeclient,60,IPXEClient*
|
||||
dhcp-range=tag:ipxeclient,${IPXE_SUBNET}.2,${IPXE_SUBNET}.253,${IPXE_SUBNET_MASK_IP},15m
|
||||
dhcp-range=tag:!ipxeclient,${IPXE_SUBNET}.2,${IPXE_SUBNET}.253,${IPXE_SUBNET_MASK_IP},6h
|
||||
|
||||
dhcp-match=set:ipxeboot,175
|
||||
dhcp-boot=tag:ipxeboot,http://${IPXE_LAN_IP}:${IPXE_PORT}/${IPXE_APP_NAME}/ipxe_boot_script.ipxe
|
||||
dhcp-boot=tag:!ipxeboot,undionly.kpxe,${IPXE_LAN_IP}
|
||||
EOF
|
||||
|
||||
The configuration provides the following important functions:
|
||||
|
||||
* Directs clients without an iPXE implementation to the TFTP server
|
||||
to acquire architecture-specific iPXE firmware images that allow them
|
||||
to perform an iPXE boot.
|
||||
* Activates only on the network adapter that has an IP address on the
|
||||
defined subnet.
|
||||
* Directs clients to the DNS server.
|
||||
* Directs clients to the iPXE server for routing via NAT.
|
||||
* Divides the private network into two pools of IP addresses. One pool
|
||||
is for network boot and one pool is used after boot. Each pool has
|
||||
their own lease times.
|
||||
|
||||
#. Create a file for `dnsmasq` to record the IP addresses it provides
|
||||
to clients.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
sudo mkdir -p /var/db
|
||||
sudo touch /var/db/dnsmasq.leases
|
||||
|
||||
#. Create a TFTP hosting directory and populate it with the iPXE firmware.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
sudo mkdir -p ${TFTP_ROOT_DIR}
|
||||
sudo ln -sf /usr/share/ipxe/undionly.kpxe ${TFTP_ROOT_DIR}/undionly.kpxe
|
||||
|
||||
#. Start `dnsmasq` and enable startup on boot.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable dnsmasq
|
||||
sudo systemctl restart dnsmasq
|
||||
|
||||
#. Start `systemd-resolved`.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
sudo systemctl start systemd-resolved
|
||||
|
||||
.. note::
|
||||
|
||||
`systemd-resolved` dynamically updates the list of DNS servers for the
|
||||
LAN network if you use the `dnsmasq` DNS server. The setup creates a
|
||||
pass-through DNS server that relies on the DNS servers listed in
|
||||
:file:`/etc/resolv.conf`.
|
||||
|
||||
Verify setup
|
||||
************
|
||||
|
||||
Verify you can access these URLs before deploying:
|
||||
|
||||
* \http://{$IPXE_LAN_IP}:{$IPXE_PORT}/${IPXE_APP_NAME}/ipxe_boot_script.ipxe
|
||||
* \http://{$IPXE_LAN_IP}:{$IPXE_PORT}/${CLR_INSTALLER_CONF_DIR}/clr-desktop.yaml
|
||||
* \http://{$IPXE_LAN_IP}:{$IPXE_PORT}/${CLR_INSTALLER_CONF_DIR}/clr-server.yaml
|
||||
* \http://{$IPXE_LAN_IP}:{$IPXE_PORT}/${CLR_INSTALLER_CONF_DIR}/add-issue.sh
|
||||
|
||||
Deploy
|
||||
******
|
||||
|
||||
#. Connect your client system to the LAN network.
|
||||
|
||||
#. Power on the client.
|
||||
|
||||
#. Set your client to network boot. It should get an IP address and download
|
||||
the iPXE script.
|
||||
|
||||
#. When presented with the iPXE menu, select one of the options. The client
|
||||
will then download and boot the |CL| image. Once booted, clr-installer will
|
||||
download the assigned YAML configuration file and begin to install |CL|.
|
||||
After installation, the client will reboot to |CL|.
|
||||
|
||||
.. _iPXE:
|
||||
http://ipxe.org/
|
||||
|
||||
.. _Installer YAML Syntax:
|
||||
https://github.com/clearlinux/clr-installer/blob/master/scripts/InstallerYAMLSyntax.md
|
||||
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 27 KiB |