Commit 78d6b3f7 authored by kyodev's avatar kyodev

maj

parent a41bf49e
Pipeline #62486 failed with stage
in 18 seconds
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Overview: module code &#8212; live-wrapper 0.7 documentation</title>
<link rel="stylesheet" href="../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
VERSION: '0.7',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt'
};
</script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
</head>
<body role="document">
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">live-wrapper 0.7 documentation</a> &#187;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1>All modules for which code is available</h1>
<ul><li><a href="lwr/disk.html">lwr.disk</a></li>
<li><a href="lwr/grub.html">lwr.grub</a></li>
<li><a href="lwr/isolinux.html">lwr.isolinux</a></li>
<li><a href="lwr/vm.html">lwr.vm</a></li>
<li><a href="lwr/xorriso.html">lwr.xorriso</a></li>
</ul>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<div id="searchbox" style="display: none" role="search">
<h3>Quick search</h3>
<form class="search" action="../search.html" method="get">
<div><input type="text" name="q" /></div>
<div><input type="submit" value="Go" /></div>
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">live-wrapper 0.7 documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Iain R. Learmonth.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.5.6.
</div>
</body>
</html>
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Advanced Topics
===============
Bootloader Customisation
------------------------
By default, both ISOLINUX (for BIOS boot) and GRUB 2 (for EFI boot) are
installed into the images. A ``loopback.cfg`` file is also installed to allow
for the image to be booted while still an ISO image in a filesystem.
You can pass ``--no-isolinux`` to prevent the installation of ISOLINUX to the
image if you do not want ISOLINUX.
You can pass ``--no-grub`` to prevent the installation of GRUB to the image.
If you do not want GRUB installed but you would still like the ``loopback.cfg``
file to be installed, you can pass ``--grub-loopback-only``.
Using an Alternative Build Directory
------------------------------------
Temporary directories are created using the Python standard library functions
for doing so. On Debian systems, this typically means that the directories are
created in ``/tmp``. If this is problematic for you, perhaps due to filesystem
permissions, you can change the path that Python will use to create directories
in by using the ``TMP`` environment variable, for example::
sudo TMP=/other/path lwr --blah --blah
Developer Documentation
=======================
.. toctree::
:maxdepth: 2
lwr
Welcome to live-wrapper's documentation!
=========================================
Contents:
.. toctree::
:maxdepth: 2
intro
quickstart
advanced
dev
Indices and tables
==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`
Introduction
============
live-wrapper is a tool produced by the `Debian Live Team
<https://www.debian.org/devel/debian-live/>`_ that can be used to create
Debian-based live images for use with CDs, DVDs or USB sticks.
live-wrapper is designed to, as far as is possible, exist only as glue between
existing tools. The root filesystem is built using `vmdebootstrap` and
isohybrid image creation is provided by `xorriso`.
Helper Documentation
====================
Root Filesystem Helpers
-----------------------
.. automodule:: lwr.vm
:members:
:undoc-members:
Bootloader Helpers
------------------
.. automodule:: lwr.grub
:members:
:undoc-members:
.. automodule:: lwr.isolinux
:members:
:undoc-members:
CD Filesystem Helpers
---------------------
.. automodule:: lwr.disk
:members:
:undoc-members:
ISO Creation Helpers
--------------------
.. automodule:: lwr.xorriso
:members:
:undoc-members:
Quickstart
==========
Super Fast Quickstart
---------------------
Building images with live-wrapper is quite simple. For the impatient:
.. code-block:: shell
sudo apt install live-wrapper
sudo lwr
This will build you a file named ``output.iso`` in the current directory
containing a minimal live-image.
.. warning::
Currently live-wrapper will create a lot of files and directories in the
current working directory. There is a TODO item to move these to a temporary
location and clean up afterwards, though this has not yet been fully
implemented. You may want to use an empty directory to run ``lwr`` in.
Customising the Image
---------------------
There are a number of supported command-line arguments that can be passed to
live-wrapper. These change the behaviour to create a customised image.
Changing the Distribution
~~~~~~~~~~~~~~~~~~~~~~~~~
By default, the ISO image will be built using the ``stretch`` distribution. If
you'd like to build using ``buster`` or ``sid`` you can pass the ``-d``
parameter to live-wrapper like so:
.. code-block:: shell
sudo lwr -d buster
.. note::
You must use the codename, and not the suite (e.g. stable), when specifying
the distribution.
Using an Alternative Mirror
~~~~~~~~~~~~~~~~~~~~~~~~~~~
By default, ``vmdebootstrap`` will use the mirror configured in your
``/etc/apt/sources.list``. If you have a faster mirror available, you may want
to change the mirror you're using to create the image. You can do this with the
``-m`` parameter:
.. code-block:: shell
sudo lwr -m http://localhost/debian/
You may also configure the mirror that will be configured *inside* the
image. This will be used for any extra packages that are specified,
and will also be the mirror that the image will use after the build is
complete. Change this with the ``--apt-mirror`` parameter:
.. code-block:: shell
sudo lwr -m http://localhost/debian/ --apt-mirror http://deb.debian.org/debian
By default this is set to ``http://deb.debian.org/debian``
Customising Packages
~~~~~~~~~~~~~~~~~~~~
There are several methods for specifying extra packages to be
installed into the live image:
* ``-t`` / ``--tasks`` should be used to give a list of **task**
packages to be included in the image. These will be installed as
part of the ``vmdebootstrap`` hook, so all their "Depends" and
"Recommends" will be installed too.
* ``-e`` / ``--extra`` allows for a list of extra non-task packages
to be installed, again with all their "Depends" and "Recommends"
included.
* ``-f`` / ``--firmware`` allows for a list of firmware packages to
be installed in the image, again with all their "Depends" and
"Recommends" included. **Also** each of these packages will be
downloaded and saved into the image so that an included installer
will automatically find them for installation. **BEWARE** that
using this option is likely to mean your image will include
non-free software. Check the licensing carefully before
distributing it.
For example:
.. code-block:: shell
sudo lwr -e vim -t science-typesetting
.. code-block:: shell
sudo lwr -e "emacs25 jed" -t live-task-xfce -f "firmware-iwlwifi firmware-realtek"
Finally, if you want to make a live image that will work as a
standalone source for installation you will need to specify a list of
"base" packages. This is the list of packages that will need to be
installed *after* the contents of the live image is copied to the new
system. This is essentially a list of bootloader packages and a few
utility packages that they use. Specify this list with the
``--base_debs`` parameter. For example, this is the list needed for
Debian Stretch on amd64:
.. code-block:: shell
sudo lwr --base_debs "eject pciutils usbutils \
keyboard-configuration console-setup \
grub-efi-amd64 grub-efi-amd64-bin grub-pc"
The customise script also has a part to play in this area, to ensure
that all the needed dependencies for these packages are also added to
the image.
Setting the Volume ID
---------------------
The Volume ID is the embedded label in the ISO image; this is what
will be displayed on the desktop when a DVD or USB flash drive
containing the image is inserted into a computer. The default is
``DEBIAN LIVE``, or you can change this using the ``--volume_id``
parameter. There is a 32-character limit for what can be specified
here. Example:
.. code-block:: shell
sudo lwr --volume_id "My live image"
Testing the Image with QEMU
---------------------------
You can easily test your created live images with QEMU.
.. warning:: You will need to increase the amount of memory available to
QEMU when running the live image. The image will crash if run
with the default memory limit.
To test the image using BIOS boot:
.. code-block:: shell
qemu-system-x86_64 -m 2G -cdrom live.iso
For EFI boot you will need to install the ``ovmf`` package and then run:
.. code-block:: shell
qemu-system-x86_64 -bios /usr/share/ovmf/OVMF.fd -m 2G -cdrom live.iso
To test with an emulated USB device, run:
.. code-block:: shell
qemu-system-x86_64 -m 2G -usbdevice disk:live.iso
To test the speech synthesis installer option, you will need to add the
following to the QEMU invocation:
.. code-block:: shell
-soundhw sb16,es1370,adlib
.. note::
Using -hda to attach the disk image will prevent the installer from detecting
the "CD-ROM" as this is not a removable device, it is an emulated attached hard
disk drive.
Next Steps
----------
To learn more about using live-wrapper, you can read the man page or check out
the :doc:`advanced` section of this documentation.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Advanced Topics &#8212; live-wrapper 0.7 documentation</title>
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: '0.7',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt'
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Developer Documentation" href="dev.html" />
<link rel="prev" title="Quickstart" href="quickstart.html" />
</head>
<body role="document">
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="dev.html" title="Developer Documentation"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="quickstart.html" title="Quickstart"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">live-wrapper 0.7 documentation</a> &#187;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="advanced-topics">
<h1>Advanced Topics<a class="headerlink" href="#advanced-topics" title="Permalink to this headline"></a></h1>
<div class="section" id="bootloader-customisation">
<h2>Bootloader Customisation<a class="headerlink" href="#bootloader-customisation" title="Permalink to this headline"></a></h2>
<p>By default, both ISOLINUX (for BIOS boot) and GRUB 2 (for EFI boot) are
installed into the images. A <code class="docutils literal"><span class="pre">loopback.cfg</span></code> file is also installed to allow
for the image to be booted while still an ISO image in a filesystem.</p>
<p>You can pass <code class="docutils literal"><span class="pre">--no-isolinux</span></code> to prevent the installation of ISOLINUX to the
image if you do not want ISOLINUX.</p>
<p>You can pass <code class="docutils literal"><span class="pre">--no-grub</span></code> to prevent the installation of GRUB to the image.</p>
<p>If you do not want GRUB installed but you would still like the <code class="docutils literal"><span class="pre">loopback.cfg</span></code>
file to be installed, you can pass <code class="docutils literal"><span class="pre">--grub-loopback-only</span></code>.</p>
</div>
<div class="section" id="using-an-alternative-build-directory">
<h2>Using an Alternative Build Directory<a class="headerlink" href="#using-an-alternative-build-directory" title="Permalink to this headline"></a></h2>
<p>Temporary directories are created using the Python standard library functions
for doing so. On Debian systems, this typically means that the directories are
created in <code class="docutils literal"><span class="pre">/tmp</span></code>. If this is problematic for you, perhaps due to filesystem
permissions, you can change the path that Python will use to create directories
in by using the <code class="docutils literal"><span class="pre">TMP</span></code> environment variable, for example:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">sudo</span> <span class="n">TMP</span><span class="o">=/</span><span class="n">other</span><span class="o">/</span><span class="n">path</span> <span class="n">lwr</span> <span class="o">--</span><span class="n">blah</span> <span class="o">--</span><span class="n">blah</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h3><a href="index.html">Table Of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">Advanced Topics</a><ul>
<li><a class="reference internal" href="#bootloader-customisation">Bootloader Customisation</a></li>
<li><a class="reference internal" href="#using-an-alternative-build-directory">Using an Alternative Build Directory</a></li>
</ul>
</li>
</ul>
<h4>Previous topic</h4>
<p class="topless"><a href="quickstart.html"
title="previous chapter">Quickstart</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="dev.html"
title="next chapter">Developer Documentation</a></p>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/advanced.rst.txt"
rel="nofollow">Show Source</a></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<div><input type="text" name="q" /></div>
<div><input type="submit" value="Go" /></div>
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="dev.html" title="Developer Documentation"
>next</a> |</li>
<li class="right" >
<a href="quickstart.html" title="Quickstart"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">live-wrapper 0.7 documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Iain R. Learmonth.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.5.6.
</div>
</body>
</html>
\ No newline at end of file
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Files: *
Copyright: (C) 2015 Iain R. Learmonth <irl@debian.org>
License: BSD-2-clause
License: BSD-2-clause
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
.
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
Files: yarns/*
Copyright: (c) 2015 Lars Wirzenius
(c) 2016 Neil Williams <codehelp@debian.org>
License: GPL-3.0+
License: GPL-3.0+
This package is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
.
On Debian systems, the complete text of the GNU General
Public License version 2 can be found in "/usr/share/common-licenses/GPL-3".
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Developer Documentation &#8212; live-wrapper 0.7 documentation</title>
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: '0.7',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt'
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Helper Documentation" href="lwr.html" />
<link rel="prev" title="Advanced Topics" href="advanced.html" />
</head>
<body role="document">
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="lwr.html" title="Helper Documentation"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="advanced.html" title="Advanced Topics"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">live-wrapper 0.7 documentation</a> &#187;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="developer-documentation">
<h1>Developer Documentation<a class="headerlink" href="#developer-documentation" title="Permalink to this headline"></a></h1>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="lwr.html">Helper Documentation</a><ul>
<li class="toctree-l2"><a class="reference internal" href="lwr.html#module-lwr.vm">Root Filesystem Helpers</a></li>
<li class="toctree-l2"><a class="reference internal" href="lwr.html#module-lwr.grub">Bootloader Helpers</a></li>
<li class="toctree-l2"><a class="reference internal" href="lwr.html#module-lwr.disk">CD Filesystem Helpers</a></li>
<li class="toctree-l2"><a class="reference internal" href="lwr.html#module-lwr.xorriso">ISO Creation Helpers</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h4>Previous topic</h4>
<p class="topless"><a href="advanced.html"
title="previous chapter">Advanced Topics</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="lwr.html"
title="next chapter">Helper Documentation</a></p>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/dev.rst.txt"
rel="nofollow">Show Source</a></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<div><input type="text" name="q" /></div>
<div><input type="submit" value="Go" /></div>
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="lwr.html" title="Helper Documentation"
>next</a> |</li>
<li class="right" >
<a href="advanced.html" title="Advanced Topics"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">live-wrapper 0.7 documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Iain R. Learmonth.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.5.6.
</div>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">