如何获得始终最新的链接以使用Shell下载tomcat服务器

时间:2018-07-10 06:49:12

标签: shell tomcat

我已经编写了一个Shell脚本来下载和安装tomcat服务器 v(8.5.31)wget http://www.us.apache.org/dist/tomcat/tomcat-8/v8.5.31/bin/apache-tomcat-8.5.31.tar.gz正常运行,但是版本更改为9.0.10后,它开始出现错误,因为未找到 404 。 因此,我应该怎么做才能始终获得最新版本。

3 个答案:

答案 0 :(得分:0)

我找到了使用官方github镜像的方法。 基本上,必须向github api查询所有可用标签。 然后,对于每个标签,必须确定日期。 最后,带有最新日期的标签就是最新标签!

尝试使用此脚本-我们称其为25px。它取决于jq。执行需要一些时间,但是应该显示最新标签的压缩包的URL(当前:https://api.github.com/repos/apache/tomcat/tarball/TOMCAT_9_0_10

rowHeight

用法:

latest-tag

您可能会因为github api的速率限制而受阻。 因此,您可能需要为脚本提供github凭据:

#!/bin/bash
# Prints the url to the latest tag of given github repo
# $1: repo (e.g.: apache/tomcat )
# $2: optional github credentials. Credentials are needed if running into the api rate limit (e.g.: <user>|<user>:<authkey>)

repo=${1:?Missing parameter: repo (e.g.: apache/tomcat )}
[ -n "$2" ] && credentials="-u $2"
declare -a commits
declare -a tarball_urls
while IFS=, read commit_url tarball_url
do 
    date=$(curl $credentials --silent "$commit_url" | jq -r ".commit.author.date")
    if [[ "$date" > ${latest_date:- } ]]
    then
        latest_date=$date
        latest_tarball_url=$tarball_url
    fi
done < <( curl $credentials --silent "https://api.github.com/repos/$repo/tags" | jq -r ".[] | [.commit.url, .tarball_url] | @csv" | tr -d \")

echo $latest_tarball_url

这将要求您输入github密码。为了以交互方式运行它,您可以为脚本提供个人的github api token

./latest-tag apache/tomcat

答案 1 :(得分:0)

TL; DR

TOMCAT_VER=`curl --silent http://mirror.vorboss.net/apache/tomcat/tomcat-8/ | grep v8 | awk '{split($5,c,">v") ; split(c[2],d,"/") ; print d[1]}'`
wget -N http://mirror.vorboss.net/apache/tomcat/tomcat-8/v${TOMCAT_VER}/bin/apache-tomcat-${TOMCAT_VER}.tar.gz

我遇到了同样的挑战。 但是对于我的解决方案,我需要不断变化的最新8.5.x Tomcat版本。

由于下载Tomcat的URL保持不变,仅更改了版本,因此我发现以下解决方案适用于我:

TOMCAT_VER=`curl --silent http://mirror.vorboss.net/apache/tomcat/tomcat-8/ | grep v8 | awk '{split($5,c,">v") ; split(c[2],d,"/") ; print d[1]}'`
echo Tomcat version: $TOMCAT_VER
Tomcat version: 8.5.40

grep v8-返回具有所需版本的行:

<img src="/icons/folder.gif" alt="[DIR]"> <a href="v8.5.40/">v8.5.40/</a>                2019-04-12 13:16    - 

awk '{split($5,c,">v") ; split(c[2],d,"/") ; print d[1]}'-提取所需的版本:

8.5.40

然后我使用提取的版本继续下载Tomcat:

wget -N http://mirror.vorboss.net/apache/tomcat/tomcat-8/v${TOMCAT_VER}/bin/apache-tomcat-${TOMCAT_VER}.tar.gz

这是完整的curl响应,可以使用curl,grep和awk从中提取版本:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
 <head>
  <title>Index of /apache/tomcat/tomcat-8</title>
 </head>
 <body>
<h1>Index of /apache/tomcat/tomcat-8</h1>
<pre><img src="/icons/blank.gif" alt="Icon "> <a href="?C=N;O=D">Name</a>                    <a href="?C=M;O=A">Last modified</a>      <a href="?C=S;O=A">Size</a>  <a href="?C=D;O=A">Description</a><hr><img src="/icons/back.gif" alt="[PARENTDIR]"> <a href="/apache/tomcat/">Parent Directory</a>                             -   
<img src="/icons/folder.gif" alt="[DIR]"> <a href="v8.5.40/">v8.5.40/</a>                2019-04-12 13:16    -   
<hr></pre>
<address>Apache/2.4.25 (Debian) Server at mirror.vorboss.net Port 80</address>
</body></html>

答案 2 :(得分:0)

免责声明-此解决方案使用屏幕抓取功能

找到并下载适用于Linux或Windows-x64的Apache Tomcat 9的最新版本。
使用Python 3.7.3

import os
import urllib.request

url_ends_with = ".tar.gz\""         # Use line for Non-Windows
url_ends_with = "windows-x64.zip\"" # Use line for Windows-x64

url_starts_with = "\"http"
dir_to_contain_download = "tmp/"
tomcat_apache_org_frontpage_html = "tomcat.apache.org.frontpage.html"
download_page = "https://tomcat.apache.org/download-90.cgi"

try:
    if not os.path.exists(dir_to_contain_download):
        os.makedirs(dir_to_contain_download, exist_ok=True)

    htmlfile = urllib.request.urlretrieve(download_page, dir_to_contain_download + tomcat_apache_org_frontpage_html)
    fp = open(dir_to_contain_download + tomcat_apache_org_frontpage_html)
    line = fp.readline()
    cnt = 1
    while line:
        line = fp.readline()
        cnt += 1
        if url_ends_with in line and url_starts_with in line:
            tomcat_url_index = line.find(url_ends_with)
            tomcat_url = line[line.find(url_starts_with) + 1 : tomcat_url_index + len(url_ends_with) - 1]
            print ("Downloading: " +  tomcat_url)
            print ("To file: " + dir_to_contain_download + tomcat_url[tomcat_url.rfind("/")+1:])
            zipfile = urllib.request.urlretrieve(tomcat_url, dir_to_contain_download + tomcat_url[tomcat_url.rfind("/")+1:])
            break
finally:
    fp.close()
    os.remove(dir_to_contain_download + "/" + tomcat_apache_org_frontpage_html)