en-US/Books en-US/Template
by Jeroen van Meeuwen
en-US/Books/ClassRoom/Manual.xml | 2 +-
en-US/Books/Linux/Advanced/Course.xml | 2 +-
en-US/Books/Linux/Advanced/Manual.xml | 2 +-
en-US/Books/Linux/Basic/Course.xml | 2 +-
en-US/Books/Linux/Basic/Manual.xml | 2 +-
en-US/Books/Linux/ConfigurationManagement/Course.xml | 2 +-
en-US/Books/Linux/ConfigurationManagement/Manual.xml | 2 +-
en-US/Books/Linux/RHCETraining/Course.xml | 2 +-
en-US/Books/Linux/RHCETraining/Manual.xml | 2 +-
en-US/Books/Linux/Senior/Course.xml | 2 +-
en-US/Books/Linux/Senior/Manual.xml | 2 +-
en-US/Books/PuppetWorkshop/Course.xml | 2 +-
en-US/Books/Template/Course.xml | 2 +-
en-US/Books/Template/Manual.xml | 2 +-
en-US/Template/Course.xml | 2 +-
en-US/Template/Manual.xml | 2 +-
16 files changed, 16 insertions(+), 16 deletions(-)
New commits:
commit bbade378675871cda2ed360a1418efe26c2e09bb
Author: Jeroen van Meeuwen (Fedora Unity) <kanarip(a)fedoraunity.org>
Date: Sun Oct 5 18:40:44 2008 +0200
Remove textwidth=72 from all xml files
diff --git a/en-US/Books/ClassRoom/Manual.xml b/en-US/Books/ClassRoom/Manual.xml
index c6f7b45..bc74f4b 100644
--- a/en-US/Books/ClassRoom/Manual.xml
+++ b/en-US/Books/ClassRoom/Manual.xml
@@ -299,5 +299,5 @@
-->
<!--
- vim: softtabstop=4:shiftwidth=4:expandtab:textwidth=72
+ vim: softtabstop=4:shiftwidth=4:expandtab
-->
diff --git a/en-US/Books/Linux/Advanced/Course.xml b/en-US/Books/Linux/Advanced/Course.xml
index f6e116a..64402b7 100644
--- a/en-US/Books/Linux/Advanced/Course.xml
+++ b/en-US/Books/Linux/Advanced/Course.xml
@@ -346,5 +346,5 @@
-->
<!--
- vim: softtabstop=4:shiftwidth=4:expandtab:textwidth=72
+ vim: softtabstop=4:shiftwidth=4:expandtab
-->
diff --git a/en-US/Books/Linux/Advanced/Manual.xml b/en-US/Books/Linux/Advanced/Manual.xml
index a5cc158..761cc53 100644
--- a/en-US/Books/Linux/Advanced/Manual.xml
+++ b/en-US/Books/Linux/Advanced/Manual.xml
@@ -35,5 +35,5 @@
-->
<!--
- vim: softtabstop=4:shiftwidth=4:expandtab:textwidth=72
+ vim: softtabstop=4:shiftwidth=4:expandtab
-->
diff --git a/en-US/Books/Linux/Basic/Course.xml b/en-US/Books/Linux/Basic/Course.xml
index a0f5165..a99d53d 100644
--- a/en-US/Books/Linux/Basic/Course.xml
+++ b/en-US/Books/Linux/Basic/Course.xml
@@ -72,5 +72,5 @@
-->
<!--
- vim: softtabstop=4:shiftwidth=4:expandtab:textwidth=72
+ vim: softtabstop=4:shiftwidth=4:expandtab
-->
diff --git a/en-US/Books/Linux/Basic/Manual.xml b/en-US/Books/Linux/Basic/Manual.xml
index 7866390..2f1c2bc 100644
--- a/en-US/Books/Linux/Basic/Manual.xml
+++ b/en-US/Books/Linux/Basic/Manual.xml
@@ -35,5 +35,5 @@
-->
<!--
- vim: softtabstop=4:shiftwidth=4:expandtab:textwidth=72
+ vim: softtabstop=4:shiftwidth=4:expandtab
-->
diff --git a/en-US/Books/Linux/ConfigurationManagement/Course.xml b/en-US/Books/Linux/ConfigurationManagement/Course.xml
index f0522a6..8e1c1f9 100644
--- a/en-US/Books/Linux/ConfigurationManagement/Course.xml
+++ b/en-US/Books/Linux/ConfigurationManagement/Course.xml
@@ -57,5 +57,5 @@
-->
<!--
- vim: softtabstop=4:shiftwidth=4:expandtab:textwidth=72
+ vim: softtabstop=4:shiftwidth=4:expandtab
-->
diff --git a/en-US/Books/Linux/ConfigurationManagement/Manual.xml b/en-US/Books/Linux/ConfigurationManagement/Manual.xml
index 5507b16..5f45361 100644
--- a/en-US/Books/Linux/ConfigurationManagement/Manual.xml
+++ b/en-US/Books/Linux/ConfigurationManagement/Manual.xml
@@ -35,5 +35,5 @@
-->
<!--
- vim: softtabstop=4:shiftwidth=4:expandtab:textwidth=72
+ vim: softtabstop=4:shiftwidth=4:expandtab
-->
diff --git a/en-US/Books/Linux/RHCETraining/Course.xml b/en-US/Books/Linux/RHCETraining/Course.xml
index 82ee1de..1c3d512 100644
--- a/en-US/Books/Linux/RHCETraining/Course.xml
+++ b/en-US/Books/Linux/RHCETraining/Course.xml
@@ -48,5 +48,5 @@
-->
<!--
- vim: softtabstop=4:shiftwidth=4:expandtab:textwidth=72
+ vim: softtabstop=4:shiftwidth=4:expandtab
-->
diff --git a/en-US/Books/Linux/RHCETraining/Manual.xml b/en-US/Books/Linux/RHCETraining/Manual.xml
index 5f0e857..dbb402f 100644
--- a/en-US/Books/Linux/RHCETraining/Manual.xml
+++ b/en-US/Books/Linux/RHCETraining/Manual.xml
@@ -35,5 +35,5 @@
-->
<!--
- vim: softtabstop=4:shiftwidth=4:expandtab:textwidth=72
+ vim: softtabstop=4:shiftwidth=4:expandtab
-->
diff --git a/en-US/Books/Linux/Senior/Course.xml b/en-US/Books/Linux/Senior/Course.xml
index e952362..51d3833 100644
--- a/en-US/Books/Linux/Senior/Course.xml
+++ b/en-US/Books/Linux/Senior/Course.xml
@@ -2068,5 +2068,5 @@ Working Devices : 4
-->
<!--
- vim: softtabstop=4:shiftwidth=4:expandtab:textwidth=72
+ vim: softtabstop=4:shiftwidth=4:expandtab
-->
diff --git a/en-US/Books/Linux/Senior/Manual.xml b/en-US/Books/Linux/Senior/Manual.xml
index 637d1c9..d57142d 100644
--- a/en-US/Books/Linux/Senior/Manual.xml
+++ b/en-US/Books/Linux/Senior/Manual.xml
@@ -38,5 +38,5 @@
-->
<!--
- vim: softtabstop=4:shiftwidth=4:expandtab:textwidth=72
+ vim: softtabstop=4:shiftwidth=4:expandtab
-->
diff --git a/en-US/Books/PuppetWorkshop/Course.xml b/en-US/Books/PuppetWorkshop/Course.xml
index 9662f2f..5010acc 100644
--- a/en-US/Books/PuppetWorkshop/Course.xml
+++ b/en-US/Books/PuppetWorkshop/Course.xml
@@ -1018,5 +1018,5 @@ debug: Calling fileserver.describe</screen>
-->
<!--
- vim: softtabstop=4:shiftwidth=4:expandtab:textwidth=72
+ vim: softtabstop=4:shiftwidth=4:expandtab
-->
diff --git a/en-US/Books/Template/Course.xml b/en-US/Books/Template/Course.xml
index a1d39da..ab9794e 100644
--- a/en-US/Books/Template/Course.xml
+++ b/en-US/Books/Template/Course.xml
@@ -35,5 +35,5 @@
-->
<!--
- vim: softtabstop=4:shiftwidth=4:expandtab:textwidth=72
+ vim: softtabstop=4:shiftwidth=4:expandtab
-->
diff --git a/en-US/Books/Template/Manual.xml b/en-US/Books/Template/Manual.xml
index 5507b16..5f45361 100644
--- a/en-US/Books/Template/Manual.xml
+++ b/en-US/Books/Template/Manual.xml
@@ -35,5 +35,5 @@
-->
<!--
- vim: softtabstop=4:shiftwidth=4:expandtab:textwidth=72
+ vim: softtabstop=4:shiftwidth=4:expandtab
-->
diff --git a/en-US/Template/Course.xml b/en-US/Template/Course.xml
index a1d39da..ab9794e 100644
--- a/en-US/Template/Course.xml
+++ b/en-US/Template/Course.xml
@@ -35,5 +35,5 @@
-->
<!--
- vim: softtabstop=4:shiftwidth=4:expandtab:textwidth=72
+ vim: softtabstop=4:shiftwidth=4:expandtab
-->
diff --git a/en-US/Template/Manual.xml b/en-US/Template/Manual.xml
index 5507b16..5f45361 100644
--- a/en-US/Template/Manual.xml
+++ b/en-US/Template/Manual.xml
@@ -35,5 +35,5 @@
-->
<!--
- vim: softtabstop=4:shiftwidth=4:expandtab:textwidth=72
+ vim: softtabstop=4:shiftwidth=4:expandtab
-->
15 years, 7 months
en-US/Books
by Jeroen van Meeuwen
en-US/Books/PuppetWorkshop/Course.xml | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
New commits:
commit 6bd2aeb9540dcb2768402d80c9578067a8bd8ade
Author: Jeroen van Meeuwen (Fedora Unity) <kanarip(a)fedoraunity.org>
Date: Sun Oct 5 18:37:04 2008 +0200
Update puppet workshop
diff --git a/en-US/Books/PuppetWorkshop/Course.xml b/en-US/Books/PuppetWorkshop/Course.xml
index 3012af2..9662f2f 100644
--- a/en-US/Books/PuppetWorkshop/Course.xml
+++ b/en-US/Books/PuppetWorkshop/Course.xml
@@ -870,10 +870,9 @@ debug: Calling fileserver.describe</screen>
</listitem>
<listitem>
<para>
- Whether or not to use reporting, and what reporting to use (tagmail, store, rrdgraph). Use
+ Whether or not to use reporting, and what reporting to use (tagmail, store, rrdgraph). To configure the types or reports that should be used by the puppetmaster, use a comma separated list without spaces, in:
<screen>[puppetmasterd]
reports = <replaceable>tagmail,store,rrdgraph</replaceable></screen>
- to configure which reports should be used. This is a comma separated list (without spaces).
</para>
</listitem>
<listitem>
@@ -882,6 +881,9 @@ debug: Calling fileserver.describe</screen>
tagmap = <replaceable>/path/to/tagmail.conf</replaceable></screen>
for reporting changes applied to puppets, via email.
</para>
+ <para>
+ <emphasis>See also</emphasis>: <xref linkend="PuppetWorkshop-OtherThingsToDoWithPuppet-TweakingReporting" />
+ </para>
</listitem>
<listitem>
<para>
@@ -966,6 +968,13 @@ debug: Calling fileserver.describe</screen>
This is a first section
</para>
+ <section id="PuppetWorkshop-OtherThingsToDoWithPuppet-TweakingReporting">
+ <title>Tweaking Reporting</title>
+ <para>
+ paragraph
+ </para>
+ </section>
+
<section id="PuppetWorkshop-OtherThingsToDoWithPuppet-WritingCustomTypes">
<title>Writing Custom Types</title>
<para>
15 years, 7 months
Makefile
by Jeroen van Meeuwen
Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
New commits:
commit 3505095f3d5f77f5b2aa71d0baa7bcbfb92ed21d
Author: Jeroen van Meeuwen (Fedora Unity) <kanarip(a)fedoraunity.org>
Date: Sun Oct 5 18:15:55 2008 +0200
NOT rsync -a please
diff --git a/Makefile b/Makefile
index 81928e4..5b3c298 100644
--- a/Makefile
+++ b/Makefile
@@ -18,5 +18,5 @@ fpeople: html
rsync -aHvz --delete --progress --rsh=ssh tmp/en-US/html/ fedorapeople.org:./public_html/Courses/
kanarip: html
- rsync -aHvz --delete --progress --rsh=ssh tmp/en-US/html/ pinky:/data/www/kanarip.com/www/public_html/courses/
+ rsync -rlHvz --delete --progress --rsh=ssh tmp/en-US/html/ pinky:/data/www/kanarip.com/www/public_html/courses/
15 years, 7 months
2 commits - en-US/Books
by Stefan Alexander Hartsuiker
en-US/Books/PuppetWorkshop/Course.xml | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
New commits:
commit 9cd3b747e8e1811c4ab78fb241ff516a163ffc7e
Merge: 3c5674a... 3c36ad9...
Author: S.A. Hartsuiker <shartsuiker(a)stefan-vaio.lan>
Date: Sun Oct 5 18:03:43 2008 +0200
Merge branch 'master' of ssh://git.fedorahosted.org/git/courses
commit 3c5674ab70b23367def0a3a47530f4e5362edb46
Author: S.A. Hartsuiker <shartsuiker(a)stefan-vaio.lan>
Date: Sun Oct 5 18:01:00 2008 +0200
Rewrote system resources
diff --git a/en-US/Books/PuppetWorkshop/Course.xml b/en-US/Books/PuppetWorkshop/Course.xml
index 496c975..55c5da2 100644
--- a/en-US/Books/PuppetWorkshop/Course.xml
+++ b/en-US/Books/PuppetWorkshop/Course.xml
@@ -462,7 +462,10 @@ service { "ypbind":
<formalpara>
<title>system resource</title>
<para>
- A system resource is a resource available on the node whether it is managed by puppet or not. Unlike in other cases, this term does not as much to system hardware resources such as the CPU or memory available to the operating system, because that.
+<!--
+FIXME:
+//-->
+ A system resource is a resource available on the node whether it is managed by puppet or not. Unlike what is otherwise understood by system resources, the puppet definition of system resources does not so much refer to resources like CPU or memory, but rather to whether or not a package is installed or what version of said package, or the $osversion, and so on and so forth.
</para>
</formalpara>
</listitem>
@@ -599,7 +602,7 @@ debug: Calling fileserver.describe</screen>
<formalpara>
<title>The puppet waits for 30 minutes</title>
<para>
- para
+ The next run the puppet performs/polls for is after a configurable timeperiod, which defaults to 30 minutes.
</para>
</formalpara>
</listitem>
15 years, 7 months
2 commits - en-US/Books en-US/Courses.xml
by Jeroen van Meeuwen
en-US/Books/PuppetWorkshop/Course.xml | 22 +++++++++++++++++-----
en-US/Courses.xml | 4 ----
2 files changed, 17 insertions(+), 9 deletions(-)
New commits:
commit 3c36ad9bab7bec53cff69216651a065f7156109c
Merge: 92d8663... e1fb656...
Author: Jeroen van Meeuwen (Fedora Unity) <kanarip(a)fedoraunity.org>
Date: Sun Oct 5 17:54:54 2008 +0200
Merge branch 'master' of ssh://git.fedorahosted.org/git/courses
commit 92d86639841b00b9b7f6feb36326122bc2acfee2
Author: Jeroen van Meeuwen (Fedora Unity) <kanarip(a)fedoraunity.org>
Date: Sun Oct 5 17:54:48 2008 +0200
Updates to Puppet Workshop
diff --git a/en-US/Books/PuppetWorkshop/Course.xml b/en-US/Books/PuppetWorkshop/Course.xml
index 30b45df..1166edf 100644
--- a/en-US/Books/PuppetWorkshop/Course.xml
+++ b/en-US/Books/PuppetWorkshop/Course.xml
@@ -838,12 +838,17 @@ debug: Calling fileserver.describe</screen>
</listitem>
<listitem>
<para>
- Whether or not to use autosigning of certificates, using <code>[puppetca], autosign = false, true</code>. The default is to <emphasis>not</emphasis> use autosigning.
+ Whether or not to use autosigning of certificates, using
+ <screen>[puppetca]
+ autosign = <replaceable>false</replaceable></screen>
+ The default is to <emphasis>not</emphasis> use autosigning.
</para>
</listitem>
<listitem>
<para>
- Another setting to check is whether or not this puppetmaster is going to be the Certificate Authority (<code>[puppetmasterd], ca = <replaceable>false, true</replaceable></code>). The default is often set to <code>true</code>.
+ Another setting to check is whether or not this puppetmaster is going to be the Certificate Authority <screen>[puppetmasterd]
+ ca = <replaceable>true</replaceable></screen>
+ The default is often set to <code>true</code>.
</para>
</listitem>
</itemizedlist>
@@ -855,17 +860,24 @@ debug: Calling fileserver.describe</screen>
<itemizedlist>
<listitem>
<para>
- The location of tagmail.conf, <code>[main], tagmap = <replaceable>/path/to/tagmail.conf</replaceable></code>, for reporting changes applied to puppets, via email.
+ A list of environments using a comma seperated list, in
+ <screen>[puppetmasterd]
+ environments = <replaceable>development,testing,production</replaceable></screen>
</para>
</listitem>
<listitem>
<para>
- A list of environments using a comma seperated list, in <code>[puppetmasterd], environments = <replaceable>environments</replaceable></code>.
+ Whether or not to use reporting, and what reporting to use (tagmail, store, rrdgraph). Use
+ <screen>[puppetmasterd]
+ reports = <replaceable>tagmail,store,rrdgraph</replaceable></screen>
+ to configure which reports should be used. This is a comma separated list (without spaces).
</para>
</listitem>
<listitem>
<para>
- whether or not to use reporting, and what reporting to use (tagmail, store, rrdgraph)
+ The location of tagmail.conf, in order to map tags you give to resources to email addresses the reports should be sent to; <screen>[main]
+ tagmap = <replaceable>/path/to/tagmail.conf</replaceable></screen>
+ for reporting changes applied to puppets, via email.
</para>
</listitem>
<listitem>
diff --git a/en-US/Courses.xml b/en-US/Courses.xml
index 4c5be66..5174ea6 100644
--- a/en-US/Courses.xml
+++ b/en-US/Courses.xml
@@ -95,8 +95,6 @@
//-->
-<!--
- FIXME
<listitem>
<para>
<xref linkend="PuppetWorkshop" />
@@ -105,8 +103,6 @@
A workshop on implementing puppet for configuration management, including best practices.
</para>
</listitem>
-//-->
-
</itemizedlist>
</para>
</formalpara>
15 years, 7 months
en-US/Books
by Stefan Alexander Hartsuiker
en-US/Books/PuppetWorkshop/Course.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
New commits:
commit e1fb65642764ad15fa580df0d5bb696987a20947
Author: S.A. Hartsuiker <shartsuiker(a)stefan-vaio.lan>
Date: Sun Oct 5 17:19:10 2008 +0200
fixed a typo
diff --git a/en-US/Books/PuppetWorkshop/Course.xml b/en-US/Books/PuppetWorkshop/Course.xml
index 30b45df..496c975 100644
--- a/en-US/Books/PuppetWorkshop/Course.xml
+++ b/en-US/Books/PuppetWorkshop/Course.xml
@@ -89,7 +89,7 @@
</orderedlist>
</para>
<para>
- This means that work-arounds for actual (user) problems maybe require an additional if-then-else in one or the other script, and updates to programs installed require manual compilation and installation. The success rate of these solutions never reaches 100%, and as it turns out the longer such solution implemented runs, the more exotic problems become and the more machines will fail to remain up-to-date regardless of any attempt made to fix the issue; simply because it becomes to diversive and unmaintainable.
+ This means that work-arounds for actual (user) problems maybe require an additional if-then-else in one or the other script, and updates to programs installed require manual compilation and installation. The success rate of these solutions never reaches 100%, and as it turns out the longer such a implemented solution runs, the more exotic problems become and the more machines will fail to remain up-to-date regardless of any attempt made to fix the issue; simply because it becomes to diversive and unmaintainable.
</para>
<section id="PuppetWorkshop-IntroductionToConfigurationManagement-WhatIsConfigurationManagement-ConfigurationManagement">
15 years, 7 months
en-US/Books
by Jeroen van Meeuwen
en-US/Books/PuppetWorkshop/Course-Appendix.xml | 166 ++++
en-US/Books/PuppetWorkshop/Course.xml | 950 ++++++++++++++++++++++++-
2 files changed, 1079 insertions(+), 37 deletions(-)
New commits:
commit c997f43d392726273d2247382d039c6c6202dfa9
Author: Jeroen van Meeuwen (Fedora Unity) <kanarip(a)fedoraunity.org>
Date: Sun Oct 5 16:34:09 2008 +0200
Updates to the puppet workshop
diff --git a/en-US/Books/PuppetWorkshop/Course-Appendix.xml b/en-US/Books/PuppetWorkshop/Course-Appendix.xml
index 5b02ee8..e87a9bb 100644
--- a/en-US/Books/PuppetWorkshop/Course-Appendix.xml
+++ b/en-US/Books/PuppetWorkshop/Course-Appendix.xml
@@ -4,10 +4,170 @@
<part id="PuppetWorkshop-Appendices">
<title>Appendices</title>
- <appendix id="PuppetWorkshop-AppendixA">
- <title>Puppet Workshop AppendixA</title>
+ <appendix id="PuppetWorkshop-Appendix-Terminology">
+ <title>Puppet Terminology</title>
<para>
- paragraph
+ <itemizedlist>
+ <listitem>
+ <formalpara>
+ <title>class</title>
+ <para>
+ A class is a collection of resources applied to a node with a single include statement. It groups together a comprehensible set of resources. A class <emphasis>ypclient</emphasis> would manage the <code>File["/etc/nsswitch.conf"]</code>, <code>File["/etc/yp.conf"]</code>, <code>Package["ypbind"]</code>, and <code>Service["ypbind"]</code> resources.
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>fact</title>
+ <para>
+ A client-side generated aspect of the node the puppet client runs on. Example facts are the amount of available memory, the hostname, the fully qualified domain name, the operating system (version).
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>manifest</title>
+ <para>
+ The collection of classes, modules and resources that the <xref linkend="PuppetWorkshop-Appendix-Terminology-puppetmaster" /> uses to distribute the appropriate configuration to a <xref linkend="PuppetWorkshop-Appendix-Terminology-puppet" />.
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>module</title>
+ <para>
+ module
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>node</title>
+ <para>
+ The client, a node, is an operating system instance running the puppet client application. This can be a regular operating system running directly on top of actual hardware, a virtual guest as well as a virtual host.
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara id="PuppetWorkshop-Appendix-Terminology-puppet">
+ <title>puppet</title>
+ <para>
+ The client, a node, runs the <application>puppetd</application> daemon or service, and is referred to as the <emphasis>puppet</emphasis>
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara id="PuppetWorkshop-Appendix-Terminology-puppetmaster">
+ <title>puppetmaster</title>
+ <para>
+ The puppetmaster is the node that runs the server-side application to a puppet setup.
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>resource</title>
+ <para>
+ A resource is an instantiated <xref linkend="PuppetWorkshop-Appendix-Terminology-type" />
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>system resource</title>
+ <para>
+ A system resource is a resource available on the node whether it is managed by puppet or not. Unlike in other cases, this term does not as much to system hardware resources such as the CPU or memory available to the operating system, because that.
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara id="PuppetWorkshop-Appendix-Terminology-type">
+ <title>type</title>
+ <para>
+ definition
+ </para>
+ </formalpara>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </appendix>
+ <appendix id="PuppetWorkshop-Appendix-ExampleSSLFrontendReverseProxyLoadBalancerConfiguration">
+ <title>Example SSL Frontend Reverse Proxy Load Balancer Configuration</title>
+ <para>
+<screen>
+<ifModule !mod_proxy.c>
+ LoadModule proxy_module modules/mod_proxy.so
+</IfModule>
+
+<IfModule !mod_proxy_http.c>
+ LoadModule proxy_http_module modules/mod_proxy_http.so
+</IfModule>
+
+<IfModule !mod_proxy_balancer.c>
+ LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
+</IfModule>
+
+<IfModule !mod_headers.c>
+ LoadModule headers_module modules/mod_headers.so
+</IfModule>
+
+<IfModule !mod_ssl.c>
+ LoadModule ssl_module modules/mod_ssl.so
+</IfModule>
+
+<IfModule !mod_authz_host.c>
+ LoadModule authz_host_module modules/mod_authz_host.so
+</IfModule>
+
+<IfModule !mod_log_config.c>
+ LoadModule log_config_module modules/mod_log_config.so
+</IfModule>
+
+<Directory />
+ Options FollowSymLinks
+ AllowOverride None
+ Order deny,allow
+ Deny from all
+</Directory>
+
+<Proxy balancer://master.puppetmanaged.org>
+ BalancerMember http://127.0.0.1:8141 keepalive=on retry=30
+</Proxy>
+
+<VirtualHost *:8140>
+ ServerName master.puppetmanaged.org
+ SSLEngine on
+ SSLCipherSuite SSLv2:-LOW:-EXPORT:RC4+RSA
+ SSLCertificateFile /var/lib/puppet/ssl/certs/master.puppetmanaged.org.pem
+ SSLCertificateKeyFile /var/lib/puppet/ssl/private_keys/master.puppetmanaged.org.pem
+ SSLCertificateChainFile /var/lib/puppet/ssl/ca/ca_crt.pem
+ SSLCACertificateFile /var/lib/puppet/ssl/ca/ca_crt.pem
+ SSLVerifyClient optional
+ SSLVerifyDepth 1
+ SSLOptions +StdEnvVars
+
+ # The following client headers allow the same configuration to work with Pound.
+ RequestHeader set X-SSL-Subject %{SSL_CLIENT_S_DN}e
+ RequestHeader set X-Client-DN %{SSL_CLIENT_S_DN}e
+ RequestHeader set X-Client-Verify %{SSL_CLIENT_VERIFY}e
+
+ <Location />
+ SetHandler balancer-manager
+ Order allow,deny
+ Allow from all
+ </Location>
+
+ ProxyPass / balancer://master.puppetmanaged.org:8140/ timeout=180
+ ProxyPassReverse / balancer://master.puppetmanaged.org:8140/
+ ProxyPreserveHost on
+ SetEnv force-proxy-request-1.0 1
+ SetEnv proxy-nokeepalive 1
+
+ ErrorLog logs/master.puppetmanaged.org-balancer-error_log
+ CustomLog logs/master.puppetmanaged.org-balancer-access_log combined
+ CustomLog logs/master.puppetmanaged.org-balancer-ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
+</VirtualHost>
+</screen>
</para>
</appendix>
<xi:include href="Revision_History.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
diff --git a/en-US/Books/PuppetWorkshop/Course.xml b/en-US/Books/PuppetWorkshop/Course.xml
index 794ad47..30b45df 100644
--- a/en-US/Books/PuppetWorkshop/Course.xml
+++ b/en-US/Books/PuppetWorkshop/Course.xml
@@ -11,94 +11,976 @@
<chapter id="PuppetWorkshop-Introduction">
<title>Introduction</title>
<para>
- Welcome to the Puppet Workshop (or Configuration Management workshop).
+ Welcome to the Puppet Workshop (or Configuration Management workshop). Today's workshop is comprised of the following topics:
+ </para>
+ <para>
+ <segmentedlist>
+ <segtitle>Topic</segtitle>
+ <seglistitem>
+ <seg>Introduction to Configuration Management</seg>
+ </seglistitem>
+ <seglistitem>
+ <seg>Introduction to Puppet</seg>
+ </seglistitem>
+ <seglistitem>
+ <seg>Puppet Terminology</seg>
+ </seglistitem>
+ <seglistitem>
+ <seg>How Puppet Works</seg>
+ </seglistitem>
+ <seglistitem>
+ <seg>Puppet Features</seg>
+ </seglistitem>
+ <seglistitem>
+ <seg>Troubleshooting Puppet</seg>
+ </seglistitem>
+ <seglistitem>
+ <seg>Setting up Puppet</seg>
+ </seglistitem>
+ <seglistitem>
+ <seg>How to use Puppet</seg>
+ </seglistitem>
+ <seglistitem>
+ <seg>Other Things To Do With Puppet</seg>
+ </seglistitem>
+ <seglistitem>
+ <seg>Best Practices</seg>
+ </seglistitem>
+ </segmentedlist>
</para>
</chapter>
- <chapter id="PuppetWorkshop-ConfigurationManagement">
- <title>Configuration Management</title>
- <section id="PuppetWorkshop-ConfigurationManagement-WhatIsConfigurationManagement">
+ <chapter id="PuppetWorkshop-IntroductionToConfigurationManagement">
+ <title>Introduction to Configuration Management</title>
+
+ <section id="PuppetWorkshop-IntroductionToConfigurationManagement-WhatIsConfigurationManagement">
<title>What is Configuration Management?</title>
<para>
- With configuration management, generally speaking, it's about managing the configuration of an organizational resource in order to have it be in a state in which it can perform the operations required by, and possibly critical to, the organization.
+ Within virtually every organization, there's probably a number of systems running Linux, Solaris, Mac OS X or HP-UX. All these machines need to be configured to be able to function properly. Some will need special drivers, and all of them will need correct DNS settings, certain packages installed and certain other packages removed. Most probably, the more systems, the more these diverge in the configuration they need, and potentially diverge in the way this configuration needs to be applied to a given operating system or operating system version.
</para>
<para>
- In this workshop though, we are not going to explore configuration management of a coffee machine. Instead we look at the computers in a network running any platform but the one from a prominent proprietary North America-based vendor. We are talking automation and further enhancement of Computer Systems Administration.
+ More specifically, an organization may have a couple of webservers, fileservers, a DNS and a DHCP server, a number of desktop PCs, and a number of laptops. The laptops may need slightly different system configuration (no LDAP authentication, and with a VPN client installed, for example), and the desktop PCs may need different applications installed then the servers, and so forth. Yet, between, say, a hundred desktop PCs, you would want the configuration to be as similar as possible. You may want to diverge between a software developer's desktop PC and a desktop PC in Human Resources, but in essence these are desktop profiles diverging on the application level, applied upon a stable system configuration which remains the same, or similar at least.
</para>
<para>
- When managing the operating system and software running on mainframes, servers, desktop PCs and laptops
+ By the time the organization grows, replaces the hardware, upgrades to another version of the operating system, or applies changes, the challenge to making everything work yet maintain a similar configuration between all nodes becomes bigger. While every attempt made to control the situation can be called a form of configuration management, the solution without a configuration management framework is often comprised of:
</para>
+ <para>
+ <orderedlist>
+ <listitem>
+ <para>
+ a number of scripts (with or without revision control), to move around files, install packages, perform daily check-ups,
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ NFS mounts with programs pre-installed, so that nodes can mount these NFS shares and the software needs to be provided once, in one location, for all to share,
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ file server shares with pre-compiled drivers, or driver sources being compiled on the nodes by scripts running on the nodes,
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ terminal servers or desktop servers like with FreeNX, so that configuration concentrates on a smaller number of boxes
+ </para>
+ </listitem>
+ </orderedlist>
+ </para>
+ <para>
+ This means that work-arounds for actual (user) problems maybe require an additional if-then-else in one or the other script, and updates to programs installed require manual compilation and installation. The success rate of these solutions never reaches 100%, and as it turns out the longer such solution implemented runs, the more exotic problems become and the more machines will fail to remain up-to-date regardless of any attempt made to fix the issue; simply because it becomes to diversive and unmaintainable.
+ </para>
+
+ <section id="PuppetWorkshop-IntroductionToConfigurationManagement-WhatIsConfigurationManagement-ConfigurationManagement">
+ <title>Configuration Management</title>
+ <para>
+ Generally speaking, with configuration management, it's about managing the configuration of one or more organizational resources in order to have it be in a state in which it can perform the operations required by, and possibly critical to, the organization's operations.
+ </para>
+ <para>
+ In this workshop though, we are not going to explore configuration management of a coffee machine. Instead we look at the computers in a network running any platform but the one from a prominent proprietary North America-based vendor. We are talking automation and further enhancement of Computer Systems Administration.
+ </para>
+ <para>
+ When managing the operating system and software running on mainframes, servers, desktop PCs and laptops, you may find yourself looking for answers to questions such as:
+ </para>
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ How do I manage what packages are installed on a given system?
+ <itemizedlist>
+ <listitem>
+ <para>
+ How do I manage the configuration of those packages (this software)?
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ How do I make sure these packages are updated?
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ How do I make sure the services that every machine needs to run are actually running?
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ How do I manage monitoring the services or a machine's state?
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ A job needs to run periodically (maybe via <application>crontab</application>), but how do I make sure it is run, and how can I change or remove the job later?
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Given different operating systems and operating system versions, how do I make sure I apply the correct routine for adding a user, starting a service, install/update/remove a package?
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </section>
+
+ <section id="PuppetWorkshop-IntroductionToConfigurationManagement-WhatIsConfigurationManagement-ConfigurationManagementRequirements">
+ <title>Configuration Management Requirements</title>
+ <para>
+ This section is about what you would want Configuration Management to do for you:
+ </para>
+ <para>
+ <itemizedlist>
+ <listitem>
+ <formalpara>
+ <title>Maintain consistency across systems</title>
+ <para>
+ Consistency across systems is key in understanding where a problem might come from. If each and every system is unique, you may end up searching for unique aspects of the system's configuration in order to determine the cause of a problem, while if systems are consistent to some extend, you may have found the problem even before your users report it.
+ </para>
+ </formalpara>
+ <formalpara>
+ <title>Consistency !== Equality</title>
+ <para>
+ Of course keeping system consistent in their configuration doesn't say all your systems should be entirely equal, because that would not be feasible for many organizations and defeat the purpose of configuration management. Needless to say though, having all systems be entirely unique defeats part of the purpose of configuration management as well.
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>Categorize systems</title>
+ <para>
+ Categorizing systems into categories like (for example) <emphasis>desktop</emphasis>, <emphasis>server</emphasis> and/or <emphasis>laptop</emphasis>, helps in applying changes to one category, such as installing <application>GNOME</application> or keeping systems up-to-date according to a schedule that may (servers) or may not (desktops, laptops) need a service or maintenance window.
+ </para>
+ </formalpara>
+ <formalpara>
+ <title>Different profiles</title>
+ <para>
+ More generally speaking, different profiles for each of these categories may be defined as well, of course. A developer's desktop most likely has different requirements then a publicly accessible booth at the reception desk.
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>Version Control</title>
+ <para>
+ Version control lets you keep track of changes applied to the overall configuration management framework, which is important because since you are managing different aspects of a number of systems, if something goes wrong the changes applied to the configuration of puppet will most likely be the first clue as to what caused the new problem and lets you recover relatively fast.
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>Overview of systems' tasks and services</title>
+ <para>
+ Being able to quickly tell what a system does exactly, and how it differs from another system not only aids in performing risk assessments (impact of a given change), but may also help in determining the impact of a change beforehand, as well as determine the impact of an unexpected system interruption. Providing an example to the latter I suppose if you update httpd across systems (whether tested or untested), but the new software version doesn't work as expected, a configuration management framework should be able to quickly give you an overview of impacted systems and services.
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>Updating systems</title>
+ <para>
+ Some systems can be updated irregularly, such as desktop PCs, but need to be kept up-to-date nonetheless. Other systems need to have service and/or maintenance windows, such as servers.
+ </para>
+ </formalpara>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </section>
+
</section>
- <section id="PuppetWorkshop-ConfigurationManagement-ProblemsWithConfigurationManagement">
- <title>Problems with Configuration Management?</title>
+ <section id="PuppetWorkshop-IntroductionToConfigurationManagement-ProblemsWithoutConfigurationManagement">
+ <title>Problems without Configuration Management</title>
+ <para>
+ There's a number of challenges in applying configuration management, such as:
+ </para>
<para>
- This is a first section
+ <orderedlist>
+ <listitem>
+ <formalpara>
+ <title>Different operating systems</title>
+ <para>
+ If you have a diverse organization in terms of the operating systems your nodes run, applying the same thing to a set of different operating systems is challenging in that adding a user or setting a password on one operating system isn't the same as adding a user or setting a password on another operating system. Of course the same applies to installing, updating or removing a package, and so forth. Of course the more different operating systems you have, the harder managing any given resource becomes.
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>Different distributions</title>
+ <para>
+ Although an organization may not have different distributions running right now, sooner or later, an organization will migrate from one distribution to another; That is practically inevitable. If an organization does have different distributions running, practical problems such as the location of certain files become evident, as well as different interfaces to resource-management (like adding a user with <application>useradd</application> or <application>adduser</application>).
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>Different versions of distributions</title>
+ <para>
+ Different versions of distributions, or more accurately the different versions of the utilities, as well as the configuration settings for updated programs that come with the distributions, can form a challenge when or if the organization does not have a proper configuration management framework in place. Note that even though an organization may not have different versions of a distribution right now, at some point the organization will need to upgrade to the next available release.
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>Different tasks to perform</title>
+ <para>
+ Each different system in an organization is performing one or more tasks that may be unique to the system or may be shared between a group of systems, but with many different tasks being performed throughout the organization's infrastructure, keeping track of what system performs which task, keeping these systems up to date and configuring them to have the required packages installed for each of the tasks they perform, tackling the problem becomes harder.
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>Different ways to perform a task</title>
+ <para>
+ Within an organization that has multiple servers performing the same task, keeping a similar state or perform a task in a similar manner is challenging in that without configuration management, you are most likely to find three or more ways to purge old files from <filename>/tmp/</filename> and <filename>/var/tmp/</filename>, for example. The same differentiation may apply to how webservers' VirtualHost's are configured, or how a NFS share is mounted (mount options in particular).
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>Different nodes</title>
+ <para>
+ This one goes to hardware-specific needs and configuration. When each of the systems in an organization are not all of the same brand, make and model, or each system has different harddisk layouts, or needs different videocard drivers, you are basically keeping lists and making choices based on this list.
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>Different services</title>
+ <para>
+ Different services of course are configured differently, as far as configuration file locations and syntax are concerned. However, figuring out the best way to apply certain configuration to a system for each service is less efficient without configuration management. You might adjust a script or two and/or adjust the source repository from which you pull updates to each machine, but the changes may turn out to only apply to that system that needed the exception to the rule instead of focussing on a more general solution to the problem once, and apply that solution multiple times, over and over again.
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>Interfaces to a system resource</title>
+ <para>
+ This is probably the hardest one if you are not using any configuration management framework. Given different operating systems, distributions and/or distribution versions, in which case any combination of the three only makes the problem harder to solve, you are most likely to encounter so many different ways to manage a resource, that a simple script or routine cannot cover all of them. One example is adding a user to the system, and making the user a group member of several groups. You may find routines ranging from using <application>useradd</application> or <application>adduser</application> depending on the distribution used, to writing out ldifs from a template and using <application>ldapadd</application> or <application>ldapmodify</application> depending on whether the user already exists or not.
+ </para>
+ </formalpara>
+ </listitem>
+ </orderedlist>
</para>
+ </section>
+ <section id="PuppetWorkshop-IntroductionToConfigurationManagement-NotSoTechnicalAspects">
+ <title>Not So Technical Aspects</title>
+ <para>
+ In addition to the problems you may encounter with or without configuration management, there's a number of problems or challenges that are not so technical, but you may want to see resolved by a configuration management utility;
+ </para>
+ <para>
+ <orderedlist>
+ <listitem>
+ <formalpara>
+ <title>Applying changes</title>
+ <para>
+ Applying changes to multiple machines at once may become a problem depending on the size of the organization or the amount of control that you have over systems, remotely. There was a time when changing the DNS servers for a set of systems required one to log on to the console of each system and edit <filename>/etc/resolv.conf</filename> manually. You can see the problem become bigger if the organization does not have 20 systems, but 1200.
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>Keeping track of changes</title>
+ <para>
+ Another challenge is keeping track of the changes applied to each system. Even with configuration management, errors can be made and systems might behave unexpectedly, in which case you will want to know what changed on these systems, and how to recover to an operational state. Keeping track of changes without a configuration management framework however is a little harder, but with configuration management, you have reports (changes applied to a system in a nice overview), and most advisebly you have the configuration for Puppet stored in a Source Control Management system, or SCM system, like CVS, SVN, Mercurial, or GIT.
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>Staging changes</title>
+ <para>
+ Staging changes is a huge must-have in case changes are radical or might destroy a normal system's operation (even if temporary). For such changes, you would want to test the changes first, and with Puppet, you get this in the form of <emphasis>environments</emphasis>.
+ </para>
+ </formalpara>
+ </listitem>
+ </orderedlist>
+ </para>
</section>
</chapter>
- <chapter id="PuppetWorkshop-Puppet">
- <title>Puppet</title>
+ <chapter id="PuppetWorkshop-IntroductionToPuppet">
+ <title>Introduction To Puppet</title>
+ <para>
+ Puppet is a solution to the problems set forth in <xref linkend="PuppetWorkshop-IntroductionToConfigurationManagement-ProblemsWithoutConfigurationManagement" />.
+ </para>
- <section id="PuppetWorkshop-Puppet-WhatDoesPuppetDo">
+ <section id="PuppetWorkshop-IntroductionToPuppet-WhatDoesPuppetDo">
<title>What Does Puppet Do?</title>
<para>
- This is a first section
+ Puppet offers a high-level abstraction of system resources like you would encounter on any given system, such as users, services and packages. Seeing as how different operating systems and different distributions each have different interfaces, so-called <emphasis>providers</emphasis> in puppet terms, to these system resources, scripting a package to be installed, updated, removed or be of a certain version includes a lot of <code>if-then-else</code> statements in a script you'd write to manage that particular system resource, the package.
+ </para>
+ <para>
+ On Debian, Ubuntu and derivative distributions for example, the package provider may be <application>apt</application>, <application>dpkg</application>, <application>smart</application>, <application>alien</application>, <application>PackageKit</application>, while on Fedora, Red Hat and it's derivatives, the package provider may be <application>rpm</application>, <application>yum</application>, <application>PackageKit</application>, <application>apt</application> or <application>smart</application>.
+ </para>
+ <para>
+ Another difference between distributions is how services can be started, or configured to start up when the machine boots. A <application>service</application> script may be available, or <filename>/etc/init.d/</filename> may contain scripts to start and stop a service. Also, some of these service providers may have <code>status</code>, <code>reload</code> and <code>restart</code> command parameters, whereas others may not have. Additionally, using <application>chkconfig</application> to configure the runlevels the service should be enabled or disabled in may not be available on all systems.
+ </para>
+ <para>
+ By abstracting these system resources into <emphasis>types</emphasis>, Puppet takes on the headaches for most operating system and distribution specific interfaces to managing these system resources. It knows, or figures out all by itself, what provider to use given a <emphasis>type</emphasis>.
+ </para>
+ <formalpara>
+ <title>Abstraction of system resources</title>
+ <para>
+ Abstraction of the system resources into so-called <emphasis>types</emphasis> causes the administrator to only need to configure a type, such as <emphasis>package</emphasis>, <emphasis>user</emphasis>, <emphasis>cron</emphasis>, and so forth. The configuration management utility itself will figure out what package manager backend to use, whether it's apt, yum, rpm, dpkg, smart or PackageKit.
+ </para>
+ </formalpara>
+ <para>
+ Puppet example to ensure user <emphasis>sysadmin</emphasis> exists on a system:
+ <screen>user { "sysadmin":
+ ensure => present
+}</screen>
+ </para>
+ <para>
+ Puppet example to ensure the <emphasis>ypbind</emphasis> package is installed and the most recent version, <emphasis>ypbind</emphasis> is correctly configured, and the <emphasis>ypbind</emphasis> service is running:
+ <screen>package { "ypbind":
+ ensure => latest
+}
+
+file { "/etc/yp.conf":
+ source => "puppet://$server/files/yp.conf",
+ notify => Service["ypbind"],
+ require => Package["ypbind"]
+}
+
+service { "ypbind":
+ enable => true,
+ ensure => running,
+ require => [
+ File["/etc/yp.conf"],
+ Package["ypbind"]
+ ]
+}</screen>
+ </para>
+ <para>
+ The above example is called a <emphasis>manifest</emphasis>, built out of <emphasis>types</emphasis> (package, file, service), which, once defined in a manifest, are referred to as <emphasis>resources</emphasis>. See also <xref linkend="PuppetWorkshop-Appendix-Terminology" />
</para>
</section>
+ </chapter>
+
+ <chapter id="PuppetWorkshop-PuppetTerminology">
+ <title>Puppet Terminology</title>
+ <para>
+ Terminology used in this documentation. See also <xref linkend="PuppetWorkshop-Appendix-Terminology" />
+ <itemizedlist>
+ <listitem>
+ <formalpara>
+ <title>class</title>
+ <para>
+ A class is a collection of resources applied to a node with a single include statement. It groups together a comprehensible set of resources. A class <emphasis>ypclient</emphasis> would manage the <code>File["/etc/nsswitch.conf"]</code>, <code>File["/etc/yp.conf"]</code>, <code>Package["ypbind"]</code>, and <code>Service["ypbind"]</code> resources.
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>fileserver</title>
+ <para>
+ The fileserver is where the puppet pulls files from. It is normally integrated with the puppetmaster, but it can be an entirely different server, too.
+ </para>
+ </formalpara>
+ <para>
+ The fileserver serves files to puppets that request them, but it also serves <emphasis>templates</emphasis>, which are parsed on the fileserver (puppetmaster), and passed on to the client as a whole new file.
+ </para>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>manifest</title>
+ <para>
+ The collection of classes, modules and resources that the <xref linkend="PuppetWorkshop-PuppetTerminology-puppetmaster" /> uses to distribute the appropriate configuration to a <xref linkend="PuppetWorkshop-PuppetTerminology-puppet" />.
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>module</title>
+ <para>
+ A module is a placeholder for files, manifests, plugins and templates. Creating a module has numerous advantages such as separate version control, separate staging from development through testing to production, and so forth.
+ </para>
+ </formalpara>
+ <para>
+ <emphasis>See also</emphasis>: <xref linkend="PuppetWorkshop-HowToUsePuppet-Modules" />, <xref linkend="PuppetWorkshop-HowToUsePuppet-Plugins" />
+ </para>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>node</title>
+ <para>
+ The client, a node, is an operating system instance running the puppet client application. This can be a regular operating system running directly on top of actual hardware, a virtual guest as well as a virtual host.
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara id="PuppetWorkshop-PuppetTerminology-puppet">
+ <title>puppet</title>
+ <para>
+ The client, a node, runs the <application>puppetd</application> daemon or service, and is referred to as the <emphasis>puppet</emphasis>
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara id="PuppetWorkshop-PuppetTerminology-puppetmaster">
+ <title>puppetmaster</title>
+ <para>
+ The puppetmaster is the node that runs the server-side application to a puppet setup.
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>resource</title>
+ <para>
+ A resource is an instantiated <xref linkend="PuppetWorkshop-PuppetTerminology-type" />
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>system resource</title>
+ <para>
+ A system resource is a resource available on the node whether it is managed by puppet or not. Unlike in other cases, this term does not as much to system hardware resources such as the CPU or memory available to the operating system, because that.
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara id="PuppetWorkshop-PuppetTerminology-type">
+ <title>type</title>
+ <para>
+ definition
+ </para>
+ </formalpara>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </chapter>
- <section id="PuppetWorkshop-Puppet-HowDoesItWork">
- <title>How Does It Work?</title>
+ <chapter id="PuppetWorkshop-HowPuppetWorks">
+ <title>How Puppet Works</title>
+ <para>
+ This is an overview of how puppet works -in a working setup.
+ </para>
+ <para>
+ <orderedlist>
+ <listitem>
+ <formalpara>
+ <title>The puppet starts for the first time</title>
+ <para>
+ It generates a certificate using the node's FQDN.
+ </para>
+ </formalpara>
+ <note>
+ <para>
+ Although not required, it is strongly recommended to have the client use a FQDN that is registered in DNS (forward as well as reverse).
+ </para>
+ </note>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>The puppet submits the certificate to the puppetmaster</title>
+ <para>
+ The puppetmaster, also the Certificate Authority, or <emphasis>puppetca</emphasis>, needs to sign the certificate before the client can be considered authenticated.
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>The puppet waits 300 seconds for a signed certificate</title>
+ <para>
+ It this configurable timeout of 300 seconds<footnote><para>Specify the timeout with <code>--waitforcert [seconds]</code></para></footnote> has passed, the puppet quits.
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>The puppetmaster signs the certificate</title>
+ <para>
+ To do so, you can either configure the puppetmaster to automatically sign certificates or sign manually. Automatically signing certificates is generally a very bad idea. To manually sign a certificate, use:
+ </para>
+ </formalpara>
+ <para>
+ <screen># <userinput>puppetca --sign <fqdn></userinput></screen>
+ </para>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>The puppet receives the signed certificate</title>
+ <para>
+ Immediately thereafter, the puppet starts a configuration run.
+ </para>
+ </formalpara>
+ <warning>
+ <para>
+ The time on both the puppetmaster and the puppet must be within 5 minutes of eachother as the certificate generated and signed has a validity period. If the difference in time of these two nodes is more then 5 minutes, you will get a "Certificates not trusted" type of error.
+ </para>
+ </warning>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>The puppet generates all the facts</title>
+ <para>
+ Most configurations rely on client information to make decisions. When the Puppet client starts, it loads the Facter Ruby library, collects all of the facts that it can, and passes those facts to the interpreter. When you use Puppet over a network, these facts are passed over the network to the server and the server uses them to compile the client's configuration.
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>The puppetmaster parses it's manifests</title>
+ <para>
+ The puppetmaster parses through all it's manifests, including the manifests not applicable to the puppet that is polling. It only sends out the manifest applicable to the puppet polling, however.
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>The puppet receives the manifests</title>
+ <para>
+ When the puppet receives the manifests, it may still contain variables such as <code>$hostname</code>, <code>$operatingsystem</code> and others, which the puppet fills out with the appropriate values.
+ </para>
+ </formalpara>
+<!-- <warning>
+ <para>
+ All variables in the manifest sent to the client should be based on facts rather then fiction.
+ </para>
+ </warning>-->
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>The puppet applies the manifest</title>
+ <para>
+ While the puppet applies the manifest, it pulls files from the puppetmaster's <emphasis>fileserver</emphasis> after checking the local checksum against the remote checksum. When running with debug output, this will show as
+ <screen>debug: Calling fileserver.list
+debug: //Node[node1.example.com]/File[/tmp/foo]/checksum: Initializing checksum hash
+debug: //Node[node1.example.com]/File[/tmp/foo]: Creating checksum {md5}85e53dc9439253a1ec9ca87aeffd9b0b
+debug: Calling fileserver.describe</screen>
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>Files that are replaced are backed up</title>
+ <para>
+ The puppet sends a copy of the files it replaces back to the puppetmaster.
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>The puppet reports to the puppetmaster</title>
+ <para>
+ A detailed report of what the puppet has done with the manifests is sent back to the puppetmaster.
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>The puppet waits for 30 minutes</title>
+ <para>
+ para
+ </para>
+ </formalpara>
+ </listitem>
+ </orderedlist>
+ </para>
+ <para>
+ A puppet setup is comprised out of the following parts:
+ </para>
+ <formalpara>
+ <title>The Puppetmaster</title>
<para>
- This is a first section
+ The puppetmaster of course is the core element in a puppet setup. Not only is it responsible for the handing over the manifest to the client, it also takes care of serving the files needed by the manifest, as well as
</para>
+ </formalpara>
+ </chapter>
- </section>
+ <chapter id="PuppetWorkshop-PuppetFeatures">
+ <title>Puppet Features</title>
+ <para>
+ paragraph
+ </para>
+ </chapter>
- <section id="PuppetWorkshop-Puppet-Troubleshooting">
- <title>And What If It Doesn't?</title>
+ <chapter id="PuppetWorkshop-TroubleshootingPuppet">
+ <title>Troubleshooting Puppet</title>
+ <para>
+ This section is about troubleshooting the puppetmaster and puppet
+ </para>
+ </chapter>
+
+ <chapter id="PuppetWorkshop-SettingUpPuppet">
+ <title>Setting Up Puppet</title>
+ <para>
+ In this section, we are going to set up a puppetmaster, and a puppet client. The puppetmaster is going to run the <emphasis>mongrel</emphasis> server-type, for setting up a puppetmaster for larger environments.
+ </para>
+
+ <section id="PuppetWorkshop-SettingUpPuppet-Installation">
+ <title>Installation</title>
<para>
- This is a first section
+ Install the required packages for the puppetmaster:
</para>
+ <formalpara>
+ <title>Smaller organizations (< ~25 clients)</title>
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ The puppetmaster.
+ </para>
+ <para>
+ <screen># <userinput>yum install puppet-server</userinput></screen>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ (optional) A database server (one of MySQL, SQLite3 or Postgresql), and the appropriate Ruby library. During this workshop, we use MySQL.
+ </para>
+ <para>
+ <screen># <userinput>yum install mysql-server ruby-mysql</userinput></screen>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ (optional) The Ruby RRDtool library.
+ </para>
+ <para>
+ <screen># <userinput>yum install ruby-RRDtool</userinput></screen>
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </formalpara>
+ <formalpara>
+ <title>Larger organizations (> ~25 clients)</title>
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ A webserver capable of performing as a frontend SSL reverse proxy load balancer, such as the Apache HTTPd webserver.
+ </para>
+ <para>
+ <screen># <userinput>yum install httpd</userinput></screen>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The Ruby mongrel library
+ </para>
+ <para>
+ <screen># <userinput>yum install rubygem-mongrel</userinput></screen>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The puppetmaster.
+ </para>
+ <para>
+ <screen># <userinput>yum install puppet-server</userinput></screen>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ (optional) A database server (one of MySQL, SQLite3 or Postgresql), and the appropriate Ruby library. During this workshop, we use MySQL.
+ </para>
+ <para>
+ <screen># <userinput>yum install mysql-server ruby-mysql</userinput></screen>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ (optional) The Ruby RRDtool library.
+ </para>
+ <para>
+ <screen># <userinput>yum install ruby-RRDtool</userinput></screen>
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </formalpara>
</section>
- <section id="PuppetWorkshop-Puppet-HowToSetItUp">
- <title>How To Set It Up (right)?</title>
+ <section id="PuppetWorkshop-SettingUpPuppet-Configuration">
+ <title>Configuration</title>
<para>
- This is a first section
+ para
</para>
+ <section id="PuppetWorkshop-SettingUpPuppet-Configuration-Puppetmaster">
+ <title>Configuring the Puppetmaster</title>
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ Configure in /etc/puppet/puppet.conf section [puppetmasterd] certname and certdnsaliases
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Configure a minimal manifest (site.pp)
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Start the puppetmaster once (generate certificates)
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ (optional) configure reporting
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ (optional) configure storeconfigs
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ (optional) configure graphing
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ <para>
+ The configuration file for puppet and puppetmaster is <filename>/etc/puppet/puppet.conf</filename>. It is a file in INI-like format with sections, keys and values.
+ </para>
+ <formalpara>
+ <title>First run relevant settings</title>
+ <para>
+ For the first run of the puppetmaster, we need to configure the following:
+ <itemizedlist>
+ <listitem>
+ <formalpara>
+ <title>certname</title>
+ <para>
+ The puppetmaster certificate's Common Name (CN), for which by default the system's hostname is used. The hostname of the system is a pretty reasonable value.
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara>
+ <title>certdnsnames</title>
+ <para>
+ A colon (<literal>:</literal>) seperated list of DNS names resolving to the puppetmaster. Include here:
+ <orderedlist>
+ <listitem>
+ <para>
+ The short hostname of the system, using the output of: <screen># <userinput>hostname -s</userinput></screen>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>puppet</literal>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>puppet</literal>, followed by the DNS domain name of the system, using the output of <screen># <userinput>dnsdomainname</userinput></screen>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Any other hostname or fully qualified domain name you want to use for the puppetmaster.
+ </para>
+ </listitem>
+ </orderedlist>
+ </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <para>
+ The locations where puppet seeks it's configuration and puts it's transitional data. The most important setting is <literal>vardir</literal>, which should be set to <filename>/var/lib/puppet/</filename>. Further settings include:
+ <itemizedlist>
+ <listitem>
+ <para>
+ <code>logdir = /var/log/puppet/</code>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <code>rundir = /var/run/puppet/</code>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <code>ssldir = $vardir/ssl/</code>
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ <note>
+ <para>
+ If you used a package to install puppet, the defaults. It is the upstream puppet package that cannot coher with each and every distribution or operating system it is available for, and therefor has a set of defaults that will work, but will need to be changed on most platforms.
+ </para>
+ </note>
+ </listitem>
+ <listitem>
+ <para>
+ Whether or not to use autosigning of certificates, using <code>[puppetca], autosign = false, true</code>. The default is to <emphasis>not</emphasis> use autosigning.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Another setting to check is whether or not this puppetmaster is going to be the Certificate Authority (<code>[puppetmasterd], ca = <replaceable>false, true</replaceable></code>). The default is often set to <code>true</code>.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </formalpara>
+ <formalpara>
+ <title>Other relevant settings</title>
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ The location of tagmail.conf, <code>[main], tagmap = <replaceable>/path/to/tagmail.conf</replaceable></code>, for reporting changes applied to puppets, via email.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ A list of environments using a comma seperated list, in <code>[puppetmasterd], environments = <replaceable>environments</replaceable></code>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ whether or not to use reporting, and what reporting to use (tagmail, store, rrdgraph)
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ what type of configuration store to use (sqlite3, mysql, postgresql)
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ database settings for use with storeconfigs
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </formalpara>
+ </section>
+
+ <section id="PuppetWorkshop-SettingUpPuppet-Configuration-SSLFrontendReverseProxyLoadBalancer">
+ <title>Configuring the SSL Frontend Reverse Proxy Load Balancer</title>
+ <para>
+ para
+ </para>
+ </section>
+
+ <section id="PuppetWorkshop-SettingUpPuppet-Configuration-DatabaseServer">
+ <title>Configuring the Database Server</title>
+ <para>
+ para
+ </para>
+
+ <section id="PuppetWorkshop-SettingUpPuppet-Configuration-DatabaseServer-SQLite3">
+ <title>SQLite3</title>
+ <para>
+ para
+ </para>
+ </section>
+
+ <section id="PuppetWorkshop-SettingUpPuppet-Configuration-DatabaseServer-MySQL">
+ <title>MySQL</title>
+ <para>
+ para
+ </para>
+ </section>
+
+ <section id="PuppetWorkshop-SettingUpPuppet-Configuration-DatabaseServer-Postgresql">
+ <title>PostgreSQL</title>
+ <para>
+ para
+ </para>
+ </section>
+
+ </section>
+
</section>
- <section id="PuppetWorkshop-Puppet-HowToUseIt">
- <title>How To Use It?</title>
+ </chapter>
+
+ <chapter id="PuppetWorkshop-HowToUsePuppet">
+ <title>How To Use Puppet</title>
+ <para>
+ This is a first section
+ </para>
+
+ <section id="PuppetWorkshop-HowToUsePuppet-Modules">
+ <title>Using Modules</title>
<para>
- This is a first section
+ About using modules
</para>
-
</section>
- <section id="PuppetWorkshop-Puppet-WhatElseCanItDo">
- <title>What Else Can It Do?</title>
+ <section id="PuppetWorkshop-HowToUsePuppet-Plugins">
+ <title>Using Plugins</title>
<para>
- This is a first section
+ About the use of plugins
</para>
+ </section>
+
+ </chapter>
+
+ <chapter id="PuppetWorkshop-OtherThingsToDoWithPuppet">
+ <title>Other Things To Do With Puppet</title>
+ <para>
+ This is a first section
+ </para>
+ <section id="PuppetWorkshop-OtherThingsToDoWithPuppet-WritingCustomTypes">
+ <title>Writing Custom Types</title>
+ <para>
+ paragraph
+ </para>
</section>
- <section id="PuppetWorkshop-Puppet-BestPractices">
- <title>Best Practices</title>
+ <section id="PuppetWorkshop-OtherThingsToDoWithPuppet-WritingCustomFacts">
+ <title>Writing Custom Facts</title>
<para>
- This is a first section
+ paragraph
</para>
+ </section>
+ <section id="PuppetWorkshop-OtherThingsToDoWithPuppet-WritingCustomFunctions">
+ <title>Writing Custom Functions</title>
+ <para>
+ paragraph
+ </para>
</section>
</chapter>
+
+ <chapter id="PuppetWorkshop-BestPractices">
+ <title>Best Practices</title>
+ <para>
+ This is a first section
+ </para>
+ </chapter>
+
</part>
<xi:include href="Course-Appendix.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
15 years, 7 months
en-US/Books en-US/Common_Content en-US/Courses.xml en-US/Template
by Jeroen van Meeuwen
en-US/Books/ClassRoom/Manual-Preface.xml | 1
en-US/Books/ClassRoom/Manual.xml | 1
en-US/Books/Linux/Advanced/Course-Appendix.xml | 1
en-US/Books/Linux/Advanced/Course-Preface.xml | 1
en-US/Books/Linux/Advanced/Course.xml | 4
en-US/Books/Linux/Advanced/Manual-Appendix.xml | 1
en-US/Books/Linux/Advanced/Manual-Preface.xml | 1
en-US/Books/Linux/Basic/Course-Appendix.xml | 1
en-US/Books/Linux/Basic/Course-Preface.xml | 1
en-US/Books/Linux/Basic/Course.xml | 7
en-US/Books/Linux/Basic/Manual-Appendix.xml | 1
en-US/Books/Linux/Basic/Manual-Preface.xml | 1
en-US/Books/Linux/ConfigurationManagement/Course-Appendix.xml | 1
en-US/Books/Linux/ConfigurationManagement/Course-Preface.xml | 1
en-US/Books/Linux/ConfigurationManagement/Manual-Appendix.xml | 1
en-US/Books/Linux/ConfigurationManagement/Manual-Preface.xml | 1
en-US/Books/Linux/RHCETraining/Course-Appendix.xml | 1
en-US/Books/Linux/RHCETraining/Course-Preface.xml | 1
en-US/Books/Linux/RHCETraining/Course.xml | 1
en-US/Books/Linux/RHCETraining/Manual-Appendix.xml | 1
en-US/Books/Linux/RHCETraining/Manual-Preface.xml | 1
en-US/Books/Linux/Senior/Course-Appendix.xml | 6
en-US/Books/Linux/Senior/Course-Preface.xml | 1
en-US/Books/Linux/Senior/Course.xml | 79 ++++++
en-US/Books/Linux/Senior/Manual-Preface.xml | 1
en-US/Books/Linux/Senior/Manual.xml | 2
en-US/Books/PuppetWorkshop/Author_Group.xml | 24 ++
en-US/Books/PuppetWorkshop/Course-Appendix.xml | 14 +
en-US/Books/PuppetWorkshop/Course-Book_Info.xml | 27 ++
en-US/Books/PuppetWorkshop/Course-Preface.xml | 12 +
en-US/Books/PuppetWorkshop/Course.xml | 116 ++++++++++
en-US/Books/PuppetWorkshop/Revision_History.xml | 26 ++
en-US/Books/Template/Course-Preface.xml | 1
en-US/Books/Template/Manual-Preface.xml | 1
en-US/Common_Content/Conventions.xml | 4
en-US/Common_Content/Feedback.xml | 4
en-US/Common_Content/Legal_Notice.xml | 17 +
en-US/Courses.xml | 17 +
en-US/Template/Course-Appendix.xml | 1
en-US/Template/Course-Preface.xml | 1
en-US/Template/Manual-Appendix.xml | 1
en-US/Template/Manual-Preface.xml | 1
42 files changed, 371 insertions(+), 15 deletions(-)
New commits:
commit bb21aa838eb70b760b9bdd0d6718d36d0524f4a6
Author: Jeroen van Meeuwen (Fedora Unity) <kanarip(a)fedoraunity.org>
Date: Fri Oct 3 12:46:30 2008 +0200
Add more and make it work with the latest publican
diff --git a/en-US/Books/ClassRoom/Manual-Preface.xml b/en-US/Books/ClassRoom/Manual-Preface.xml
index b0c7803..dc37059 100644
--- a/en-US/Books/ClassRoom/Manual-Preface.xml
+++ b/en-US/Books/ClassRoom/Manual-Preface.xml
@@ -5,6 +5,7 @@
<preface id="ClassRoomManual-Preface">
<title>Preface</title>
<para>
+ paragraph
</para>
<xi:include href="../../Common_Content/Conventions.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="../../Common_Content/Feedback.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
diff --git a/en-US/Books/ClassRoom/Manual.xml b/en-US/Books/ClassRoom/Manual.xml
index 55c370c..c6f7b45 100644
--- a/en-US/Books/ClassRoom/Manual.xml
+++ b/en-US/Books/ClassRoom/Manual.xml
@@ -279,6 +279,7 @@
<section id="ClassRoomManual-SettingUpClassRoom-ConfiguringTheTeachersPC">
<title>Configuring the Teacher's PC</title>
<para>
+ paragraph
</para>
</section>
diff --git a/en-US/Books/Linux/Advanced/Course-Appendix.xml b/en-US/Books/Linux/Advanced/Course-Appendix.xml
index f2c64e7..0affc48 100644
--- a/en-US/Books/Linux/Advanced/Course-Appendix.xml
+++ b/en-US/Books/Linux/Advanced/Course-Appendix.xml
@@ -7,6 +7,7 @@
<appendix id="LinuxAdvancedCourse-AppendixA">
<title>Linux Advanced Course AppendixA</title>
<para>
+ paragraph
</para>
</appendix>
<xi:include href="Revision_History.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
diff --git a/en-US/Books/Linux/Advanced/Course-Preface.xml b/en-US/Books/Linux/Advanced/Course-Preface.xml
index 7278085..9518e23 100644
--- a/en-US/Books/Linux/Advanced/Course-Preface.xml
+++ b/en-US/Books/Linux/Advanced/Course-Preface.xml
@@ -5,6 +5,7 @@
<preface id="LinuxAdvancedCourse-Preface">
<title>Preface</title>
<para>
+ paragraph
</para>
<xi:include href="../../../Common_Content/Conventions.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="../../../Common_Content/Feedback.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
diff --git a/en-US/Books/Linux/Advanced/Course.xml b/en-US/Books/Linux/Advanced/Course.xml
index 46c0474..f6e116a 100644
--- a/en-US/Books/Linux/Advanced/Course.xml
+++ b/en-US/Books/Linux/Advanced/Course.xml
@@ -61,7 +61,7 @@
</listitem>
<listitem>
<para>
- Detect the number of harddrives and make a logical paritioning decision based on that information.
+ Detect the number of harddrives and make a logical partitioning decision based on that information.
</para>
</listitem>
</itemizedlist>
@@ -105,6 +105,7 @@
<section id="LinuxAdvancedCourse-DeployingLinux-Cobbler">
<title>Cobbler</title>
<para>
+ paragraph
</para>
</section>
@@ -254,6 +255,7 @@
<section id="LinuxAdvancedCourse-DNSAndDHCPServer-BirdsViewOfDNS">
<title>Birds View Of DNS</title>
<para>
+ paragraph
</para>
</section>
diff --git a/en-US/Books/Linux/Advanced/Manual-Appendix.xml b/en-US/Books/Linux/Advanced/Manual-Appendix.xml
index c968e52..360ed48 100644
--- a/en-US/Books/Linux/Advanced/Manual-Appendix.xml
+++ b/en-US/Books/Linux/Advanced/Manual-Appendix.xml
@@ -7,6 +7,7 @@
<appendix id="LinuxAdvancedManual-AppendixA">
<title>Linux Advanced Manual AppendixA</title>
<para>
+ paragraph
</para>
</appendix>
<xi:include href="Revision_History.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
diff --git a/en-US/Books/Linux/Advanced/Manual-Preface.xml b/en-US/Books/Linux/Advanced/Manual-Preface.xml
index ed4e789..ec266f2 100644
--- a/en-US/Books/Linux/Advanced/Manual-Preface.xml
+++ b/en-US/Books/Linux/Advanced/Manual-Preface.xml
@@ -5,6 +5,7 @@
<preface id="LinuxAdvancedManual-Preface">
<title>Preface</title>
<para>
+ paragraph
</para>
<xi:include href="../../../Common_Content/Conventions.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="../../../Common_Content/Feedback.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
diff --git a/en-US/Books/Linux/Basic/Course-Appendix.xml b/en-US/Books/Linux/Basic/Course-Appendix.xml
index 29f8331..f7c62ec 100644
--- a/en-US/Books/Linux/Basic/Course-Appendix.xml
+++ b/en-US/Books/Linux/Basic/Course-Appendix.xml
@@ -7,6 +7,7 @@
<appendix id="LinuxBasicCourse-AppendixA">
<title>Linux Basic Course AppendixA</title>
<para>
+ paragraph
</para>
</appendix>
<xi:include href="Revision_History.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
diff --git a/en-US/Books/Linux/Basic/Course-Preface.xml b/en-US/Books/Linux/Basic/Course-Preface.xml
index 131747d..9c6f550 100644
--- a/en-US/Books/Linux/Basic/Course-Preface.xml
+++ b/en-US/Books/Linux/Basic/Course-Preface.xml
@@ -5,6 +5,7 @@
<preface id="LinuxBasicCourse-Preface">
<title>Preface</title>
<para>
+ paragraph
</para>
<xi:include href="../../../Common_Content/Conventions.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="../../../Common_Content/Feedback.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
diff --git a/en-US/Books/Linux/Basic/Course.xml b/en-US/Books/Linux/Basic/Course.xml
index 1030bff..a0f5165 100644
--- a/en-US/Books/Linux/Basic/Course.xml
+++ b/en-US/Books/Linux/Basic/Course.xml
@@ -24,21 +24,21 @@
<section id="LinuxBasicCourse-Introduction_to_Linux-Choosing_a_Distribution">
<title>Choosing a Distribution</title>
<para>
-
+ paragraph
</para>
</section>
<section id="LinuxBasicCourse-Introduction_to_Linux-Getting_Linux">
<title>Getting Linux</title>
<para>
- some para
+ paragraph
</para>
</section>
<section id="LinuxBasicCourse-Introduction_to_Linux-Prejudices_Against_Linux">
<title>Prejudices Against Linux</title>
<para>
- some para
+ paragraph
</para>
</section>
@@ -47,6 +47,7 @@
<chapter id="LinuxBasicCourse-Installing_Updating_and_Removing_Software">
<title>Installing, Updating and Removing Software</title>
<para>
+ paragraph
</para>
<section id="LinuxBasicCourse-Installing_Updating_and_Removing_Software-Finding_Software">
diff --git a/en-US/Books/Linux/Basic/Manual-Appendix.xml b/en-US/Books/Linux/Basic/Manual-Appendix.xml
index 512bede..fac2330 100644
--- a/en-US/Books/Linux/Basic/Manual-Appendix.xml
+++ b/en-US/Books/Linux/Basic/Manual-Appendix.xml
@@ -7,6 +7,7 @@
<appendix id="LinuxBasicManual-AppendixA">
<title>Linux Basic Manual AppendixA</title>
<para>
+ paragraph
</para>
</appendix>
<xi:include href="Revision_History.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
diff --git a/en-US/Books/Linux/Basic/Manual-Preface.xml b/en-US/Books/Linux/Basic/Manual-Preface.xml
index 0a882a3..6cf872e 100644
--- a/en-US/Books/Linux/Basic/Manual-Preface.xml
+++ b/en-US/Books/Linux/Basic/Manual-Preface.xml
@@ -5,6 +5,7 @@
<preface id="LinuxBasicManual-Preface">
<title>Preface</title>
<para>
+ paragraph
</para>
<xi:include href="../../../Common_Content/Conventions.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="../../../Common_Content/Feedback.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
diff --git a/en-US/Books/Linux/ConfigurationManagement/Course-Appendix.xml b/en-US/Books/Linux/ConfigurationManagement/Course-Appendix.xml
index e81cc45..d9c83e4 100644
--- a/en-US/Books/Linux/ConfigurationManagement/Course-Appendix.xml
+++ b/en-US/Books/Linux/ConfigurationManagement/Course-Appendix.xml
@@ -7,6 +7,7 @@
<appendix id="LinuxConfigurationManagementCourse-AppendixA">
<title>Linux Configuration Management Course AppendixA</title>
<para>
+ paragraph
</para>
</appendix>
<xi:include href="Revision_History.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
diff --git a/en-US/Books/Linux/ConfigurationManagement/Course-Preface.xml b/en-US/Books/Linux/ConfigurationManagement/Course-Preface.xml
index 517ad25..58f44f6 100644
--- a/en-US/Books/Linux/ConfigurationManagement/Course-Preface.xml
+++ b/en-US/Books/Linux/ConfigurationManagement/Course-Preface.xml
@@ -5,6 +5,7 @@
<preface id="LinuxConfigurationManagementCourse-Preface">
<title>Preface</title>
<para>
+ paragraph
</para>
<xi:include href="../../../Common_Content/Conventions.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="../../../Common_Content/Feedback.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
diff --git a/en-US/Books/Linux/ConfigurationManagement/Manual-Appendix.xml b/en-US/Books/Linux/ConfigurationManagement/Manual-Appendix.xml
index fdd6831..2051a51 100644
--- a/en-US/Books/Linux/ConfigurationManagement/Manual-Appendix.xml
+++ b/en-US/Books/Linux/ConfigurationManagement/Manual-Appendix.xml
@@ -7,6 +7,7 @@
<appendix id="ManualTemplate-AppendixA">
<title>Manual Template AppendixA</title>
<para>
+ paragraph
</para>
</appendix>
<xi:include href="Revision_History.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
diff --git a/en-US/Books/Linux/ConfigurationManagement/Manual-Preface.xml b/en-US/Books/Linux/ConfigurationManagement/Manual-Preface.xml
index 927e8b9..5032da5 100644
--- a/en-US/Books/Linux/ConfigurationManagement/Manual-Preface.xml
+++ b/en-US/Books/Linux/ConfigurationManagement/Manual-Preface.xml
@@ -5,6 +5,7 @@
<preface id="ManualTemplate-Preface">
<title>Preface</title>
<para>
+ paragraph
</para>
<xi:include href="../../../Common_Content/Conventions.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="../../../Common_Content/Feedback.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
diff --git a/en-US/Books/Linux/RHCETraining/Course-Appendix.xml b/en-US/Books/Linux/RHCETraining/Course-Appendix.xml
index a687d4a..522364e 100644
--- a/en-US/Books/Linux/RHCETraining/Course-Appendix.xml
+++ b/en-US/Books/Linux/RHCETraining/Course-Appendix.xml
@@ -7,6 +7,7 @@
<appendix id="RHCETrainingCourse-AppendixA">
<title>RHCE Training Course AppendixA</title>
<para>
+ paragraph
</para>
</appendix>
<xi:include href="Revision_History.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
diff --git a/en-US/Books/Linux/RHCETraining/Course-Preface.xml b/en-US/Books/Linux/RHCETraining/Course-Preface.xml
index 60125a1..0008a64 100644
--- a/en-US/Books/Linux/RHCETraining/Course-Preface.xml
+++ b/en-US/Books/Linux/RHCETraining/Course-Preface.xml
@@ -5,6 +5,7 @@
<preface id="RHCETrainingCourse-Preface">
<title>Preface</title>
<para>
+ paragraph
</para>
<xi:include href="../../../Common_Content/Conventions.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="../../../Common_Content/Feedback.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
diff --git a/en-US/Books/Linux/RHCETraining/Course.xml b/en-US/Books/Linux/RHCETraining/Course.xml
index d7e2f08..82ee1de 100644
--- a/en-US/Books/Linux/RHCETraining/Course.xml
+++ b/en-US/Books/Linux/RHCETraining/Course.xml
@@ -30,6 +30,7 @@
<section id="SELinux">
<title>SELinux</title>
<para>
+ paragraph
</para>
</section>
diff --git a/en-US/Books/Linux/RHCETraining/Manual-Appendix.xml b/en-US/Books/Linux/RHCETraining/Manual-Appendix.xml
index c0fbba2..218afaa 100644
--- a/en-US/Books/Linux/RHCETraining/Manual-Appendix.xml
+++ b/en-US/Books/Linux/RHCETraining/Manual-Appendix.xml
@@ -7,6 +7,7 @@
<appendix id="RHCETrainingManual-AppendixA">
<title>RHCE Training Manual AppendixA</title>
<para>
+ paragraph
</para>
</appendix>
<xi:include href="Revision_History.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
diff --git a/en-US/Books/Linux/RHCETraining/Manual-Preface.xml b/en-US/Books/Linux/RHCETraining/Manual-Preface.xml
index a89c306..6fe80bf 100644
--- a/en-US/Books/Linux/RHCETraining/Manual-Preface.xml
+++ b/en-US/Books/Linux/RHCETraining/Manual-Preface.xml
@@ -5,6 +5,7 @@
<preface id="RHCETrainingManual-Preface">
<title>Preface</title>
<para>
+ paragraph
</para>
<xi:include href="../../../Common_Content/Conventions.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="../../../Common_Content/Feedback.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
diff --git a/en-US/Books/Linux/Senior/Course-Appendix.xml b/en-US/Books/Linux/Senior/Course-Appendix.xml
index 36be332..a60cb29 100644
--- a/en-US/Books/Linux/Senior/Course-Appendix.xml
+++ b/en-US/Books/Linux/Senior/Course-Appendix.xml
@@ -117,6 +117,7 @@
<formalpara id="LinuxSeniorCourse-LPI101Questionnaire-Rationale-2">
<title>Question 2 - Rationale</title>
<para>
+ paragraph
</para>
</formalpara>
@@ -133,30 +134,35 @@
<formalpara id="LinuxSeniorCourse-LPI101Questionnaire-Rationale-4">
<title>Question 4 - Rationale</title>
<para>
+ paragraph
</para>
</formalpara>
<formalpara id="LinuxSeniorCourse-LPI101Questionnaire-Rationale-5">
<title>Question 5 - Rationale</title>
<para>
+ paragraph
</para>
</formalpara>
<formalpara id="LinuxSeniorCourse-LPI101Questionnaire-Rationale-6">
<title>Question 6 - Rationale</title>
<para>
+ paragraph
</para>
</formalpara>
<formalpara id="LinuxSeniorCourse-LPI101Questionnaire-Rationale-7">
<title>Question 7 - Rationale</title>
<para>
+ paragraph
</para>
</formalpara>
<formalpara id="LinuxSeniorCourse-LPI101Questionnaire-Rationale-8">
<title>Question 8 - Rationale</title>
<para>
+ paragraph
</para>
</formalpara>
diff --git a/en-US/Books/Linux/Senior/Course-Preface.xml b/en-US/Books/Linux/Senior/Course-Preface.xml
index 683723d..57db973 100644
--- a/en-US/Books/Linux/Senior/Course-Preface.xml
+++ b/en-US/Books/Linux/Senior/Course-Preface.xml
@@ -5,6 +5,7 @@
<preface id="LinuxSeniorCourse-Preface">
<title>Preface</title>
<para>
+ paragraph
</para>
<xi:include href="../../../Common_Content/Conventions.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="../../../Common_Content/Feedback.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
diff --git a/en-US/Books/Linux/Senior/Course.xml b/en-US/Books/Linux/Senior/Course.xml
index 1a60dc7..e952362 100644
--- a/en-US/Books/Linux/Senior/Course.xml
+++ b/en-US/Books/Linux/Senior/Course.xml
@@ -17,7 +17,7 @@
<section id="LinuxSeniorCourse-TargetAudience">
<title>Target Audience</title>
<para>
-
+ paragraph
</para>
</section>
@@ -573,6 +573,7 @@ ERR: 0
Describe sndconfig and isapnp for legacy purposes, and describe the newer available utilities as well
//-->
+ paragraph
</para>
</section>
@@ -721,6 +722,7 @@ ERR: 0
Describe the use Logical Unit Numbers
//-->
+ paragraph
</para>
</section>
@@ -778,6 +780,7 @@ ERR: 0
<formalpara>
<title>S-ATA Operation Mode</title>
<para>
+ paragraph
</para>
</formalpara>
</section>
@@ -919,18 +922,21 @@ Working Devices : 4
<section id="LinuxSeniorCourse-HardwareAndArchitecture-SetUpDifferentPCExpansionCards">
<title>Set Up Different PC Expansion Cards</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-HardwareAndArchitecture-ConfigureCommunicationDevices">
<title>Configure Communication Devices</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-HardwareAndArchitecture-ConfigureUSBDevices">
<title>Configure USB Devices</title>
<para>
+ paragraph
</para>
</section>
@@ -1074,7 +1080,10 @@ Working Devices : 4
<section id="LinuxSeniorCourse-LinuxInstallationAndPackageManagement-DesignHardDiskLayout-WhereDoFilesGo">
<title>Where Do Files Go?</title>
<para>
- When designing a hard disk layout, it is important you know where files are supposed to go on a given system. Conforming the hierarchy of directory trees on the system to the <link linkend="LinuxSeniorCourse-DevicesLinuxFilesystemsAndTheFHS-FindSystemFilesAndPlaceFilesInTheCorrectLocation">File Hierarchy Standard (FHS)</link> is not only recommended, it is also required for systems running <link linkend="SELinux">SELinux</link>.
+ When designing a hard disk layout, it is important you know where files are supposed to go on a given system. Conforming the hierarchy of directory trees on the system to the <emphasis>File Hierarchy Standard (FHS)</emphasis> is not only recommended, it is also required for systems running <emphasis>SELinux</emphasis>.
+ </para>
+ <para>
+ <emphasis>See also</emphasis>: <xref linkend="LinuxSeniorCourse-DevicesLinuxFilesystemsAndTheFHS-FindSystemFilesAndPlaceFilesInTheCorrectLocation" />, <xref linkend="SELinux" />
</para>
<para>
An overview of requirements and recommendations to various directories and the partitions they are on:
@@ -1104,30 +1113,35 @@ Working Devices : 4
<section id="LinuxSeniorCourse-LinuxInstallationAndPackageManagement-InstallABootManager">
<title>Install A Boot Manager</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-LinuxInstallationAndPackageManagement-MakeAndInstallProgramsFromSource">
<title>Make and Install Programs From Source</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-LinuxInstallationAndPackageManagement-ManageSharedLibraries">
<title>Manage Shared Libraries</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-LinuxInstallationAndPackageManagement-UseDebianPackageManagement">
<title>Use Debian Package Management</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-LinuxInstallationAndPackageManagement-UseRedHatPackageManagement">
<title>Use Red Hat Package Management</title>
<para>
+ paragraph
</para>
</section>
@@ -1138,54 +1152,63 @@ Working Devices : 4
<section id="LinuxSeniorCourse-GNUAndUnixCommands-DetailedExamObjectives">
<title>Detailed Exam Objectives</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-GNUAndUnixCommands-WorkOnTheCommandLine">
<title>Work On The Command Line</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-GNUAndUnixCommands-ProcessTextStreamsUsingFilters">
<title>Process Text Streams Using Filters</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-GNUAndUnixCommands-PerformBasicFileManagement">
<title>Perform Basic File Management</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-GNUAndUnixCommands-UsingStreamsPipesAndRedirects">
<title>Using Streams Pipes and Redirects</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-GNUAndUnixCommands-CreateMonitorAndKillProcesses">
<title>Create Monitor and Kill Processes</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-GNUAndUnixCommands-ModifyProcessExecutionPriorities">
<title>Modify Process Execution Priorities</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-GNUAndUnixCommands-SearchTextFilesUsingRegularExpressions">
<title>Search Text Files Using Regular Expressions</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-GNUAndUnixCommands-PerformBasicFileEditingOperationsUsingVi">
<title>Perform Basic File Editing Operations Using Vi</title>
<para>
+ paragraph
</para>
</section>
@@ -1196,54 +1219,63 @@ Working Devices : 4
<section id="LinuxSeniorCourse-DevicesLinuxFilesystemsAndTheFHS-DetailedExamObjectives">
<title>Detailed Exam Objectives</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-DevicesLinuxFilesystemsAndTheFHS-CreatePartitionsAndFilesystems">
<title>Create Partitions and Filesystems</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-DevicesLinuxFilesystemsAndTheFHS-MaintainTheIntegrityOfFilesystems">
<title>Maintain The Integrity Of Filesystems</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-DevicesLinuxFilesystemsAndTheFHS-ControlMountingAndUnmountingFilesystems">
<title>Control Mounting and Unmounting Filesystems</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-DevicesLinuxFilesystemsAndTheFHS-ManagingDiskQuota">
<title>Managing Disk Quota</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-DevicesLinuxFilesystemsAndTheFHS-UseFilePermissionsToControlAccessToFiles">
<title>Use File Permissions To Control Access To Files</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-DevicesLinuxFilesystemsAndTheFHS-ManageFileOwnership">
<title>Manage File Ownership</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-DevicesLinuxFilesystemsAndTheFHS-CreateAndChangeHardAndSymbolicLinks">
<title>Create and Change Hard and Symbolic Links</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-DevicesLinuxFilesystemsAndTheFHS-FindSystemFilesAndPlaceFilesInTheCorrectLocation">
<title>Find System Files and Place Files In The Correct Location</title>
<para>
+ paragraph
</para>
</section>
@@ -1254,24 +1286,28 @@ Working Devices : 4
<section id="LinuxSeniorCourse-TheXWindowSystem-DetailedExamObjectives">
<title>Detailed Exam Objectives</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-TheXWindowSystem-InstallAndConfigureX11">
<title>Install And Configure X11</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-TheXWindowSystem-SetUpADisplayManager">
<title>Set Up A Display Manager</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-TheXWindowSystem-InstallAndCustomizeAWindowManagerEnvironment">
<title>Install and Customize A Window Manager Environment</title>
<para>
+ paragraph
</para>
</section>
@@ -1716,18 +1752,21 @@ Working Devices : 4
<section id="LinuxSeniorCourse-Kernel-DetailedExamObjectives">
<title>Detailed Exam Objectives</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-Kernel-ManageQueryKernelAndKernelModulesAtRuntime">
<title>Manage Query Kernel and Kernel Modules At Runtime</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-Kernel-ReconfigureBuildAndInstallACustomKernelAndKernelModules">
<title>Reconfigure, Build and Install A Custom Kernel And Kernel Modules</title>
<para>
+ paragraph
</para>
</section>
@@ -1738,18 +1777,21 @@ Working Devices : 4
<section id="LinuxSeniorCourse-BootInitializationShutdownAndRunlevels-DetailedExamObjectives">
<title>Detailed Exam Objectives</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-BootInitializationShutdownAndRunlevels-BootTheSystem">
<title>Boot The System</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-BootInitializationShutdownAndRunlevels-ChangeRunlevelsAndShutDownOrRebootSystem">
<title>Change Runlevels and Shut Down Or Reboot System</title>
<para>
+ paragraph
</para>
</section>
@@ -1760,24 +1802,28 @@ Working Devices : 4
<section id="LinuxSeniorCourse-Printing-DetailedExamObjectives">
<title>Detailed Exam Objectives</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-Printing-ManagePrintersAndPrintQueues">
<title>Manage Printers and Print Queues</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-Printing-PrintFiles">
<title>Print Files</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-Printing-InstallAndConfigureLocalAndRemotePrinters">
<title>Install and Configure Local and Remote Printers</title>
<para>
+ paragraph
</para>
</section>
@@ -1788,24 +1834,28 @@ Working Devices : 4
<section id="LinuxSeniorCourse-Documentation-DetailedExamObjectives">
<title>Detailed Exam Objectives</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-Documentation-UseAndManageLocalSystemDocumentation">
<title>Use and Manage Local System Documentation</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-Documentation-FindLinuxDocumentationOnTheInternet">
<title>Find Linux Documentation On The Internet</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-Documentation-NotifyUsersOnSystemRelatedIssues">
<title>Notify Users On System Related Issues</title>
<para>
+ paragraph
</para>
</section>
@@ -1816,18 +1866,21 @@ Working Devices : 4
<section id="LinuxSeniorCourse-ShellsScriptingProgrammingAndCompiling-DetailedExamObjectives">
<title>Detailed Exam Objectives</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-ShellsScriptingProgrammingAndCompiling-CustomizeAndUseTheShellEnvironment">
<title>Customize and Use The Shell Environment</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-ShellsScriptingProgrammingAndCompiling-CustomizeOrWriteSimpleScripts">
<title>Customize Or Write Simple Scripts</title>
<para>
+ paragraph
</para>
</section>
@@ -1838,42 +1891,49 @@ Working Devices : 4
<section id="LinuxSeniorCourse-AdministrativeTasks-DetailedExamObjectives">
<title>Detailed Exam Objectives</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-AdministrativeTasks-ManageUsersAndGroupAccountsAndRelatedSystemFiles">
<title>Manage Users and Group Accounts and Related System Files</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-AdministrativeTasks-TuneTheUserEnvironmentAndSystemEnvironmentVariables">
<title>Tune The User Environment and System Environment Variables</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-AdministrativeTasks-ConfigureAndUseSystemLogFilesToMeetAdministrativeAndSecurityNeeds">
<title>Configure and Use System Log Files To Meet Administrative and Security Needs</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-AdministrativeTasks-AutomateSystemAdministrationTasksBySchedulingJobsToRunInTheFuture">
<title>Automate System Administration Tasks By Scheduling Jobs To Run In The Future</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-AdministrativeTasks-MaintainAnEffectiveDataBackupStrategy">
<title>Maintain An Effective Data Backup Strategy</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-AdministrativeTasks-MaintainSystemTime">
<title>Maintain System Time</title>
<para>
+ paragraph
</para>
</section>
@@ -1884,24 +1944,28 @@ Working Devices : 4
<section id="LinuxSeniorCourse-NetworkingFundamentals-DetailedExamObjectives">
<title>Detailed Exam Objectives</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-NetworkingFundamentals-FundamentalsOfTCPIP">
<title>Fundamentals Of TCP/IP</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-NetworkingFundamentals-TCPIPConfigurationAndTroubleshooting">
<title>TCP/IP Configuration and Troubleshooting</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-NetworkingFundamentals-ConfigureLinuxAsAPPPClient">
<title>Configure Linux As A PPP Client</title>
<para>
+ paragraph
</para>
</section>
@@ -1912,42 +1976,49 @@ Working Devices : 4
<section id="LinuxSeniorCourse-NetworkingServices-DetailedExamObjectives">
<title>Detailed Exam Objectives</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-NetworkingServices-ConfigureAndManageInetdXinetdAndRelatedServices">
<title>Configure and Manage <code>Inetd</code>, <code>xinetd</code>, and Related Services</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-NetworkingServices-OperateAndPerformBasicConfigurationOfMailTransferAgent">
<title>Operate and Perform Basic Configuration Of Mail Transfer Agent</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-NetworkingServices-OperateAndPerformBasicConfigurationOfApache">
<title>Operate and Perform Basic Configuration Of Apache</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-NetworkingServices-ProperlyManageTheNFSAndSambaDaemons">
<title>Properly Manage The NFS and Samba Daemons</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-NetworkingServices-SetUpAndConfigureBasicDNSServices">
<title>Set Up and Configure Basic DNS Services</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-NetworkingServices-SetUpSecureShellOpenSSH">
<title>Set Up Secure Shell (OpenSSH)</title>
<para>
+ paragraph
</para>
</section>
@@ -1958,24 +2029,28 @@ Working Devices : 4
<section id="LinuxSeniorCourse-Security-DetailedExamObjectives">
<title>Detailed Exam Objectives</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-Security-PerformSecurityAdministrationTasks">
<title>Perform Security Administration Tasks</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-Security-SetUpHostSecurity">
<title>Set Up Host Security</title>
<para>
+ paragraph
</para>
</section>
<section id="LinuxSeniorCourse-Security-SetUpUserLevelSecurity">
<title>Set Up User Level Security</title>
<para>
+ paragraph
</para>
</section>
diff --git a/en-US/Books/Linux/Senior/Manual-Preface.xml b/en-US/Books/Linux/Senior/Manual-Preface.xml
index d1c00e3..83bd9d6 100644
--- a/en-US/Books/Linux/Senior/Manual-Preface.xml
+++ b/en-US/Books/Linux/Senior/Manual-Preface.xml
@@ -5,6 +5,7 @@
<preface id="SeniorAdvancedManualTemplate-Preface">
<title>Preface</title>
<para>
+ paragraph
</para>
<xi:include href="../../../Common_Content/Conventions.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="../../../Common_Content/Feedback.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
diff --git a/en-US/Books/Linux/Senior/Manual.xml b/en-US/Books/Linux/Senior/Manual.xml
index 9efb08b..637d1c9 100644
--- a/en-US/Books/Linux/Senior/Manual.xml
+++ b/en-US/Books/Linux/Senior/Manual.xml
@@ -20,7 +20,7 @@
<xref linkend="LinuxSeniorManual-Appendix-ExampleCourseSchedule" /> is an example course schedule getting students through the entire course (up to LPIC-2) in 12 weeks, excluding the kickoff meeting. For each exam, of which there are 4, students have one day and one evening, during which the teacher can layout some more details on a certain topic, is available for questions and can request the students exercise their new skills, then take the exam.
</para>
<para>
- This example course schedule has some of the details pre-entered for you. You can adjust this to reflect your course schedule, and hand it out to your students during the kickoff meeting, along with the <link linkend="LinuxSeniorCourse">Course material</link> for this course.
+ This example course schedule has some of the details pre-entered for you. You can adjust this to reflect your course schedule, and hand it out to your students during the kickoff meeting, along with the <xref linkend="LinuxSeniorCourse" /> for this course.
</para>
</section>
diff --git a/en-US/Books/PuppetWorkshop/Author_Group.xml b/en-US/Books/PuppetWorkshop/Author_Group.xml
new file mode 100644
index 0000000..c9ba622
--- /dev/null
+++ b/en-US/Books/PuppetWorkshop/Author_Group.xml
@@ -0,0 +1,24 @@
+<?xml version='1.0'?>
+<!DOCTYPE authorgroup PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+]>
+
+<authorgroup>
+ <author>
+ <firstname>Jeroen</firstname>
+ <surname>van Meeuwen</surname>
+ <affiliation>
+ <orgname>Operator Groep Delft</orgname>
+ <orgdiv>Sr. System Engineer</orgdiv>
+ </affiliation>
+ <email>j.van.meeuwen(a)ogd.nl</email>
+ </author>
+ <author>
+ <firstname>Stefan</firstname>
+ <surname>Hartsuiker</surname>
+ <affiliation>
+ <orgname>Operator Groep Delft</orgname>
+ <orgdiv>System Engineer</orgdiv>
+ </affiliation>
+ <email>s.hartsuiker(a)ogd.nl</email>
+ </author>
+</authorgroup>
diff --git a/en-US/Books/PuppetWorkshop/Course-Appendix.xml b/en-US/Books/PuppetWorkshop/Course-Appendix.xml
new file mode 100644
index 0000000..5b02ee8
--- /dev/null
+++ b/en-US/Books/PuppetWorkshop/Course-Appendix.xml
@@ -0,0 +1,14 @@
+<?xml version='1.0'?>
+<!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+]>
+
+<part id="PuppetWorkshop-Appendices">
+ <title>Appendices</title>
+ <appendix id="PuppetWorkshop-AppendixA">
+ <title>Puppet Workshop AppendixA</title>
+ <para>
+ paragraph
+ </para>
+ </appendix>
+ <xi:include href="Revision_History.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+</part>
diff --git a/en-US/Books/PuppetWorkshop/Course-Book_Info.xml b/en-US/Books/PuppetWorkshop/Course-Book_Info.xml
new file mode 100644
index 0000000..1fc5c97
--- /dev/null
+++ b/en-US/Books/PuppetWorkshop/Course-Book_Info.xml
@@ -0,0 +1,27 @@
+<?xml version='1.0'?>
+<!DOCTYPE bookinfo PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+]>
+
+<bookinfo id="PuppetWorkshop-Product_Name_and_Version">
+ <title>Puppet Workshop</title>
+ <subtitle>Puppet Workshop</subtitle>
+ <issuenum>0.1</issuenum>
+ <productnumber>1</productnumber>
+ <abstract><para>This is a Configuration Management workshop (based on Puppet)</para></abstract>
+ <corpauthor>
+ <inlinemediaobject>
+ <imageobject>
+ <imagedata format='SVG' fileref="../Common_Content/images/title_logo.svg" />
+ </imageobject>
+ </inlinemediaobject>
+ </corpauthor>
+ <copyright>
+ <year>&YEAR;</year>
+ <holder>&HOLDER;</holder>
+ </copyright>
+ <xi:include href="../../Common_Content/Legal_Notice.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="Author_Group.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+</bookinfo>
+
+
+
diff --git a/en-US/Books/PuppetWorkshop/Course-Preface.xml b/en-US/Books/PuppetWorkshop/Course-Preface.xml
new file mode 100644
index 0000000..d021421
--- /dev/null
+++ b/en-US/Books/PuppetWorkshop/Course-Preface.xml
@@ -0,0 +1,12 @@
+<?xml version='1.0'?>
+<!DOCTYPE preface PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+]>
+
+<preface id="PuppetWorkshop-Preface">
+ <title>Preface</title>
+ <para>
+ paragraph
+ </para>
+ <xi:include href="../../Common_Content/Conventions.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="../../Common_Content/Feedback.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+</preface>
diff --git a/en-US/Books/PuppetWorkshop/Course.xml b/en-US/Books/PuppetWorkshop/Course.xml
new file mode 100644
index 0000000..794ad47
--- /dev/null
+++ b/en-US/Books/PuppetWorkshop/Course.xml
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.docbook.org/xml/4.4/docbookx.dtd">
+
+<book id="PuppetWorkshop">
+
+ <xi:include href="Course-Book_Info.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="Course-Preface.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <part id="PuppetWorkshop-Part">
+ <title>Puppet Workshop</title>
+ <chapter id="PuppetWorkshop-Introduction">
+ <title>Introduction</title>
+ <para>
+ Welcome to the Puppet Workshop (or Configuration Management workshop).
+ </para>
+ </chapter>
+ <chapter id="PuppetWorkshop-ConfigurationManagement">
+ <title>Configuration Management</title>
+
+ <section id="PuppetWorkshop-ConfigurationManagement-WhatIsConfigurationManagement">
+ <title>What is Configuration Management?</title>
+ <para>
+ With configuration management, generally speaking, it's about managing the configuration of an organizational resource in order to have it be in a state in which it can perform the operations required by, and possibly critical to, the organization.
+ </para>
+ <para>
+ In this workshop though, we are not going to explore configuration management of a coffee machine. Instead we look at the computers in a network running any platform but the one from a prominent proprietary North America-based vendor. We are talking automation and further enhancement of Computer Systems Administration.
+ </para>
+ <para>
+ When managing the operating system and software running on mainframes, servers, desktop PCs and laptops
+ </para>
+ </section>
+
+ <section id="PuppetWorkshop-ConfigurationManagement-ProblemsWithConfigurationManagement">
+ <title>Problems with Configuration Management?</title>
+ <para>
+ This is a first section
+ </para>
+
+ </section>
+
+ </chapter>
+
+ <chapter id="PuppetWorkshop-Puppet">
+ <title>Puppet</title>
+
+ <section id="PuppetWorkshop-Puppet-WhatDoesPuppetDo">
+ <title>What Does Puppet Do?</title>
+ <para>
+ This is a first section
+ </para>
+ </section>
+
+
+ <section id="PuppetWorkshop-Puppet-HowDoesItWork">
+ <title>How Does It Work?</title>
+ <para>
+ This is a first section
+ </para>
+
+ </section>
+
+ <section id="PuppetWorkshop-Puppet-Troubleshooting">
+ <title>And What If It Doesn't?</title>
+ <para>
+ This is a first section
+ </para>
+ </section>
+
+ <section id="PuppetWorkshop-Puppet-HowToSetItUp">
+ <title>How To Set It Up (right)?</title>
+ <para>
+ This is a first section
+ </para>
+
+ </section>
+
+ <section id="PuppetWorkshop-Puppet-HowToUseIt">
+ <title>How To Use It?</title>
+ <para>
+ This is a first section
+ </para>
+
+ </section>
+
+ <section id="PuppetWorkshop-Puppet-WhatElseCanItDo">
+ <title>What Else Can It Do?</title>
+ <para>
+ This is a first section
+ </para>
+
+ </section>
+
+ <section id="PuppetWorkshop-Puppet-BestPractices">
+ <title>Best Practices</title>
+ <para>
+ This is a first section
+ </para>
+
+ </section>
+
+ </chapter>
+ </part>
+
+ <xi:include href="Course-Appendix.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+</book>
+
+<!-- Local variables:
+ mode: xml
+ fill-column: 72
+ End:
+-->
+
+<!--
+ vim: softtabstop=4:shiftwidth=4:expandtab:textwidth=72
+-->
diff --git a/en-US/Books/PuppetWorkshop/Revision_History.xml b/en-US/Books/PuppetWorkshop/Revision_History.xml
new file mode 100644
index 0000000..fda893e
--- /dev/null
+++ b/en-US/Books/PuppetWorkshop/Revision_History.xml
@@ -0,0 +1,26 @@
+<?xml version='1.0'?>
+<!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+]>
+
+<appendix>
+ <title>Revision History</title>
+ <para>
+ <revhistory>
+ <revision>
+ <revnumber>1.0</revnumber>
+ <date></date>
+ <author>
+ <firstname></firstname>
+ <surname></surname>
+ <email></email>
+ </author>
+ <revdescription>
+ <simplelist>
+ <member></member>
+ </simplelist>
+ </revdescription>
+ </revision>
+ </revhistory>
+ </para>
+</appendix>
+
diff --git a/en-US/Books/Template/Course-Preface.xml b/en-US/Books/Template/Course-Preface.xml
index 950e53f..1db3c7c 100644
--- a/en-US/Books/Template/Course-Preface.xml
+++ b/en-US/Books/Template/Course-Preface.xml
@@ -5,6 +5,7 @@
<preface id="CourseTemplate-Preface">
<title>Preface</title>
<para>
+ paragraph
</para>
<xi:include href="../../../Common_Content/Conventions.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="../../../Common_Content/Feedback.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
diff --git a/en-US/Books/Template/Manual-Preface.xml b/en-US/Books/Template/Manual-Preface.xml
index 927e8b9..5032da5 100644
--- a/en-US/Books/Template/Manual-Preface.xml
+++ b/en-US/Books/Template/Manual-Preface.xml
@@ -5,6 +5,7 @@
<preface id="ManualTemplate-Preface">
<title>Preface</title>
<para>
+ paragraph
</para>
<xi:include href="../../../Common_Content/Conventions.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="../../../Common_Content/Feedback.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
diff --git a/en-US/Common_Content/Conventions.xml b/en-US/Common_Content/Conventions.xml
index 886a6e1..56efa65 100644
--- a/en-US/Common_Content/Conventions.xml
+++ b/en-US/Common_Content/Conventions.xml
@@ -1,9 +1,5 @@
<?xml version='1.0'?>
<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
-<!ENTITY % RH_ENTITIES SYSTEM "../Common_Content/Entities.ent">
-%RH_ENTITIES;
-<!ENTITY % RH_TRANS_ENTITIES SYSTEM "../Common_Content/Translatable-Entities.ent">
-%RH_TRANS_ENTITIES;
]>
<section>
diff --git a/en-US/Common_Content/Feedback.xml b/en-US/Common_Content/Feedback.xml
index dadbeae..34b6b81 100644
--- a/en-US/Common_Content/Feedback.xml
+++ b/en-US/Common_Content/Feedback.xml
@@ -1,9 +1,5 @@
<?xml version='1.0'?>
<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
-<!ENTITY % RH_ENTITIES SYSTEM "../Common_Content/Entities.ent">
-%RH_ENTITIES;
-<!ENTITY % RH_TRANS_ENTITIES SYSTEM "../Common_Content/Translatable-Entities.ent">
-%RH_TRANS_ENTITIES;
]>
<section>
diff --git a/en-US/Common_Content/Legal_Notice.xml b/en-US/Common_Content/Legal_Notice.xml
new file mode 100644
index 0000000..8f7688b
--- /dev/null
+++ b/en-US/Common_Content/Legal_Notice.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<!DOCTYPE legalnotice PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+]>
+<legalnotice>
+ <para>
+ Copyright <trademark class="copyright"></trademark> &YEAR; &HOLDER;. This material may only be distributed subject to the terms and conditions set forth in the Open Publication License, V1.0, (the latest version is presently available at <ulink url="http://www.opencontent.org/openpub/">http://www.opencontent.org/openpub/</ulink>).
+ </para>
+ <para>
+ Fedora and the Fedora Infinity Design logo are trademarks or registered trademarks of Red Hat, Inc., in the U.S. and other countries.
+ </para>
+ <para>
+ All other trademarks and copyrights referred to are the property of their respective owners.
+ </para>
+ <para>
+ Documentation, as with software itself, may be subject to export control. Read about Fedora Project export controls at <ulink url="http://fedoraproject.org/wiki/Legal/Export"/>.
+ </para>
+</legalnotice>
diff --git a/en-US/Courses.xml b/en-US/Courses.xml
index d5dd19e..4c5be66 100644
--- a/en-US/Courses.xml
+++ b/en-US/Courses.xml
@@ -95,6 +95,18 @@
//-->
+<!--
+ FIXME
+ <listitem>
+ <para>
+ <xref linkend="PuppetWorkshop" />
+ </para>
+ <para>
+ A workshop on implementing puppet for configuration management, including best practices.
+ </para>
+ </listitem>
+//-->
+
</itemizedlist>
</para>
</formalpara>
@@ -198,4 +210,9 @@
<xi:include href="Books/Linux/RHCETraining/Manual.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
</set>
+ <set>
+ <title>Puppet Workshop</title>
+ <xi:include href="Books/PuppetWorkshop/Course.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ </set>
+
</set>
diff --git a/en-US/Template/Course-Appendix.xml b/en-US/Template/Course-Appendix.xml
index ae29677..d195e30 100644
--- a/en-US/Template/Course-Appendix.xml
+++ b/en-US/Template/Course-Appendix.xml
@@ -7,6 +7,7 @@
<appendix id="CourseTemplate-AppendixA">
<title>Course Template AppendixA</title>
<para>
+ paragraph
</para>
</appendix>
<xi:include href="Revision_History.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
diff --git a/en-US/Template/Course-Preface.xml b/en-US/Template/Course-Preface.xml
index 7278085..9518e23 100644
--- a/en-US/Template/Course-Preface.xml
+++ b/en-US/Template/Course-Preface.xml
@@ -5,6 +5,7 @@
<preface id="LinuxAdvancedCourse-Preface">
<title>Preface</title>
<para>
+ paragraph
</para>
<xi:include href="../../../Common_Content/Conventions.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="../../../Common_Content/Feedback.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
diff --git a/en-US/Template/Manual-Appendix.xml b/en-US/Template/Manual-Appendix.xml
index fdd6831..2051a51 100644
--- a/en-US/Template/Manual-Appendix.xml
+++ b/en-US/Template/Manual-Appendix.xml
@@ -7,6 +7,7 @@
<appendix id="ManualTemplate-AppendixA">
<title>Manual Template AppendixA</title>
<para>
+ paragraph
</para>
</appendix>
<xi:include href="Revision_History.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
diff --git a/en-US/Template/Manual-Preface.xml b/en-US/Template/Manual-Preface.xml
index ed4e789..ec266f2 100644
--- a/en-US/Template/Manual-Preface.xml
+++ b/en-US/Template/Manual-Preface.xml
@@ -5,6 +5,7 @@
<preface id="LinuxAdvancedManual-Preface">
<title>Preface</title>
<para>
+ paragraph
</para>
<xi:include href="../../../Common_Content/Conventions.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="../../../Common_Content/Feedback.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
15 years, 7 months