<?xml version='1.0'?> <!--*-nxml-*-->
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
        "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">

<!--
  This file is part of systemd.

  Copyright 2014 Lennart Poettering

  systemd is free software; you can redistribute it and/or modify it
  under the terms of the GNU Lesser General Public License as published by
  the Free Software Foundation; either version 2.1 of the License, or
  (at your option) any later version.

  systemd is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  Lesser General Public License for more details.

  You should have received a copy of the GNU Lesser General Public License
  along with systemd; If not, see <http://www.gnu.org/licenses/>.
-->

<refentry id="systemd-firstboot"
          xmlns:xi="http://www.w3.org/2001/XInclude">

        <refentryinfo>
                <title>systemd-firstboot</title>
                <productname>systemd</productname>

                <authorgroup>
                        <author>
                                <contrib>Developer</contrib>
                                <firstname>Lennart</firstname>
                                <surname>Poettering</surname>
                                <email>lennart@poettering.net</email>
                        </author>
                </authorgroup>
        </refentryinfo>

        <refmeta>
                <refentrytitle>systemd-firstboot</refentrytitle>
                <manvolnum>1</manvolnum>
        </refmeta>

        <refnamediv>
                <refname>systemd-firstboot</refname>
                <refname>systemd-firstboot.service</refname>
                <refpurpose>Initialize basic system settings on or before the first boot-up of a system</refpurpose>
        </refnamediv>

        <refsynopsisdiv>
                <cmdsynopsis>
                        <command>systemd-firstboot</command>
                        <arg choice="opt" rep="repeat">OPTIONS</arg>
                </cmdsynopsis>

                <para><filename>systemd-firstboot.service</filename></para>
        </refsynopsisdiv>

        <refsect1>
                <title>Description</title>

                <para><command>systemd-firstboot</command> initializes
                the most basic system settings interactively on the
                first boot, or optionally non-interactively when a
                system image is created. The following settings may be
                set up:</para>

                <itemizedlist>
                        <listitem><para>The system locale, more
                        specifically the two locale variables
                        <varname>LANG=</varname> and
                        <varname>LC_MESSAGES</varname></para></listitem>

                        <listitem><para>The system time zone</para></listitem>

                        <listitem><para>The system host name</para></listitem>

                        <listitem><para>The machine ID of the system</para></listitem>

                        <listitem><para>The root user's password</para></listitem>
                </itemizedlist>

                <para>Each of the fields may either be queried
                interactively from the users, set non-interactively on
                the tool's command line, or be copied from a host
                system that is used to set up the system image.</para>

                <para>If a setting is already initialized it will not
                be overwritten and the user will not be prompted for
                the setting.</para>

                <para>Note that this tool operates directly on the
                file system and does not involve any running system
                services, unlike
                <citerefentry><refentrytitle>localectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
                <citerefentry><refentrytitle>timedatectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
                or
                <citerefentry><refentrytitle>hostnamectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>. This
                allows <command>systemd-firstboot</command> to operate
                on mounted but not booted disk images and in early
                boot. It is not recommended to use
                <command>systemd-firstboot</command> on the running
                system while it is up.</para>
        </refsect1>

        <refsect1>
                <title>Options</title>

                <para>The following options are understood:</para>

                <variablelist>
                        <varlistentry>
                                <term><option>--root=<replaceable>root</replaceable></option></term>
                                <listitem><para>Takes a directory path
                                as an argument. All paths will be
                                prefixed with the given alternate
                                <replaceable>root</replaceable> path,
                                including config search paths. This is
                                useful to operate on a system image
                                mounted to the specified directory
                                instead of the host system itself.
                                </para></listitem>
                        </varlistentry>

                        <varlistentry>
                                <term><option>--locale=<replaceable>LOCALE</replaceable></option></term>
                                <term><option>--locale-messages=<replaceable>LOCALE</replaceable></option></term>

                                <listitem><para>Sets the system
                                locale, more specifically the
                                <varname>LANG=</varname> and
                                <varname>LC_MESSAGES</varname>
                                settings. The argument should be a
                                valid locale identifier, such as
                                <literal>de_DE.UTF-8</literal>. This
                                controls the
                                <citerefentry><refentrytitle>locale.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>
                                configuration file.</para></listitem>
                        </varlistentry>

                        <varlistentry>
                                <term><option>--timezone=<replaceable>TIMEZONE</replaceable></option></term>

                                <listitem><para>Sets the system time
                                zone. The argument should be a valid
                                time zone identifier, such as
                                <literal>Europe/Berlin</literal>. This
                                controls the
                                <citerefentry><refentrytitle>localtime</refentrytitle><manvolnum>5</manvolnum></citerefentry>
                                symlink.</para></listitem>
                        </varlistentry>

                        <varlistentry>
                                <term><option>--hostname=<replaceable>HOSTNAME</replaceable></option></term>

                                <listitem><para>Sets the system
                                hostname. The argument should be a
                                host name, compatible with DNS. This
                                controls the
                                <citerefentry><refentrytitle>hostname</refentrytitle><manvolnum>5</manvolnum></citerefentry>
                                configuration file.</para></listitem>
                        </varlistentry>

                        <varlistentry>
                                <term><option>--machine-id=<replaceable>ID</replaceable></option></term>

                                <listitem><para>Sets the system's machine ID. This
                                controls the
                                <citerefentry><refentrytitle>machine-id</refentrytitle><manvolnum>5</manvolnum></citerefentry>
                                file.</para></listitem>
                        </varlistentry>

                        <varlistentry>
                                <term><option>--root-password=<replaceable>PASSWORD</replaceable></option></term>
                                <term><option>--root-password-file=<replaceable>PATH</replaceable></option></term>

                                <listitem><para>Sets the password of
                                the system's root user. This creates a
                                <citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></citerefentry>
                                file. This setting exists in two
                                forms:
                                <option>--root-password=</option>
                                accepts the password to set directly
                                on the command line,
                                <option>--root-password-file=</option>
                                reads it from a file. Note that
                                it is not recommended specifying
                                passwords on the command line as other
                                users might be able to see them
                                simply by invoking
                                <citerefentry><refentrytitle>ps</refentrytitle><manvolnum>1</manvolnum></citerefentry>.</para></listitem>
                        </varlistentry>

                        <varlistentry>
                                <term><option>--prompt-locale</option></term>
                                <term><option>--prompt-timezone</option></term>
                                <term><option>--prompt-hostname</option></term>
                                <term><option>--prompt-root-password</option></term>

                                <para>Prompt the user interactively
                                for a specific basic setting. Note
                                that any explicit configuration
                                settings specified on the command line
                                take precedence, and the user is not
                                prompted for it.</para>
                        </varlistentry>

                        <varlistentry>
                                <term><option>--prompt</option></term>

                                <para>Query the user for locale,
                                timezone, hostname and root
                                password. This is equivalent to
                                specifying
                                <option>--prompt-locale</option>,
                                <option>--prompt-timezone</option>,
                                <option>--prompt-hostname</option>,
                                <option>--prompt-root-password</option>
                                in combination.</para>
                        </varlistentry>

                        <varlistentry>
                                <term><option>--copy-locale</option></term>
                                <term><option>--copy-timezone</option></term>
                                <term><option>--copy-root-password</option></term>

                                <para>Copy a specific basic setting
                                from the host. This only works in
                                combination with
                                <option>--root=</option> (see
                                above).</para>
                        </varlistentry>

                        <varlistentry>
                                <term><option>--copy</option></term>

                                <para>Copy locale, time zone and root
                                password from the host. This is
                                equivalent to specifying
                                <option>--copy-locale</option>,
                                <option>--copy-timezone</option>,
                                <option>--copy-root-password</option>
                                in combination.</para>
                        </varlistentry>

                        <varlistentry>
                                <term><option>--setup-machine-id</option></term>

                                <para>Initialize the system's machine
                                ID to a random ID. This only works in
                                combination with
                                <option>--root=</option>.</para>
                        </varlistentry>

                        <xi:include href="standard-options.xml" xpointer="help" />
                        <xi:include href="standard-options.xml" xpointer="version" />
                </variablelist>

        </refsect1>

        <refsect1>
                <title>Exit status</title>

                <para>On success, 0 is returned, a non-zero failure
                code otherwise.</para>
        </refsect1>

        <refsect1>
                <title>See Also</title>
                <para>
                        <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
                        <citerefentry><refentrytitle>locale.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
                        <citerefentry><refentrytitle>localtime</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
                        <citerefentry><refentrytitle>hostname</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
                        <citerefentry><refentrytitle>machine-id</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
                        <citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
                        <citerefentry><refentrytitle>systemd-machine-id-setup</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
                        <citerefentry><refentrytitle>localectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
                        <citerefentry><refentrytitle>timedatectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
                        <citerefentry><refentrytitle>hostnamectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
                </para>
        </refsect1>

</refentry>
