SUSE Technical Reference Documentation Contributors Guide #
How to Create Documentation for SUSE TRD
1 Introduction #
1.1 Motivation #
SUSE Technical Reference Documentation (SUSE TRD)is an open collection of high quality guidance for solutions that address real-world use cases with featured SUSE, partner, and community components. Documents are modular and rendered from multiple source files. These source files are freely available and open source licensed in the GitHub repository.
SUSE TRD can be generally divided into four types:
Getting Started Guide
Solution introduction with step-by-step guidance for installation and configuration.
Reference Implementation
Introductory architectural approach and basis for deployment of solution with the SUSE portfolio.
Reference Configuration
Reference Implementation with specified partner hardware and software components.
Enterprise Architecture
Architectural overview of solution from an enterprise landscape perspective.
Community engagement with SUSE TRD is encouraged. You can easily submit quick fixes and even section updates through Report an issue links in the HTML version of any document.
If you have an interest in contributing a new document, you first should become familiar with the style, tools, and workflows of a successful contributor.
1.2 Scope #
This guide outlines style, tools, and workflows for successful contributions to SUSE TRD.
1.3 Audience #
This document is intended for architects, engineers, and technical writers who would like to contribute to SUSE TRD.
2 Prerequisites #
Contributors to SUSE TRD need the following:
A plain text editor
NoteYour editor should save files encoded to UTF-8 and end lines only with the line feed character.
See also Configuring Git to handle line endings.
GitHub account and basic Git skills
Basic understanding of the AsciiDoc markup language
DAPS toolchain (for rendering documents)
You have two options: Install DAPS and its dependencies directly, including the latest SUSE XSL Stylesheets. Use the DAPS2Docker container implementation.
See Section 9, “DAPS” for more information.
PDF viewer and Web browser (for reviewing rendered documents)
3 Terminology #
- Branch
A branch represents an independent line of development. It allows you to make edits and commits without affecting the primary or 'main' branch of repository. Your branch must be merged into the 'main' branch of the upstream repository to be published.
- Clone
A clone is a copy of a repository, typically hosted on your local system.
- Commit
A commit represents a specific revision or version in your project’s Git history.
- Fork
A fork is a copy of a repository. When you fork a repository, you create a copy in which you can safely make changes without affecting the original project. For this guide, your fork of SUSE TRD is hosted in your GitHub account.
- Git
Git is a free and open source, distributed version control system.
- GitHub
GitHub is a developer platform and service powered by Git and used by millions of developers to build, scale, and deliver secure software. SUSE TRD is hosted on GitHub to ease collaboration and contributions from the global community.
- Pull request
A pull request is submission to a repository’s collaborators to accept your proposed changes. In the SUSE TRD workflow, you create a branch, make all your changes in this branch, then create a pull request to the upstream repository. Once your pull request is accepted, it is merged into the upstream 'main' branch.
- Remote
A remote is a repository that is used to track a project but resides somewhere else. For the workflow outlined in this guide, you have two remotes:
your fork of the SUSE TRD repository on GitHub, referred to by the name, origin.
the SUSE TRD repository on GitHub, referred to by upstream.
- Repository
A repository is a data structure containing files, directories, and metadata about the project (such as commit history, tags, branches, authors, and more). The SUSE TRD repository hosted on GitHub contains the source files for the published documents, history of changes in those documents, and more.
4 Workflow #
The SUSE TRD GitHub repository is an organized collection of source files for each document. You can learn more about types of source files and how they are organized in Section 5, “Repository structure”.
Contributors use a Git workflow with the following major steps:
Fork the SUSE TRD repository.
Clone the fork.
Make a branch.
Create content.
Submit a pull request.
Each of these steps is explored in more detail in the following sections.
4.1 Fork the SUSE TRD repository #
The first step is to create a fork of the SUSE TRD repository into your own GitHub account. This only needs to be done once.
If you work for SUSE or a partner company, use your company-sanctioned GitHub account.
Open your Web browser and log into your GitHub account.
Navigate to the SUSE TRD GitHub repository.
Fork this repository into your own account.
If you are working with others on your document, you can invite them to collaborate in your repository fork.
NoteAlternatively, others can fork your fork and follow a similar workflow and submit content and suggestions to you through pull requests.
Navigate to your fork.
Click Settings > Colaborators > Add people.
Enter the GitHub username, full name, or email address of your collaborator into the search field, then select the individual you wish to add.
WarningBe sure to verify that you select the correct individual.
SUSE employees should use approved GitHub accounts associated with their SUSE email addresses. Partner contributors should use GitHub accounts associated with their employer email account.
Click Add to this repository.
4.2 Clone the fork #
Create a clone of your fork so you can work on your local system. When you clone a Git repository to your local system, you download a full copy of all the repository data at that point in time. This includes not just source files but Git metadata too, including branches, commit history, and more.
Launch a terminal on your local system.
On the command line, change to the directory where you will store the clone, creating it if necessary.
For example,
mkdir -p ~/git/GITHUB_USER cd ~/git/GITHUB_USER
where
GITHUB_USER
is your GitHub username.NoteAll forks of a Git repository share the same directory structure. Creating the additional directory layer gives you the flexibility to host clones of other forks of the upstream repository or even of the upstream repository itself.
Clone your fork.
git clone git@github.com:GITHUB_USER/technical-reference-documentation.git
TipFind the URL of your fork in the GitHub UI.
Log into GitHub and go to your fork.
Click <> Code.
Select the Local tab.
Click SSH.
Click the "copy" icon to copy the URL to your clipboard.
Enter the top-level directory of your clone.
cd technical-reference-documentation
Add the SUSE TRD repository as your upstream remote.
git remote add upstream git@github.com:SUSE/technical-reference-documentation.git
NoteYour clone’s primary remote is named origin and it represents the fork in your GitHub account.
Verify your remotes.
git remote -v
origin git@github.com:GITHUB_USER/technical-reference-documentation.git (fetch) origin git@github.com:GITHUB_USER/technical-reference-documentation.git (push) upstream git@github.com:SUSE/technical-reference-documentation.git (fetch) upstream git@github.com:SUSE/technical-reference-documentation.git (push)
NoteGITHUB_USER in this example would be replaced with your GitHub username.
4.3 Make a branch #
Branches help you keep your work separate from that of others. Think of a branch as an independent, project work area. You create your document in a branch of your fork. Later, you submit a pull request to merge this branch into the 'main' upstream branch.
Create a branch for your project.
For example,
git branch my-tuxy-project
To work in this branch, you have to check it out.
git checkout my-tuxy-project
You can create and check out a branch at the same time with:
git checkout -b my-tuxy-project
It is a good practice to make sure your branch is active at the start of each editing session. You can verify your current branch with:
git branch --show-current
4.4 Configure the framework #
Your documentation project consists of multiple types of files, placed in specific locations within the directory structure of the SUSE TRD repository. Setting up this structure for your project can seem challenging. Fortunately, there are automation tools to help you quickly generate a compliant framework with templates for the required source files. See Section 6, “Templates and framework” to learn more.
4.5 Create content #
Good documentation often results from collaborative efforts and multiple editing sessions. The following workflow can help you manage this process.
Enter the local directory containing the clone of your GitHub fork. For example:
cd ~/git/GITHUB_USER/technical-reference-documentation
Check out your project’s branch.
git checkout my-tuxy-project
TipAlways remember to work in your branch.
Update the clone from your origin remote.
This allows you to integrate any edits or other content from your contributors, helping you minimize merge conflicts later.
git pull origin
NoteIt is not necessary to specify the origin remote, since it is configured as your default for tracking.
ImportantFix any merge errors before proceeding.
Create your content.
A typical content session involves editing source files and copying assets (such as image files) into appropriate project directories. Be sure to refer to Section 7, “Style” and Section 8, “AsciiDoc” to learn more about writing style and content formatting.
Render your document with DAPS to verify content, layout, and style.
NoteYou may get validation errors if you have invalid AsciiDoc syntax. You must then find and correct these errors.
Commit your changes locally.
For example:
git add . git commit -m "updated section 5; added screenshot"
TipAlways include a commit message as a reminder to yourself and to let your collaboration team know what changes you made in this commit.
Push the commit to your origin remote.
git push origin
NoteThe first time you push a commit on your branch, you will see a warning like:
fatal: The current branch my-tuxy-project has no upstream branch. To push the current branch and set the remote as upstream, use git push --set-upstream origin my-tuxy-project To have this happen automatically for branches without a tracking upstream, see 'push.autoSetupRemote' in 'git help config'.
Simply follow the instructions to fix the issue.
You only need to do this once.
Repeat these steps until you are finished with new content.
It is a good idea to break up long content creation sessions. Pause frequently to commit and push edits to your origin remote.
4.6 Submit a pull request #
Before you submit your document, be sure to update your fork with changes in the 'main' branch of the SUSE TRD GitHub repository.
Open a local terminal and change to your clone directory.
For example:
cd ~/git/GITHUB_USER/technical-reference-documentation
Check out your 'main' branch.
git checkout main
Update your clone with changes in the upstream remote.
git pull upstream main
Synchronize these updates to your origin remote.
git push origin
With your document in good shape and your fork synchronized, it is time to submit your document for official review. To do this, you submit a pull request (PR) from the GitHub UI.
Log into your GitHub account.
Select your fork of the upstream repository.
Select your branch and click Compare & pull request.
Verify that your branch is able to be merged and click Create pull request.
You can add any helpful notes to the reviewer in the provided space.
Follow the status of your pull request in the GitHub Pull requests page of the upstream repository.
Respond to comments and suggestions in the Conversation tab.
When your document is ready, verify that is published to the SUSE TRD website.
After your document has been published, clean up your work area.
Delete your previous branch.
git checkout main git branch -d my-tuxy-project
Merge upstream changes to your local fork.
git pull upstream main
Synchronize your fork.
git push origin
5 Repository structure #
SUSE TRD is both a website with links to published documents and a GitHub repository of their source files. As a contributor, you need a general understanding of the structure of the source repository.
The repository’s top-level directories are:
linux: contains documentation focused primarily on aspects of Linux and related products, projects, and tools
kubernetes: contains documentation focused primarily on Kubernetes and related products, projects, and tools
common: contains text (such as the license and disclaimer), images (such as official SUSE logos), templates (for various document types), and scripts (for simplifying and automating tasks) that may be used across the two major categories.
├── common │ ├── adoc │ ├── bin │ ├── images │ └── templates ├── kubernetes │ ├── enterprise │ ├── reference │ └── start └── linux ├── enterprise ├── reference └── start
Inside the linux and kubernetes directories, are directories for the document types:
start: getting started guides
reference: reference implementations and reference configurations
enterprise: enterprise architectures
5.1 Getting started guide structure #
A getting started guide features a combination of components by one or more "entities," such as SUSE, a partner company, or an open source project. The source files used to generate these guides are maintained under the linux/start or kubernetes/start directories, depending on the primary implementation focus. Guide files are further organized into directories named for a featured entity. This is typically the provider of the component at the highest layer of the technology stack and closest to the user’s workload or use case. Thus, for example, you find directories for Kubeflow, MongoDB, Ondat, and so on.
start ├── bin ├── kubeflow ├── minio ├── mongodb ├── ondat ├── suse ├── sysdig ├── upbound └── veeam
The bin directory contains scripts to help contributors perform various tasks.
Inside an "entity" directory, you find further structure. For example:
veeam ├── DC-gs_rancher_veeam-kasten 1 ├── adoc 2 │ ├── common_gfdl1.2_i.adoc -> ../../../../common/adoc/common_gfdl1.2_i.adoc │ ├── ... │ ├── gs_rancher_veeam-kasten.adoc 3 │ └── gs_rancher_veeam-kasten-docinfo.xml 4 ├── images -> media └── media 5 └── src ├── png │ ├── rancher_veeam-kasten_k10_dashboard-welcome.png │ ├── ... │ └── rancher_veeam-kasten_architecture-1.png └── svg ├── logo-lockup_rancher-by-suse_kasten-by-veeam_hor_dark.svg └── suse.svg -> ../../../../../../common/images/src/svg/suse.svg
Doc Config (DC) file: There is one DC file for each documentation deliverable in which you specify parameters that define the name of the main content file, the rendering stylesheet, the revision date, and so on. | |
adoc directory: Contains your AsciiDoc content files and your DocBook metadata file. | |
Main content file: This plain text file, formatted with the AsciiDoc markup language, is where you write most of the text of your document.
You can use the | |
DocBook metadata (docinfo.xml) file: This file specifies metadata about your document, including title, author information, cover logo file, and executive summary. Much of this information is actually defined as document attributes (variables) in your main content file and referenced here to save you from having to type the same information twice. | |
media directory: You can include logos, diagrams, screenshots, and other images in your guides. These media files are stored in subdirectories by file type under media/src. Many image file types are supported, but preference is given to:
Note In the "entity" directory, images is a symbolic link to the media directory, and is used to maintain compatibility with existing processes and tooling. |
You can learn more about Doc Config, AsciiDoc, and DocBook metadata files in Section 6, “Templates and framework”.
5.2 Reference Implementation and Reference Configuration structure #
Coming soon.
6 Templates and framework #
Your SUSE TRD documentation project relies on different types of source files, placed in specific locations within the repository’s directory structure. The files and structures can be created from scratch. But you can use the provided automation tools to generate a framework for you, including templates for your source files.
6.1 Getting started guides #
Getting started guides are relatively simple documents, but they do require multiple files located in a specific directory structure.
You can create this structure and the requisite files manually, but the gssetup.sh
script is available to help automate the process.
6.1.1 Generate the framework #
Open a local terminal and change to the directory containing your clone.
cd ~/git/GITHUB_USER/technical-reference-documentation
Check out your project branch.
git checkout tux-my-project
Change to either the kubernetes/start/ or linux/start/ subdirectory.
For example:
cd kubernetes/start
Execute the setup script to generate directory structures and basic files from templates.
bin/gssetup.sh
Verify that you have performed the prerequisite actions presented in the banner, then press ENTER to continue.
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = Set up workspace for new TRD getting started guide = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Before proceeding make sure you have: - 1. created a local branch: `git branch myproject` - 2. checked out your new branch: `git checkout myproject` - 3. changed to the 'kubernetes/start' or - 'linux/start' directory (as appropriate) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Are you ready to proceed? Press ENTER to continue or CTRL-C to cancel.
Select whether this guide focuses on a Kubernetes or Linux solution.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Gather some information - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please enter the relevant category (i.e., 'k' for Kubernetes or 'l' for Linux) : k
NoteLinux is likely a part of every solution, but, if any portion of SUSE’s Enterprise Container Management portfolio is involved, select 'k' for Kubernetes.
Identify the primary SUSE product name.
Please enter the primary SUSE product name (e.g., 'rancher', 'k3s', 'sles', 'suma', etc.) : rancher
NoteIdentify one product as the primary component by entering a product abbreviation with lowercase, alphanumeric characters (no hyphens or other special characters). Product options include: harvester, rancher, rke, rke2, k3s, longhorn, sles, and suma.
A solution may involve multiple SUSE products. If you have difficulty selecting one product as primary, select as primary the component that appears first in the above product list. Thus, for a solution with Rancher, RKE2, Longhorn, and SLES, you would enter 'rancher' at the prompt.
If it is critical to reference additional SUSE products in the directory and file names, this can be handled with a manual process after running the script.
Identify a primary partner.
Please enter the name of the primary partner : tuxy
NoteAs with SUSE products, multiple partners and multiple partner products may appear in a solution. This selection only affects directory and file names. All other partners and products are properly can be identified in the text of the guide.
Generally, select as primary the partner whose product is at the highest layer of the solution stack. Enter the name of the partner using lowercase letters and numbers without special characters (like hyphens).
If it is critical to reference additional partners in the directory and file names, this can be done with a manual process after running this script.
Identify the primary partner product.
Please enter the primary partner product name : penguin
NoteUse a lowercase abbreviation of the primary partner’s product that is featured in the solution.
If it is critical for a second product of the primary partner to appear in the file name, you can enter both product abbreviations separated by a hyphen.
Optionally enter a use case or description.
If you would like a use case or description (1-3 words), enter it now or just press ENTER :
NoteThis use case text is used in file and directory names. It is useful to include such text if there are or will be guides detailing use of the same solution stack for different purposes. In most cases, it is fine to leave this blank.
Review the proposed structure and naming.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - About to create the following structure: - - kubernetes - └── start - └── tuxy - ├── DC-gs_rancher_tuxy-penguin - ├── adoc - │ ├── gs_rancher_tuxy-penguin.adoc - │ ├── gs_rancher_tuxy-penguin-docinfo.xml - ├── images -> media - └── media - └── src - ├── png - └── svg - - Note: Several symbolic links will also be created. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Press ENTER to create document structure or CTRL-C to cancel.
TipNo directories or files are created until you press ENTER. If you want to make changes, press CTRL-C to cancel the planned operation and rerun the script.
Confirm that the script has correctly created the structure as intended.
> cd tuxy > tree .
tree . . ├── adoc │ ├── common_docinfo_vars.adoc -> ../../../../common/adoc/common_docinfo_vars.adoc │ ├── common_gfdl1.2_i.adoc -> ../../../../common/adoc/common_gfdl1.2_i.adoc │ ├── common_sbp_legal_notice.adoc -> ../../../../common/adoc/common_sbp_legal_notice.adoc │ ├── common_trd_legal_notice.adoc -> ../../../../common/adoc/common_trd_legal_notice.adoc │ ├── gs_rancher_tuxy-penguin.adoc │ └── gs_rancher_tuxy-penguin-docinfo.xml ├── DC-gs_rancher_tuxy-penguin ├── images -> media └── media └── src ├── png └── svg └── suse.svg -> ../../../../../../common/images/src/svg/suse.svg
The gssetup.sh
script creates the standard directory structure, symbolic links to common files, and the three principal files you will edit for your document: the Doc Config (DC) file, the DocBook metadata docinfo) file, and the AsciiDoc (adoc) file for your main content.
6.1.2 Doc Config file #
Your Doc Config (or DC) file specifies parameters that define the documentation deliverable. Some key parameters in the file are highlighted below.
DRAFT=yes 1 ... MAIN="gs_rancher_tuxy-penguin.adoc" 2 ... ADOC_ATTRIBUTES+=" --attribute docdate=yyyy-mm-dd" 3
Specifies that the document is in draft mode. Prior to submitting for publication, deactivate draft mode by simply prepending the line with a hash mark ( # ): #DRAFT=yes | |
Specifies the filename of your main content file. | |
Specifies the document revision date. Update this date prior to submitting for publication. |
6.1.3 DocBook metadata file #
The DocBook metadata (docinfo) file specifies metadata about your document, including title, author information, cover logo, and an executive summary.
Be sure document attributes (variables) referenced in the docinfo file are properly defined in your adoc file. Otherwise, your document will fail to render.
<productname>{product1} {product1_version}</productname> 1 <meta name="platform">{product1_full}</meta> 2 ... <authorgroup> <author> 3 <personname> 4 <firstname>{author1_firstname}</firstname> <surname>{author1_surname}</surname> </personname> <affiliation> 5 <jobtitle>{author1_jobtitle}</jobtitle> <orgname>{author1_orgname}</orgname> </affiliation> </author> </authorgroup> ... <cover role="logos"> 6 <mediaobject> <imageobject role="fo"> <imagedata fileref="suse.svg" width="10em"/> </imageobject> <imageobject role="html"> <imagedata fileref="suse.svg" width="30em"/> </imageobject> </mediaobject> </cover>
Specifies the guide’s primary SUSE product by official abbreviation and version. Examples: 'SLES 15', 'SLES 15 SP4', 'Rancher 2.x', 'Rancher 2.7', 'Rancher 2.6+' | |
Specifies the official full name of the primary SUSE product. Examples: 'SUSE Linux Enterprise Server', 'SUSE Manager', 'Rancher by SUSE' | |
Delimits the information about a single author.
Add an Tip You can also indicate an editor with Alternatively, it is acceptable to thank editors and other contributors in an "Acknowledgements" subsection of your "Introduction." | |
Specifies the name of the author with document attributes defined in your adoc file. | |
Specifies the job title and affiliation (company, foundation, agency, project, etc.) of the author. | |
Specifies the logo image to appear on the cover page of rendered documents. The SUSE logo is used by default. To use a joint logo with a partner or project, create a logo lock-up that is compliant with brand guidelines (approvals may be required from all parties). |
6.1.4 AsciiDoc content files #
The text of your document is contained in one or more AsciiDoc (adoc) files.
For a getting started guide, you typically put all your content in a single adoc file, the one specified in the DC file with the MAIN
parameter.
You can split your contents into multiple adoc files and use the AsciiDoc include directive so all the content will be merged in the rendered document.
6.1.4.1 Document attributes and variables #
Document attributes are name-value pairs you declare in your adoc file. Attributes enable you to configure the AsciiDoc processor, declare document metadata, and define reusable content that you can reference elsewhere within the document like variables in a programming language.
You define an attribute with an entry in the form of:
:name_of_attribute: value of attribute
The attribute name is preceded and followed by a colon (:). The SUSE TRD style uses only lowercase letters, numbers, and underscores.
The attribute value is any text up to a new line character.
NoteThere must be a space between the closing colon of the attribute name and the first character of the value text.
The getting started guide adoc template includes a 'Variables & Attributes' section to help you define required attributes and allow you to define custom ones.
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // organization - do NOT modify // - :trd: Technical Reference Documentation 1 :type: Getting Started 2
Declares this document as part of SUSE Technical Reference Documentation. | |
Declares this document to be a getting started guide. |
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // document // - :title: Title 1 :subtitle: Subtitle 2
Your title should be written in title case (see Section 8, “AsciiDoc”). It should consist of a few words that identify the contents of the document. | |
Your subtitle should provide further clarification to the document contents. |
:product1: Primary SUSE product/platform short name (abbreviation) 1 :product1_full: Primary SUSE product/platform full name :product1_version: Primary SUSE product/platform relevant version or versions :product1_url: Primary SUSE product/platform URL (without the protocol) :product2: Secondary product short name 2 :product2_full: Secondary product full name :product2_url: Secondary product URL
Identifies the primary SUSE product or platform first. Include attributes for:
| |
Identifies additional products by SUSE, partners, foundations, projects, etc. |
:usecase: Use case featured in this document 1 :executive_summary: One sentence summary of the document 2
Provides a text snippet identifying the use case. This should be brief and high level. Some examples include: Database-as-a-Service, edge analytics in healthcare, and Kubernetes-native object storage. | |
Provides an executive summary of the document in one sentence. Your executive summary should inform the reader’s expectations for the document. You can even use previously defined attributes. For example, "This document outlines basic steps for using the {product2_full} to implement {usecase} on {product1_full}." This attribute is referenced in your docinfo file and appears after the cover page in your rendered document. |
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // contributor // specify information about authors, editors, and others here, // then update docinfo file as appropriate // - :author1_firstname: first (given) name 1 :author1_surname: surname :author1_jobtitle: job title :author1_orgname: organization affiliation //:author2_firstname: first (given) name 2 //:author2_surname: surname //:author2_jobtitle: job title //:author2_orgname: organization affiliation
Provides information about the primary author of the document. This includes:
| |
You can define additional authors by repeating the pattern for the first author.
You also must add an |
You can also define editors and other contributors in the same way, except you use <editor>
…</editor>
and <othercredit>
…<othercredit>
tags in your docinfo file.
You conclude this section of your main adoc file with any custom variables you wish to define.
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // miscellaneous // define any additional variables here for use within the document // -
6.1.4.2 Content #
After defining document attributes and variables, you can begin developing your content.
The template provided by the gssetup.sh
script provides an outline for a general getting started guide.
Additional guidance is included as comments (lines prefixed with a double backslash, \\
).
A general structure for a getting started guide includes these sections:
Introduction: introduction to the concept and purpose of the guide.
Motivation: why this guide is needed
Scope: what the guide covers
Audience: who can benefit from the guide and what skills are required
Acknowledgements (optional): who else contributed to this guide but is not listed as an author
Prerequisites: minimum requirements needed by the reader to follow the actions detailed in the guide - link to resources and references
Technical overview: technical description of the solution - include architecture and other diagrams
Installation: step-by-step guide for installation
Configuration (optional): additional steps beyond installation required to render a functional solution
Demonstration or Validation: step-by-step demonstration or validation of the featured function or use case
Summary: brief review of the solution, what was covered, and suggestions for next steps
This general structure can be adapted to fit a the particular solution or use case.
6.2 Reference implementations and reference configurations #
Coming soon.
7 Style #
SUSE TRD is part of the SUSE Documentation ecosystem. Its objective is to provide well-structured, clear, and concise technical information in a way that facilitates real-world problem-solving. Consistent writing style and formatting contribute to the creation of high quality documentation.
Writing style goes beyond the essential elements of spelling, grammar, and punctuation to include tone of voice, choice of words, sentence and paragraph structure, and more.
Keep in mind the following general writing style guidance as you create your documentation for SUSE TRD:
Make your content compelling, relevant, and valuable for your target audience.
Be clear, concise, and complete.
Use a conversational yet professional tone.
Refer to the reader in the second person (you).
Use the active voice and the present tense.
Use inclusive language.
Avoid contractions and abbreviations.
Follow brand guidelines.
Leverage Search Engine Optimization (SEO) practices to raise ranking by search engines and grow visibility.
For more on writing effective technical documentation, see the SUSE Documentation Style Guide.
8 AsciiDoc #
SUSE TRD documentation is rendered from plain text files. Formatting (including structure and text styling) is indicated with AsciiDoc. This is a lightweight and semantic markup language with an intuitive syntax that is primarily designed for writing technical documentation.
8.1 General guidelines #
When creating your content:
Use a plain text editor.
Ensure files are encoded to UTF-8.
Start each line in the first column.
There should be no leading whitespace.
Strip trailing whitespace from lines.
End lines with the line feed character only.
Some operating systems add both a carriage return and a line feed to the end of a line. You must strip these carriage return characters from your files before submission. This can also be done by configuring Git to handle line endings.
Do not edit files outside the scope of your project.
This includes common files, scripts, and the files associated with other published documentation.
Start each sentence on a new line, even if it is part of the same paragraph.
This makes it easier to edit and handle Git merge conflicts.
The following sections address specific aspects of document structure and text styling with AsciiDoc.
8.2 Document attributes and variables #
Document attributes are name-value pairs that you can use to configure the AsciiDoc processor, define document metadata, and create reusable content. Think of document attributes as document-scoped variables. Document attributes can be defined anywhere in your document and used from that point forward.
SUSE TRD uses document attributes to define some required content, such as document title, author information, and product names. You can define your own document attributes and reference them throughout your document for frequently repeated content.
The definition of a document attribute takes the form:
:name-of-an-attribute: value of the attribute
For example:
:title: Edge Analytics in Finance :product1: Rancher
You reference a document attribute in your text by its name surrounded in curly braces ( {
and }
).
For example:
This document provides guidance for deploying {product2} on {product1} to enable {usecase}.
8.3 Document title and subtitle #
With AsciiDoc, the title of your document is usually placed on the first line of the main content file and is prefixed by a single equal sign ( =
).
An optional subtitle can be included on the same line, separated from the title by a colon and a space ( :
).
= My Document Title: My Document Subtitle
For getting started guides, you define title and subtitle as document attributes:
:title: Rancher by SUSE and Priority Support on AWS Marketplace :subtitle: Deploy Rancher on Elastic Kubernetes Service (EKS)
and reference them in your adoc file as:
= {title}: {subtitle}
and in your docinfo file as:
<title>{title}</title> <subtitle>{subtitle}</subtitle>
Titles and subtitles use title-style capitalization. You can implement title-style by following a few rules:
Capitalize the first and last word.
Write articles (a, an, the) in lowercase, unless it is the first word.
Write prepositions in lowercase unless they are used with a verb (Logging In) or in a noun (The On Button).
Write certain conjunctions in lowercase: and, but, for, nor, and or.
Write as and to in lowercase.
Capitalize everything that is not mentioned above.
8.4 Sections #
Sections help you group and organize related text.
Each section is marked by a section title or heading.
This is short text, prefixed by a section marker that indicates the section level.
Section markers are two or more equal signs ( ==
, ===
, and so on).
== Section title level 1 === Section title level 2 ==== Section title level 3
Guidance for section titles:
Choose a section title that clearly identifies what contents to expect.
Use sentence case.
That is, only the first word and proper nouns should be capitalized.
Minimize section title length (typically, 1 to 4 words).
Avoid using more than three section levels.
Ensure all sections have content.
This means that a subsection title should never immediately follow section title without some intervening text.
Start instruction section titles with an imperative verb or a verbal noun (gerund).
Consider this example:
== Enabling Podman Podman, which is short for Pod Manager, is a daemonless, open source tool ... === Install Podman Podman is not installed by default in SLES 15, but you can install it with these steps. ... === Define subordinate UIDs and GIDs By default, only the root user can run Podman containers. Running ... ... == Creating container images You can build an application container image ... === Make a build directory You need a place in your file system to contain ...
8.5 Lists #
Lists can provide structure to your content.
- Unordered list
is a series of items in no particular order and is sometimes called a bulleted list.
Prefix an item by an asterisk (
*
) in the first column.Create subordinate or nested lists by adding more asterisks.
Avoid creating more than three nest levels.
* Security and compliance ** Prompt response by SUSE engineers to security incidents ** Premium quality security updates ** Configuration, auditing, and automation features * Adaptability ** Modular design ** Broad hardware architecture support
- Ordered list
is a series of items for which order matters, such as a series of instructions.
Prefix an item with a period or full stop (
.
) in the first column.The rendering engine will replace the period with an appropriate number or letter.
Create subordinate or nested lists by adding more periods.
Avoid creating more than three levels.
. Verify target hardware support. .. Confirm CPU capabilities. .. Confirm RAM size. .. Confirm space on target hard disk. . Install system. .. Prepare installation media. .. Boot installation media. .. Follow installation wizard. . Reboot into new system.
- Description list
is a collection of terms and their descriptions.
Start a term-description item with the term followed by two colons (
::
).Place the description on the next line without any indentation.
Include at least one blank line between each term-description pair.
Cluster:: A set of worker machines, called nodes, that run containerized applciations. Every cluster has at least one worker node. Pod:: The smallest deployable unit of computing that you can create and manage in Kubernetes. Control plane:: The container orchestration layer that exposes the API and interfaces to define, deploy, and manage the lifecycle of containers.
8.6 File and directory names #
Use the grave accent or back tick ( `
) to delimit file and directory names.
For example:
The `manifest.yaml` file is located in the `$HOME/my-tuxy-project` directory.
For directory names, a trailing slash ( /
) can be used if it is not clear that you are referring to a directory.
8.7 Admonitions #
Use admonitions are used to help draw the reader’s attention to content. AsciiDoc supports five admonition types represented by the following labels:
NOTE
: provide additional informationTIP
: suggest a helpful tipIMPORTANT
: highlight an important pointCAUTION
: advise that care should be takenWARNING
: inform of danger, harm, or consequences
The basic admonition style places the admonition label followed by a colon ( :
) at the beginning of a line of text.
This is useful for short admonitions that do not contain a line break.
For example:
TIP: By default, some `zypper` commands perform `refresh` automatically.
This is rendered as:
By default, some zypper
commands perform refresh
automatically.
The block admonition style provides more flexibility for the content, as illustrated with this example:
[IMPORTANT] ==== When working with snapshots to restore data, it is important to know that there are two fundamentally different scenarios Snapper can handle: Undoing changes:: When undoing changes as described in the following, two snapshots are being compared and the changes between these two snapshots are made undone. Using this method also allows to explicitly select the files that should be restored. Rollback:: When doing rollbacks as described in <<System rollback>>, the system is reset to the state at which the snapshot was taken. ====
8.8 Source code, commands, and output #
Content in listing blocks are rendered in a fixed-width font, making them ideal for source code, commands, and console output where spacing can be important.
A basic listing block has the form:
[listing] ---- This text has really weird spacing that is preserved. Line spacing is also preserved. ----
You can include a source code listing in your document with a source code block. This special type of listing block enables syntax highlighting, using color and text styles to highlight code structures (such as keyword, variables, constants, comments, and so on).
To illustrate, review the following Python code snippet.
[source, python] 1 ---- 2 # import libraries import matplotlib.pyplot as plt import numpy as np # define data points xpoints = np.array([1, 2, 5, 12]) ypoints = np.array([5, 3, 11, 6]) plt.plot(xpoints, ypoints) plt.show() ---- 3
| |
|
As with ordinary listing blocks, line spacing is preserved.
Commands entered on the command line are also handled with source code blocks.
For commands, use console
as the source language identifier.
For example:
[source, console] ---- sudo zypper install vim ----
You can also reference a short command inline by delimiting it with the grave accent or back tick ( `
):
Use `zypper refresh` to update your enabled repositories.
For the output of a command, use a simple listing block for output. This will render with a fixed-width font and preserve line spacing. For example:
[listing] ---- Type | # | | Cleanup | Description | Userdata -------+---+ ... +---------+-----------------------+-------------- single | 0 | | | current | single | 1 | | number | first root filesystem | single | 2 | | number | after installation | important=yes single | 3 | | number | rollback backup of #1 | important=yes single | 4 | | | | ----
8.9 Graphical user interface elements #
As with commands on the command line, you may need to reference named elements of an application’s graphical user interface (GUI).
Use a double underscore ( __
) to delimit each element.
If providing a series of element selections, separate each element with the greater than symbol ( >
).
. Open _myfile_. .. Click __File__ > __Open__. .. Select _myfile_ from the list. .. Click __Open__.
8.10 Links #
Create links (or hyperlinks) to other addressable resources in AsciiDoc. A link consists of two parts:
- target
This is the external resource and is represented by an address, known as a Uniform Resource Identifier (URI). A common type of URI is the familiar Uniform Resource Locator (URL) or address of a Web page.
- link text
This is the text you wish the reader to see (typically in place of the URI) and be able to click to open the remote resource in an appropriate application (such as a Web browser).
The AsciiDoc processor detects common URL protocols, including HTTP, HTTPS, FTP, IRC, and MAILTO. That is, if you include a URL (such as https://documentation.suse.com/) in your text, it will be rendered as a link with the URL itself as the link text.
To use a custom link text, append it to the URL as an attribute. That is,
https://target-URL[custom link text]
For example:
Visit https://documentation.suse.com/[SUSE Documentation] to continue your learning journey.
8.11 Images #
You can enhance your document with graphical content, such as diagrams, screenshots, logos, and more. In AsciiDoc, the most common way to insert an image is with a block image macro. This takes the form:
image::TARGET[ATTRIBUTES]
where:
image::
designates the block image macro.TARGET
is typically is your target image file.AsciiDoc supports many image formats, but Scaled Vector Graphics (SVG) and Portable Network Graphics (PNG) are preferred.
Place your image files in the appropriate subdirectory of
media/src
by type. For example, if you are using a SVG file for a diagram, it would be located inmedia/src/svg
. If you do this, you do not need to specify the path to the file.[ATTRIBUTES]
is a comma-delimited list of attributes, as key=value pairs.The most common attributes you will use include:
alt text: alternate text that briefly identifies the image. It is useful for text-to-speech readers and situations when the image cannot be displayed.
scaledwidth: preferred width of the image for PDF renderings. This is typically specified as a percentage of the content width (area between margins).
align: suggest horizontal alignment for the image (that is, left, center, and right).
Thus, to display the image, media/src/svg/my-tuxy-architecture.svg
at 75 percent of the page width and centered horizontally, you would use:
image::my-tuxy-architecture.svg[Tuxy Architecture, scaledwidth="75%", align="center"]
9 DAPS #
Among the important tools for your workflow as a contributor to SUSE Technical Reference Documentation is the DocBook Authoring and Publishing Suite (DAPS). DAPS helps you author and publish documentation written in DocBook XML and AsciiDoc to a variety of different formats, such as HTML, EPUB, and PDF. It also includes tooling for validation, link checking, spell checking, and editor macros.
DAPS is dual-licensed under GPL 2.0 and GPL 3.0, and it is available as binary packages for the openSUSE and SUSE Linux Enterprise, and it can be installed from source on any Linux distribution. DAPS has several software dependencies, some of which are required and others are recommended to enable certain functionality. For details, see the System Requirements and Installation section of the DAPS User Guide.
Daps2Docker aims to simplify and expand access to the rendering capabilities of DAPS. It does this by packaging DAPS and some of its dependencies in an easy-to-use, OCI compliant container.
Below are details for installing and configuring Daps2Docker on a bare metal or virtual machine running one of the following operating systems:
SUSE Linux Enterprise Server (SLES) 15 SP5
openSUSE Leap (Leap) 15.5
openSUSE Tumbleweed (Tumbleweed)
It should require little effort to adapt these steps for other operating systems that can run OCI-compliant containers.
9.1 Prerequisites #
The installation steps outlined here assume that you have the following prerequisites:
A bare metal or virtual machine with access to the Internet and running one of the following operating systems:
SUSE Linux Enterprise Server (SLES) 15 SP5
openSUSE Leap (Leap) 15.5
openSUSE Tumbleweed (Tumbleweed)
NoteIf you are using SUSE Linux Enterprise Server, some of the tools you will require are curated through modules and extensions. You can use YaST or follow the steps below at the command line to activate the needed modules and extensions.
Enable the SLE Desktop Applications Module
sudo SUSEConnect -p sle-module-desktop-applications/15.5/x86_64
Enable the SLE Development Tools Module
sudo SUSEConnect -p sle-module-development-tools/15.5/x86_64
Enable the SLE Workstation Extension
sudo SUSEConnect -p sle-we/15.5/x86_64
Enable the SLE Containers Module
sudo SUSEConnect -p sle-module-containers/15.5/x86_64
Podman installed and accessible to your user account.
Podman is an open source, daemonless, container engine and toolset for deploying, running, and managing OCI compliant containers.
sudo zypper install podman
NoteAs Daps2Docker’s name implies, you can use Docker instead.
9.2 Enabling the Documentation:Tools repository #
Configure your system to use the Documentation:Tools software repository.
Open your Web browser to the Documentation:Tools repository.
Select the directory link for your operating system (for example, 'SLE_15_SP5/').
Download the
Documentation:Tools.repo
file and name itDocumentation_Tools.repo
.This RepoInfo file specifies some characteristics of the repository, such as a unique identifier, URL, and GPG checking.
On the command line, change to the directory containing the
Documentation_Tools.repo
file you just downloaded.For example:
cd ~/Downloads
Copy or move the
Documentation_Tools.repo
to/etc/zypp/repos.d/
.sudo cp Documentation_Tools.repo /etc/zypp/repos.d/
Refresh repository data.
sudo zypper refresh
TipIf you see the prompt:
Do you want to reject the key, trust temporarily, or trust always? [r/t/a/?] (r): a
Enter 'a' to always trust the repository signing key.
9.3 Installing Daps2Docker #
You can install Daps2Docker with zypper
on the command line.
Install Daps2Docker from the Documentation:Tools repository.
sudo zypper install --repo Documentation_Tools daps2docker
When you install Daps2Docker, you may see output like the following:
Problem: nothing provides 'docker' needed by the to be installed daps2docker-0.18-150400.1.1.noarch Solution 1: do not install daps2docker-0.18-150400.1.1.noarch Solution 2: break daps2docker-0.18-150400.1.1.noarch by ignoring some of its dependencies Choose from above solutions by number or cancel [1/2/c/d/?] (c): 2
Because Podman is being used, you can safely choose to "break" this dependency by selecting option '2'.
9.4 Configuring Daps2Docker #
Configure how Daps2Docker works for you in a local configuration file.
Make a directory for your configuration file.
mkdir -p ~/.config/daps2docker
Copy and execute this command to create your configuration file.
cat >> ~/.config/daps2docker/config <<EOL # # This is the configuration file for the daps2docker package # # set the default rendering formats formats="html,pdf" # set the container engine container_engine="podman" # set the container name containername="registry.opensuse.org/documentation/containers/containers/opensuse-daps-toolchain:latest" EOL
9.5 Using Daps2Docker #
Daps2Docker is run from the command line with the /usr/bin/daps2docker
script.
Enter your documentation directory, containing your DocBook Config (DC) file.
cd PATH/TO/YOUR/DC-FILE
Run Daps2Docker to render your document.
daps2docker DC-FILE [FORMAT]
TipIf you do not specify FORMAT, the configured default formats will be assumed.
See
daps2docker --help
for a list of supported formats and other options.NoteIf you have not configured your system to run Podman in rootless mode, you will be prompted for your root or sudo password when you run this script.
podman needs to be run as root. [sudo] password for root: *************
Review the command output.
Daps2Docker prints to your console various status and error messages. If your document can be rendered, you will get output like the following to tell you where to find your documents:
Your output documents are: /tmp/daps2docker-MavBGlXK/<filename>/html/FILENAME_draft/ /tmp/daps2docker-MavBGlXK/<filename>/FILENAME_draft_en.pdf
ImportantThe contents of the
/tmp
directory are ephemeral. If you wish to save your rendered documents, move them to another location.
9.6 Validating your document code #
You contribution to SUSE TRD is submitted as a collection of source files, such as DocBook metadata, AsciiDoc text, and images. These files are combined and rendered into an accessible format, like HTML and PDF, which can then be published. If source files are missing or if they contain code errors, your document may render incorrectly or not at all. And, thus, your contribution may be rejected for publication.
If your document cannot be rendered, Daps2Docker prints messages to the console to help you identify the issue. For example, if you did not define the document attribute, 'product1', but you reference it within your document, you would see:
asciidoctor: WARNING: skipping reference to missing attribute: product1
Even if your document renders, be sure to validate it for content, style, and formatting by reviewing the renderings. Peer reviews can help immensely to identify both content errors and better ways to express the information you wish to share.
10 Summary #
SUSE Technical Reference Documentation is a repository of high quality documentation for solutions that address real-world use cases with featured SUSE, partner, and community components.
This document provides an overview of the tools, techniques, workflows, and styles that you will use to make successful contributions to SUSE TRD.
11 Legal notice #
Copyright © 2006–2023 SUSE LLC and contributors. All rights reserved.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or (at your option) version 1.3; with the Invariant Section being this copyright notice and license. A copy of the license version 1.2 is included in the section entitled "GNU Free Documentation License".
SUSE, the SUSE logo and YaST are registered trademarks of SUSE LLC in the United States and other countries. For SUSE trademarks, see https://www.suse.com/company/legal/.
Linux is a registered trademark of Linus Torvalds. All other names or trademarks mentioned in this document may be trademarks or registered trademarks of their respective owners.
Documents published as part of the series SUSE Technical Reference Documentation have been contributed voluntarily by SUSE employees and third parties. They are meant to serve as examples of how particular actions can be performed. They have been compiled with utmost attention to detail. However, this does not guarantee complete accuracy. SUSE cannot verify that actions described in these documents do what is claimed or whether actions described have unintended consequences. SUSE LLC, its affiliates, the authors, and the translators may not be held liable for possible errors or the consequences thereof.
12 GNU Free Documentation License #
Copyright © 2000, 2001, 2002 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
0. PREAMBLE#
The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.
This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.
We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.
1. APPLICABILITY AND DEFINITIONS#
This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.
A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.
A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document’s overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.
The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.
The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.
A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque".
Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.
The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work’s title, preceding the beginning of the body of the text.
A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.
The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.
2. VERBATIM COPYING#
You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.
You may also lend copies, under the same conditions stated above, and you may publicly display copies.
3. COPYING IN QUANTITY#
If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document’s license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.
If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.
If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.
It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.
4. MODIFICATIONS#
You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:
Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.
State on the Title page the name of the publisher of the Modified Version, as the publisher.
Preserve all the copyright notices of the Document.
Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document’s license notice.
Include an unaltered copy of this License.
Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.
Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version.
Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.
Preserve any Warranty Disclaimers.
If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version’s license notice. These titles must be distinct from any other section titles.
You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties—for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.
You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.
The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.
5. COMBINING DOCUMENTS#
You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.
The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.
In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements".
6. COLLECTIONS OF DOCUMENTS#
You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.
You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.
7. AGGREGATION WITH INDEPENDENT WORKS#
A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation’s users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.
If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document’s Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.
8. TRANSLATION#
Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.
If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.
9. TERMINATION#
You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
10. FUTURE REVISIONS OF THIS LICENSE#
The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.
Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.
ADDENDUM: How to use this License for your documents#
Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled “GNU Free Documentation License”.
If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the “ with…Texts.” line with this:
with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.
If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.