6bc5671491
Apply: git diff --full-index --binary anaconda-23.19.10-1..anaconda-25.20.9-1 And resolve conflicts. QubesOS/qubes-issues#2574
382 lines
19 KiB
HTML
Executable File
382 lines
19 KiB
HTML
Executable File
|
|
|
|
<!DOCTYPE html>
|
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
|
<head>
|
|
<meta charset="utf-8">
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
|
|
<title>Specification of the user interaction configuration file — Anaconda 25.14 documentation</title>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="top" title="Anaconda 25.14 documentation" href="index.html"/>
|
|
|
|
|
|
<script src="_static/js/modernizr.min.js"></script>
|
|
|
|
</head>
|
|
|
|
<body class="wy-body-for-nav" role="document">
|
|
|
|
<div class="wy-grid-for-nav">
|
|
|
|
|
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
|
<div class="wy-side-scroll">
|
|
<div class="wy-side-nav-search">
|
|
|
|
|
|
|
|
<a href="index.html" class="icon icon-home"> Anaconda
|
|
|
|
|
|
|
|
</a>
|
|
|
|
|
|
|
|
|
|
<div class="version">
|
|
25.14
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div role="search">
|
|
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
|
|
<input type="text" name="q" placeholder="Search docs" />
|
|
<input type="hidden" name="check_keywords" value="yes" />
|
|
<input type="hidden" name="area" value="default" />
|
|
</form>
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
|
|
|
|
|
|
|
<ul>
|
|
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction to Anaconda</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="release.html">Building a Release</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="boot-options.html">Anaconda Boot Options</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="kickstart.html">Anaconda Kickstart Documentation</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="commit-log.html">Rules for commit messages</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="driverdisc.html">Brief description of DriverDisc version 3</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="iscsi.html">iSCSI and Anaconda</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="multipath.html">Multipath and Anaconda</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="modules.html">pyanaconda</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="testing.html">Testing</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="tests/modules.html">tests</a></li>
|
|
</ul>
|
|
|
|
|
|
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
|
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
|
|
|
|
|
<nav class="wy-nav-top" role="navigation" aria-label="top navigation">
|
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
|
<a href="index.html">Anaconda</a>
|
|
</nav>
|
|
|
|
|
|
|
|
<div class="wy-nav-content">
|
|
<div class="rst-content">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
|
<ul class="wy-breadcrumbs">
|
|
<li><a href="index.html">Docs</a> »</li>
|
|
|
|
<li>Specification of the user interaction configuration file</li>
|
|
<li class="wy-breadcrumbs-aside">
|
|
|
|
|
|
<a href="_sources/user-interaction-config-file-spec.txt" rel="nofollow"> View page source</a>
|
|
|
|
|
|
</li>
|
|
</ul>
|
|
<hr/>
|
|
</div>
|
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
|
<div itemprop="articleBody">
|
|
|
|
<div class="section" id="specification-of-the-user-interaction-configuration-file">
|
|
<h1>Specification of the user interaction configuration file<a class="headerlink" href="#specification-of-the-user-interaction-configuration-file" title="Permalink to this headline">¶</a></h1>
|
|
<table class="docutils field-list" frame="void" rules="none">
|
|
<col class="field-name" />
|
|
<col class="field-body" />
|
|
<tbody valign="top">
|
|
<tr class="field-odd field"><th class="field-name">Version:</th><td class="field-body">1.0</td>
|
|
</tr>
|
|
<tr class="field-even field"><th class="field-name">Authors:</th><td class="field-body">Martin Kolman <<a class="reference external" href="mailto:mkolman%40redhat.com">mkolman<span>@</span>redhat<span>.</span>com</a>></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>This specification aims to establish a configuration file format that can be used
|
|
to communicate information about which installation screens have been seen by the user
|
|
during the installation. Optionally the configuration file might also contain information
|
|
about which configuration options have been changed by the user and if the user has
|
|
explicitly requested post installation setup tools to be disabled.</p>
|
|
<p>While this configuration file is primarily meant to be read (and potentially changed)
|
|
by <em>post</em> installation tools (such as for example Initial Setup and Gnome Initial setup),
|
|
Anaconda will take an existing configuration file into account at startup. This is meant
|
|
to accommodate tools that are run <em>before</em> Anaconda is started, such as a system-wide
|
|
language selection tool that runs before Anaconda is started and which sets language
|
|
for both Anaconda and a Live installation environment.</p>
|
|
<div class="section" id="configuration-file-location">
|
|
<h2>Configuration file location<a class="headerlink" href="#configuration-file-location" title="Permalink to this headline">¶</a></h2>
|
|
<p>The user interaction configuration file is stored in: <code class="docutils literal"><span class="pre">/etc/sysconfig/anaconda</span></code></p>
|
|
</div>
|
|
<div class="section" id="general-configuration-file-syntax">
|
|
<h2>General configuration file syntax<a class="headerlink" href="#general-configuration-file-syntax" title="Permalink to this headline">¶</a></h2>
|
|
<p>The configuration file is based on the INI file de-facto standard,
|
|
eq.: key=value assignments and square bracket framed section headers.</p>
|
|
<p>Comments start with a hash (#) sign and need to be on a separate line.
|
|
Inline comments (eq. behind section or key/value definitions) are not supported.</p>
|
|
<p>For Python programs this file format can be parsed and written by the ConfigParser[0] module available
|
|
from the Python standard library. For programs written in C the GKeyFile[1] parser might be a good choice.
|
|
Comparable INI file parsing and writing modules are available for most other programming languages.</p>
|
|
<p>Example:</p>
|
|
<div class="highlight-python"><div class="highlight"><pre><span></span><span class="c1"># comment example - before the section headers</span>
|
|
|
|
<span class="p">[</span><span class="n">section_1</span><span class="p">]</span>
|
|
<span class="c1"># comment example - inside section 1</span>
|
|
<span class="n">key_a_in_section1</span><span class="o">=</span><span class="n">some_value</span>
|
|
<span class="n">key_b_in_section1</span><span class="o">=</span><span class="n">some_value</span>
|
|
|
|
<span class="p">[</span><span class="n">section_2</span><span class="p">]</span>
|
|
<span class="c1"># comment example - inside section 2</span>
|
|
<span class="n">key_a_in_section2</span><span class="o">=</span><span class="n">some_value</span>
|
|
</pre></div>
|
|
</div>
|
|
<p>Boolean values are marked with 1 for true and 0 for false.</p>
|
|
<p>Example:</p>
|
|
<div class="highlight-python"><div class="highlight"><pre><span></span><span class="n">true_key</span><span class="o">=</span><span class="mi">1</span>
|
|
<span class="n">false_key</span><span class="o">=</span><span class="mi">0</span>
|
|
</pre></div>
|
|
</div>
|
|
</div>
|
|
<div class="section" id="toplevel-namespace">
|
|
<h2>Toplevel namespace<a class="headerlink" href="#toplevel-namespace" title="Permalink to this headline">¶</a></h2>
|
|
<p>The toplevel configuration file namespace can only contain section headers.</p>
|
|
<p>There are two section types:</p>
|
|
<ul class="simple">
|
|
<li>One special section called <em>General</em> that can contain top-level settings
|
|
not directly corresponding to any screen.</li>
|
|
<li>Other sections that correspond to Anaconda spoke screens.<ul>
|
|
<li>Hubs are not represented as sections as there is nothing that can be
|
|
directly set on a hub in Anaconda.</li>
|
|
<li>All currently visible spokes in Anaconda will be enumerated as a section headers by Anaconda in the
|
|
configuration file. Note that this can include spokes provided by addons[2], if any Anaconda addons that provide
|
|
additional spokes are present during the installation run.</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
<div class="section" id="the-general-section">
|
|
<h2>The General section<a class="headerlink" href="#the-general-section" title="Permalink to this headline">¶</a></h2>
|
|
<p>The <em>General</em> section is optional and is not required to be present in the config file.
|
|
At the moment it can contain only the <code class="docutils literal"><span class="pre">post_install_tools_disabled</span></code> key.</p>
|
|
<p>The <code class="docutils literal"><span class="pre">post_install_tools_disabled</span></code> key corresponds to using the <code class="docutils literal"><span class="pre">firstboot</span> <span class="pre">--disable</span></code> command in the installation kickstart file.
|
|
This requests that the post-installation setup tools be skipped. If this key is present and set to 1, any post-installation tools
|
|
that parse the user interaction file should first make sure the tool won’t be started again on next boot, and then terminate immediately.</p>
|
|
</div>
|
|
<div class="section" id="naming-of-sections-corresponding-to-anaconda-screens">
|
|
<h2>Naming of sections corresponding to Anaconda screens<a class="headerlink" href="#naming-of-sections-corresponding-to-anaconda-screens" title="Permalink to this headline">¶</a></h2>
|
|
<p>All section headers not named <em>General</em> are named according to the Anaconda spoke class name. For example <code class="docutils literal"><span class="pre">DatetimeSpoke</span></code>
|
|
or <code class="docutils literal"><span class="pre">KeyboardSpoke</span></code>.</p>
|
|
<p>To get a list of all such spokes run the <code class="docutils literal"><span class="pre">list_spokes</span></code> script from the <code class="docutils literal"><span class="pre">scripts</span></code> directory in the Anaconda source
|
|
code tree:</p>
|
|
<div class="highlight-python"><div class="highlight"><pre><span></span>git clone https://github.com/rhinstaller/anaconda
|
|
cd anaconda/scripts
|
|
./list_screens
|
|
</pre></div>
|
|
</div>
|
|
<p>Note that this script only lists Anaconda spokes, not spokes provided by addons[2] or Initial Setup.</p>
|
|
<p>It is also possible to check for the <em>Entered spoke:</em> entries in the <code class="docutils literal"><span class="pre">/tmp/anaconda.log</span></code> file during an installation
|
|
to correlate spokes on the screen to spoke class names.</p>
|
|
</div>
|
|
<div class="section" id="screen-section-namespace">
|
|
<h2>Screen section namespace<a class="headerlink" href="#screen-section-namespace" title="Permalink to this headline">¶</a></h2>
|
|
<p>Each section corresponding to a screen <em>must</em> contain the <code class="docutils literal"><span class="pre">visited</span></code> key with a value of either 1 if the user has visited
|
|
the corresponding screen or 0 if not.</p>
|
|
<p>Optionally each section can contain one or more keys with the <code class="docutils literal"><span class="pre">changed_</span></code> prefix which track if the user
|
|
has changed an option on the screen. If the option is changed by the user, the corresponding key is set
|
|
to 1. If the given option has not been changed by the user then the corresponding key can either be
|
|
omitted or set to 0.</p>
|
|
<p>Example:</p>
|
|
<div class="highlight-python"><div class="highlight"><pre><span></span><span class="p">[</span><span class="n">DatetimeSpoke</span><span class="p">]</span>
|
|
<span class="n">visited</span><span class="o">=</span><span class="mi">1</span>
|
|
<span class="n">changed_timezone</span><span class="o">=</span><span class="mi">1</span>
|
|
<span class="n">changed_ntp</span><span class="o">=</span><span class="mi">0</span>
|
|
<span class="n">changed_timedate</span><span class="o">=</span><span class="mi">1</span>
|
|
</pre></div>
|
|
</div>
|
|
<p>In this example the user has visited the date & time spoke and has changed the timezone & time/date,
|
|
but not the NTP settings. Note that the <code class="docutils literal"><span class="pre">changed_ntp</span></code> key could also be omitted as the user has not changed
|
|
the NTP options.</p>
|
|
<p>Another example:</p>
|
|
<div class="highlight-python"><div class="highlight"><pre><span></span><span class="p">[</span><span class="n">KeyboardSpoke</span><span class="p">]</span>
|
|
<span class="n">visited</span><span class="o">=</span><span class="mi">0</span>
|
|
</pre></div>
|
|
</div>
|
|
<p>Here the user has not visited the keyboard spoke and thus could not have changed any options,
|
|
so all <code class="docutils literal"><span class="pre">changed_*</span></code> keys (if any) have been omitted.</p>
|
|
<p>Note that if a spoke section is missing, it should be assumed that the corresponding screen has not been visited.
|
|
On the other hand, if a screen <em>has been visited</em>, the section <em>must</em> be present, with the <code class="docutils literal"><span class="pre">visited</span></code> key being equal to 1.</p>
|
|
</div>
|
|
<div class="section" id="full-configuration-file-example">
|
|
<h2>Full configuration file example<a class="headerlink" href="#full-configuration-file-example" title="Permalink to this headline">¶</a></h2>
|
|
<div class="highlight-python"><div class="highlight"><pre><span></span><span class="c1"># this is the user interaction config file</span>
|
|
|
|
<span class="p">[</span><span class="n">General</span><span class="p">]</span>
|
|
<span class="n">post_install_tools_disabled</span><span class="o">=</span><span class="mi">0</span>
|
|
|
|
<span class="p">[</span><span class="n">DatetimeSpoke</span><span class="p">]</span>
|
|
<span class="c1"># the date and time spoke has been visited</span>
|
|
<span class="n">visited</span><span class="o">=</span><span class="mi">1</span>
|
|
<span class="n">changed_timezone</span><span class="o">=</span><span class="mi">1</span>
|
|
<span class="n">changed_ntp</span><span class="o">=</span><span class="mi">0</span>
|
|
<span class="n">changed_timedate</span><span class="o">=</span><span class="mi">1</span>
|
|
|
|
<span class="p">[</span><span class="n">KeyboardSpoke</span><span class="p">]</span>
|
|
<span class="c1"># the keyboard spoke has not been visited</span>
|
|
<span class="n">visited</span><span class="o">=</span><span class="mi">0</span>
|
|
</pre></div>
|
|
</div>
|
|
<p>The first section is the special section for top-level settings called <em>General</em>.
|
|
It contains only one option, <code class="docutils literal"><span class="pre">post_install_tools_disabled</span></code>, which is in this case equal to 0
|
|
This means that post installation setup tools should proceed as usual.
|
|
In this case (being equal to 0) the <code class="docutils literal"><span class="pre">post_install_tools_disabled</span></code> key and the whole <em>General</em> section
|
|
might also be omitted.</p>
|
|
<p>Next there are two sections corresponding to two screens - <code class="docutils literal"><span class="pre">DatetimeSpoke</span></code> and <code class="docutils literal"><span class="pre">KeyboardSpoke</span></code>.</p>
|
|
<p>The user has visited the date & time screen and has changed various options, but not the NTP settings.
|
|
On the other hand the keyboard screen has not been visited at all.</p>
|
|
</div>
|
|
<div class="section" id="parsing-and-writing-the-of-the-configuration-file-by-anaconda">
|
|
<h2>Parsing and writing the of the configuration file by Anaconda<a class="headerlink" href="#parsing-and-writing-the-of-the-configuration-file-by-anaconda" title="Permalink to this headline">¶</a></h2>
|
|
<p>If the user interaction file exists during Anaconda startup, it will be parsed and taken into account
|
|
when deciding which screens to show during the installation. This make it possible for secondary
|
|
installation setup tools to run before Anaconda and query the user for information.</p>
|
|
<p>This can be for example a tool querying the user for language settings. Then once Anaconda starts it can
|
|
skip the language selection screen as language has already been set by the tool.</p>
|
|
<p>Once the installation process is done, Anaconda will write out information about what screens the user has
|
|
and has not visited and optionally which settings have been changed by the user.</p>
|
|
<p>If Anaconda successfully parsed an existing user interaction configuration file, any valid settings present
|
|
in the file will propagate to the configuration file when it is written-out by Anaconda.</p>
|
|
<p>Note that comments present in the configuration file at the time Anaconda parses it might not be present
|
|
in the output file, therefore tools should not depend on comments being present or on information contained
|
|
in comments.</p>
|
|
</div>
|
|
<div class="section" id="parsing-and-writing-of-the-configuration-file-by-tools-other-than-anaconda">
|
|
<h2>Parsing and writing of the configuration file by tools other than Anaconda<a class="headerlink" href="#parsing-and-writing-of-the-configuration-file-by-tools-other-than-anaconda" title="Permalink to this headline">¶</a></h2>
|
|
<p>Non-Anaconda system configuration tools should also parse the user interaction file at startup and write it out
|
|
once done. All valid data already present in the configuration file should be kept and updated accordingly
|
|
(the user has visited a not-yet-visited screen, changed another option, etc.).</p>
|
|
<p>Non-Anaconda tools should try to keep comments present in the input file, but this is not strictly required.</p>
|
|
<p>Also note that a variable number of tools might be working with the configuration file in sequence, so no single tool
|
|
should expect that it is the first or last tool working with the configuration file.</p>
|
|
</div>
|
|
<div class="section" id="links">
|
|
<h2>Links<a class="headerlink" href="#links" title="Permalink to this headline">¶</a></h2>
|
|
<p>[0] <a class="reference external" href="https://docs.python.org/3/library/configparser.html">https://docs.python.org/3/library/configparser.html</a>
|
|
[1] <a class="reference external" href="https://developer.gnome.org/glib/stable/glib-Key-value-file-parser.html">https://developer.gnome.org/glib/stable/glib-Key-value-file-parser.html</a>
|
|
[2] <a class="reference external" href="https://rhinstaller.github.io/anaconda-addon-development-guide/">https://rhinstaller.github.io/anaconda-addon-development-guide/</a></p>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
</div>
|
|
</div>
|
|
<footer>
|
|
|
|
|
|
<hr/>
|
|
|
|
<div role="contentinfo">
|
|
<p>
|
|
© Copyright 2015, Red Hat, Inc..
|
|
|
|
</p>
|
|
</div>
|
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|
|
|
</footer>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
</section>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<script type="text/javascript">
|
|
var DOCUMENTATION_OPTIONS = {
|
|
URL_ROOT:'./',
|
|
VERSION:'25.14',
|
|
COLLAPSE_INDEX:false,
|
|
FILE_SUFFIX:'.html',
|
|
HAS_SOURCE: true
|
|
};
|
|
</script>
|
|
<script type="text/javascript" src="_static/jquery.js"></script>
|
|
<script type="text/javascript" src="_static/underscore.js"></script>
|
|
<script type="text/javascript" src="_static/doctools.js"></script>
|
|
|
|
|
|
|
|
|
|
|
|
<script type="text/javascript" src="_static/js/theme.js"></script>
|
|
|
|
|
|
|
|
|
|
<script type="text/javascript">
|
|
jQuery(function () {
|
|
SphinxRtdTheme.StickyNav.enable();
|
|
});
|
|
</script>
|
|
|
|
|
|
</body>
|
|
</html> |