<?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>File-Type</th>
                <th>MD5 Checksum</th>
                <th>SHA1 Checksum</th>
                <th>SHA256 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/dist/archiva/${archivaReleaseVersion}/binaries/apache-archiva-${archivaReleaseVersion}-bin.tar.gz.sha1">sha1</a></td>
                <td><a href="http://www.apache.org/dist/archiva/${archivaReleaseVersion}/binaries/apache-archiva-${archivaReleaseVersion}-bin.tar.gz.sha256">sha256</a></td>
                <td><a href="http://www.apache.org/dist/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.sha1">sha1</a></td>
                <td><a href="http://www.apache.org/dist/archiva/${archivaReleaseVersion}/binaries/apache-archiva-${archivaReleaseVersion}-bin.zip.sha256">sha256</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.sha1">sha1</a></td>
                <td><a href="http://www.apache.org/dist/archiva/${archivaReleaseVersion}/binaries/apache-archiva-${archivaReleaseVersion}.war.sha256">sha256</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.sha1">sha1</a></td>
                <td><a href="http://www.apache.org/dist/archiva/${archivaReleaseVersion}/src/apache-archiva-${archivaReleaseVersion}-src.zip.sha256">sha256</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 SHA, 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>
          Please use the SHA checksum for verification if available, use MD5 only for the older versions, that have no SHA checksum available.
          To verify the SHA signature on the files, you can use utilities for your platform. A Unix program called sha1sum or sha256sum (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 checksum utility e.g. from <a href="http://www.slavasoft.com/hashcalc/">SlavaSoft</a>.
        </p>
      </subsection>
    </section>
  </body>
</document>
