<?xml version="1.0" encoding="ISO-8859-1" ?>

<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->

<document>
  <properties>
    <title>Download Apache Archiva</title>
  </properties>
  <body>
    <section name="Download Apache Archiva ${archivaReleaseVersion}">
      <p>Archiva is distributed under the <a href="http://www.apache.org/licenses/">Apache License, version 2.0</a>.</p>
      <subsection name="System Requirements">
        <table>
          <tr>
            <td><b>JDK</b></td>
            <td>1.7 or above</td>
          </tr>
          <tr>
            <td><b>No minimum requirement</b></td>
            <td>The Archiva application is in itself about 50MB but will use more disk space to store repository contents</td>
          </tr>
          <tr>
            <td><b>Operating System</b></td>
            <td>Support for Linux, Mac OS, Solaris and Windows.  Tested on Windows XP SP2, Ubuntu Linux, and Mac OS X.</td>
          </tr>
        </table>
      </subsection>
      <a name="mirror"/>
      <subsection name="Mirror">

        <p>
          [if-any logo]
          <a href="[link]">
            <img align="right" src="[logo]" border="0"
                 alt="logo"/>
          </a>
          [end]
          The currently selected mirror is
          <b>[preferred]</b>.
          If you encounter a problem with this mirror,
          please select another mirror.
          If all mirrors are failing, there are
          <i>backup</i>
          mirrors
          (at the end of the mirrors list) that should be available.
        </p>

        <form action="[location]" method="get" id="SelectMirror" class="form-inline">
          Other mirrors:
          <select name="Preferred" class="input-xlarge">
            [if-any http]
            [for http]
            <option value="[http]">[http]</option>
            [end]
            [end]
            [if-any ftp]
            [for ftp]
            <option value="[ftp]">[ftp]</option>
            [end]
            [end]
            [if-any backup]
            [for backup]
            <option value="[backup]">[backup] (backup)</option>
            [end]
            [end]
          </select>
          <input type="submit" value="Change" class="btn"/>
        </form>

        <p>
          You may also consult the
          <a href="http://www.apache.org/mirrors/">complete list of
            mirrors.</a>
        </p>

      </subsection>
      <subsection name="Current Release: Archiva ${archivaReleaseVersion}">
        <p>
          This is the currently recommended version of Archiva.

          <ul>
            <li><a href="./docs/${archivaReleaseVersion}/release-notes.html">Release Notes</a></li>
            <li><a href="./known-issues.html">Known Issues and Errata</a></li>
              <li><a href="./security.html">Security Reports</a></li>
          </ul>
        </p>
        <p>
          <table>
            <thead>
              <tr>
                <th>Archiva ${archivaReleaseVersion} </th>
                <th>Mirrors</th>
                <th>Checksum</th>
                <th>Signature</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>Archiva ${archivaReleaseVersion} Standalone</td>
                <td><a href="[preferred]archiva/${archivaReleaseVersion}/binaries/apache-archiva-${archivaReleaseVersion}-bin.tar.gz">tar.gz</a></td>
                <td><a href="http://www.apache.org/dist/archiva/${archivaReleaseVersion}/binaries/apache-archiva-${archivaReleaseVersion}-bin.tar.gz.md5">md5</a></td>
                <td><a href="http://www.apache.org/dyn/closer.cgi/archiva/${archivaReleaseVersion}/binaries/apache-archiva-${archivaReleaseVersion}-bin.tar.gz.asc">asc</a></td>
              </tr>
              <tr>
                <td></td>
                <td><a href="[preferred]archiva/${archivaReleaseVersion}/binaries/apache-archiva-${archivaReleaseVersion}-bin.zip">zip</a></td>
                <td><a href="http://www.apache.org/dist/archiva/${archivaReleaseVersion}/binaries/apache-archiva-${archivaReleaseVersion}-bin.zip.md5">md5</a></td>
                <td><a href="http://www.apache.org/dist/archiva/${archivaReleaseVersion}/binaries/apache-archiva-${archivaReleaseVersion}-bin.zip.asc">asc</a></td>
              </tr>
              <tr>
                <td>Archiva ${archivaReleaseVersion} WAR</td>
                <td><a href="[preferred]archiva/${archivaReleaseVersion}/binaries/apache-archiva-${archivaReleaseVersion}.war">war</a></td>
                <td><a href="http://www.apache.org/dist/archiva/${archivaReleaseVersion}/binaries/apache-archiva-${archivaReleaseVersion}.war.md5">md5</a></td>
                <td><a href="http://www.apache.org/dist/archiva/${archivaReleaseVersion}/binaries/apache-archiva-${archivaReleaseVersion}.war.asc">asc</a></td>
              </tr>
              <tr>
                <td>Archiva ${archivaReleaseVersion} Sources</td>
                <td><a href="[preferred]archiva/${archivaReleaseVersion}/src/apache-archiva-${archivaReleaseVersion}-src.zip">source zip</a></td>
                <td><a href="http://www.apache.org/dist/archiva/${archivaReleaseVersion}/src/apache-archiva-${archivaReleaseVersion}-src.zip.md5">md5</a></td>
                <td><a href="http://www.apache.org/dist/archiva/${archivaReleaseVersion}/src/apache-archiva-${archivaReleaseVersion}-src.zip.asc">asc</a></td>
              </tr>
            </tbody>
          </table>
        </p>

      </subsection>

        #if ($archivaLastSerieVersion)
          <subsection name="Last Release series 1.3.x: Archiva ${archivaLastSerieVersion}">
            <p>
            This is the previous stable release of Archiva.
            <ul>
              <li><a href="./docs/${archivaLastSerieVersion}/release-notes.html">Release Notes</a></li>
              <li><a href="./known-issues.html">Known Issues and Errata</a></li>
              <li><a href="./security.html">Security Reports</a></li>
            </ul>
            </p>
            <p>
              <table>
                <thead>
                  <tr>
                    <th>Archiva ${archivaLastSerieVersion} </th>
                    <th>Mirrors</th>
                    <th>Checksum</th>
                    <th>Signature</th>
                  </tr>
                </thead>
                <tbody>
                  <tr>
                    <td>Archiva ${archivaLastSerieVersion} Standalone</td>
                    <td><a href="[preferred]archiva/${archivaLastSerieVersion}/binaries/apache-archiva-${archivaLastSerieVersion}.1-bin.tar.gz">tar.gz</a></td>
                    <td><a href="http://www.apache.org/dist/archiva/${archivaLastSerieVersion}/binaries/apache-archiva-${archivaLastSerieVersion}.1-bin.tar.gz.md5">md5</a></td>
                    <td><a href="http://www.apache.org/dist/archiva/${archivaLastSerieVersion}/binaries/apache-archiva-${archivaLastSerieVersion}.1-bin.tar.gz.asc">asc</a></td>
                  </tr>
                  <tr>
                    <td></td>
                    <td><a href="[preferred]archiva/${archivaLastSerieVersion}/binaries/apache-archiva-${archivaLastSerieVersion}.1-bin.zip">zip</a></td>
                    <td><a href="http://www.apache.org/dist/archiva/${archivaLastSerieVersion}/binaries/apache-archiva-${archivaLastSerieVersion}.1-bin.zip.md5">md5</a></td>
                    <td><a href="http://www.apache.org/dist/archiva/${archivaLastSerieVersion}/binaries/apache-archiva-${archivaLastSerieVersion}.1-bin.zip.asc">asc</a></td>
                  </tr>
                  <tr>
                    <td>Archiva ${archivaLastSerieVersion} WAR</td>
                    <td><a href="[preferred]archiva/${archivaLastSerieVersion}/binaries/apache-archiva-${archivaLastSerieVersion}.war">war</a></td>
                    <td><a href="http://www.apache.org/dist/archiva/${archivaLastSerieVersion}/binaries/apache-archiva-${archivaLastSerieVersion}.war.md5">md5</a></td>
                    <td><a href="http://www.apache.org/dist/archiva/${archivaLastSerieVersion}/binaries/apache-archiva-${archivaLastSerieVersion}.war.asc">asc</a></td>
                  </tr>
                  <tr>
                    <td>Archiva ${archivaLastSerieVersion} Sources</td>
                    <td><a href="[preferred]archiva/${archivaLastSerieVersion}/src/apache-archiva-${archivaLastSerieVersion}-src.zip">source zip</a></td>
                    <td><a href="http://www.apache.org/dist/archiva/${archivaLastSerieVersion}/src/apache-archiva-${archivaLastSerieVersion}-src.zip.md5">md5</a></td>
                    <td><a href="http://www.apache.org/dist/archiva/${archivaLastSerieVersion}/src/apache-archiva-${archivaLastSerieVersion}-src.zip.asc">asc</a></td>
                  </tr>
                </tbody>
              </table>
            </p>
          </subsection>

        #end

      <subsection name="Previous Versions">
        <p>
          More releases are available in the <a href="http://archive.apache.org/dist/archiva/">Apache Archiva Archives</a>
          or prior to the graduation from Maven, in the <a href="http://archive.apache.org/dist/maven/binaries/">Apache Maven Archives</a>.
        </p>
      </subsection>
      <subsection name="Verify the integrity of the files">
        <p>
          We recommend that you verify the integrity of the downloaded files using the PGP signatures and MD5 checksums.

          The PGP signatures can be verified using PGP or GPG. First download the <a href="http://www.apache.org/dist/archiva/KEYS">KEYS</a>
          as well as the asc signature file for the particular distribution. Make sure you get these files from
          <a href="http://www.apache.org/dist/archiva">the main distribution directory</a>,
          rather than from a mirror. <br/>
          Then verify the signatures using:
        </p>
          <pre>
          % pgpk -a KEYS
          % pgpv $filename.tar.gz.asc
          or
          % pgp -ka KEYS
          % pgp $filename.tar.gz.asc
          or
          % gpg --import KEYS
          % gpg --verify $filename.tar.gz.asc
          </pre>
        <p>
          You can also verify the MD5 signature on the files. A Unix program called md5 or md5sum is included in many
          Unix distributions. It is also available as part of <a href="http://www.gnu.org/software/coreutils/">GNU Coreutils</a>.
          Windows users can get binary md5 programs from <a href="http://www.fourmilab.ch/md5/">Fourmilab</a>,
          <a href="http://www.pc-tools.net/win32/md5sums">PC-Tools</a> or <a href="http://www.slavasoft.com/fsum/">SlavaSoft</a>
        </p>
      </subsection>
    </section>
  </body>
</document>
