diff options
| author | Dennis Camera <cdist@dtnr.ch> | 2021-03-17 13:03:09 +0100 |
|---|---|---|
| committer | Dennis Camera <cdist@dtnr.ch> | 2021-03-17 13:03:09 +0100 |
| commit | a542cc56be893979bb8806864d98ec4463c4825d (patch) | |
| tree | c5de2fec749175c80f69be39e907791012e15d83 | |
| parent | 1be82a30f82276e7eb9c581e0d8f0ec4e169289d (diff) | |
| parent | 7708e4d1f02163117eeedec37413f5d75944e4c5 (diff) | |
| download | __dtnrch_getssl-a542cc56be893979bb8806864d98ec4463c4825d.tar.gz __dtnrch_getssl-a542cc56be893979bb8806864d98ec4463c4825d.zip | |
Merge branch 'type/__dtnrch_getssl'
| -rw-r--r-- | type/__dtnrch_getssl/files/cksum.py | 100 | ||||
| -rw-r--r-- | type/__dtnrch_getssl/files/cksums.txt | 31 | ||||
| -rwxr-xr-x | type/__dtnrch_getssl/files/update_cksums.py | 96 | ||||
| -rw-r--r-- | type/__dtnrch_getssl/man.rst | 58 | ||||
| -rwxr-xr-x | type/__dtnrch_getssl/manifest | 87 | ||||
| -rw-r--r-- | type/__dtnrch_getssl/parameter/default/state | 1 | ||||
| -rw-r--r-- | type/__dtnrch_getssl/parameter/default/version | 1 | ||||
| -rw-r--r-- | type/__dtnrch_getssl/parameter/optional | 2 | ||||
| -rw-r--r-- | type/__dtnrch_getssl/singleton | 0 |
9 files changed, 376 insertions, 0 deletions
diff --git a/type/__dtnrch_getssl/files/cksum.py b/type/__dtnrch_getssl/files/cksum.py new file mode 100644 index 0000000..caa3b00 --- /dev/null +++ b/type/__dtnrch_getssl/files/cksum.py @@ -0,0 +1,100 @@ +import sys + +from functools import reduce + + +class Cksum: + __slots__ = ("_cksum", "_size") + + CRCTAB = ( + 0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b, + 0x1a864db2, 0x1e475005, 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61, + 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd, 0x4c11db70, 0x48d0c6c7, + 0x4593e01e, 0x4152fda9, 0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75, + 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011, 0x791d4014, 0x7ddc5da3, + 0x709f7b7a, 0x745e66cd, 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039, + 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, 0xbe2b5b58, 0xbaea46ef, + 0xb7a96036, 0xb3687d81, 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d, + 0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49, 0xc7361b4c, 0xc3f706fb, + 0xceb42022, 0xca753d95, 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, + 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, 0x34867077, 0x30476dc0, + 0x3d044b19, 0x39c556ae, 0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072, + 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16, 0x018aeb13, 0x054bf6a4, + 0x0808d07d, 0x0cc9cdca, 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde, + 0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02, 0x5e9f46bf, 0x5a5e5b08, + 0x571d7dd1, 0x53dc6066, 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba, + 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, 0xbfa1b04b, 0xbb60adfc, + 0xb6238b25, 0xb2e29692, 0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6, + 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a, 0xe0b41de7, 0xe4750050, + 0xe9362689, 0xedf73b3e, 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2, + 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686, 0xd5b88683, 0xd1799b34, + 0xdc3abded, 0xd8fba05a, 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637, + 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb, 0x4f040d56, 0x4bc510e1, + 0x46863638, 0x42472b8f, 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53, + 0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47, 0x36194d42, 0x32d850f5, + 0x3f9b762c, 0x3b5a6b9b, 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff, + 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, 0xf12f560e, 0xf5ee4bb9, + 0xf8ad6d60, 0xfc6c70d7, 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b, + 0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f, 0xc423cd6a, 0xc0e2d0dd, + 0xcda1f604, 0xc960ebb3, 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, + 0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, 0x9b3660c6, 0x9ff77d71, + 0x92b45ba8, 0x9675461f, 0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3, + 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640, 0x4e8ee645, 0x4a4ffbf2, + 0x470cdd2b, 0x43cdc09c, 0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8, + 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24, 0x119b4be9, 0x155a565e, + 0x18197087, 0x1cd86d30, 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec, + 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, 0x2497d08d, 0x2056cd3a, + 0x2d15ebe3, 0x29d4f654, 0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0, + 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c, 0xe3a1cbc1, 0xe760d676, + 0xea23f0af, 0xeee2ed18, 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4, + 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0, 0x9abc8bd5, 0x9e7d9662, + 0x933eb0bb, 0x97ffad0c, 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668, + 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4) + + @staticmethod + def __uint32(n): + return n & 0xffffffff + + def __init__(self): + self._cksum = 0 + self._size = 0 + + def update(self, b): + self._cksum = reduce( + lambda s, c: self.__uint32(s<<8) ^ self.CRCTAB[(s>>24)^c], # ord(c)?? + b, self._cksum) + self._size += len(b) + + def cksum(self): + s, n = self._cksum, self._size + while n: + s = self.__uint32(s << 8) ^ self.CRCTAB[(s >> 24) ^ (n & 0xFF)] + n >>= 8 + return self.__uint32(~s) + + def size(self): + return self._size + + +def process_fd(fd, path): + c = Cksum() + while True: + data = fd.read(4096) + if not data: + break + c.update(data) + + if path: + sys.stdout.write("%d %d %s\n" % (c.cksum(), c.size(), path)) + else: + sys.stdout.write("%d %d\n" % (c.cksum(), c.size())) + + +if __name__ == "__main__": + for path in sys.argv[1:] or [""]: + if path == "-" or not path: + process_fd(sys.stdin, path) + else: + f = open(path, "rb") + process_fd(f, path) + f.close() diff --git a/type/__dtnrch_getssl/files/cksums.txt b/type/__dtnrch_getssl/files/cksums.txt new file mode 100644 index 0000000..e72fc96 --- /dev/null +++ b/type/__dtnrch_getssl/files/cksums.txt @@ -0,0 +1,31 @@ +# tag sha256sum cksum #octets +v1.0 342738cd6e31075faaf90bbfc5f4b28270a2e71ececd62011afcd4503b23b194 1298128142 43300 +v1.84 efaa0258ce7b1ce98143b90222d7bcff946f63ab20f0990e4ce1af0ae55be5fe 4246272524 73968 +v1.85 235edecabff3d872f8a01b6fa8e4012d59b360c4c8b0a1439f13e0582d922f45 1006972390 74270 +v1.87 1e08dfe3c16ccd88b909b568f5dce1558e936fc2e0b7ada7b63aee2a4fd53b5e 1100070227 75431 +v1.92 f4d497e8353092879de7f9453eea2944eff132e577d1aa6bd5b43af6d9951778 2673050928 77093 +v2.00 265efa21b350996d5dc67fbee0c3c92f55e4d8dd22ed9828634964bd2d0501dd 4042445164 77620 +v2.03 4e130c9406f4cf1943b7731d8d7b276009f7050147ae77f4bdb54fe614ef7fe1 1652617783 80255 +v2.09 61d77e8d33915ac4026033091600628991463b55aadf367d8408efb933d4d613 2578987232 84767 +v2.10 d46df3c9bdc44d3937660770fc2c289d5b5950a84ab5e72c370a8d3f2ea72afa 3235659078 85116 +v2.11 207af7378c990dd7c7670bf63d451eff058627c38788bbe5bc36c9997e9a1f4b 118512755 85297 +v2.12 9f17dc25b0399b86bdc8a57941e9623aa712af674e806efec75a8c96b7f8963a 76495664 85400 +v2.13 bb5d57808f33d959e426d9263509969a5a7131e50451f87c7f53ae18c389e912 1987028142 85481 +v2.14 9a900bd23f717c15393fae277fb3867d25f14487b337151b6cc99783dbfa4f12 3502431209 97673 +v2.16 852a4fda7492014f351c506d9a245741a8f48aff9e106a78ae3fd54b262f0e7f 2440520339 99004 +v2.17 ab082e306a7b4fd6b493a2a5fb757dc9aebef63ce0c67f47b502fda1bc62f5c4 2654028945 101406 +v2.18 507f03e3d68827c046f87abe08c614a63428f7636ff38463e0f62b379529a779 1506669166 103325 +v2.19 8856e6fe7146419c1a53da0d59b87b2c973717b0110078c7c9250aa04a306c62 762083183 103401 +v2.20 545d2a818c509c8e0a40b7a2761823c82527034c91233295482f12f0be83ad90 1701777419 104006 +v2.21 bbc4240f9f3dcd3dce3a69e3980a5ae49572c4d017d8ac36712c7d5c4e15404f 3796053050 106784 +v2.22 7e73e54b11c131e805c6e55b05605d09c4808df37203cc946617c1dda03f83a7 4163280293 107333 +v2.24 df1ffdcfa8034a422d5289c959f185638a1907d2b9eefc771196416d182b6ac9 2420335029 108669 +v2.26 d04b597e97506a9145a3c5c4f24502a2f9deff601adaf2df344c49d68f218b6e 224152343 108785 +v2.27 140615fca20e66a985db9e34b517cfb644713eb35e131e250a157ab55a4fd842 2343364619 109164 +v2.28 61833590bcf7948f1df29c5bbf19c4ea000c81cabc9aeb82a5192ca4dc594139 1175685050 110776 +2.29 140af06cea87f0e1932115753d029a41602886cdc8238c3c37875bd6c3855e74 3835215315 110967 +v2.30 b17134a41c92c89ee645ccafcd54a1752cfdaa7e01b1ffed0c14bc6d6a4bbd42 673895873 112739 +v2.31 3bd2216ca6080690151ff1a5688416cc714b4a5815a4bb4e28f8d8cead83a815 3219258588 117106 +v2.32 8faf6caca9771d072b98364af6cad9eab7fdf7604eca22da4ef88da338f8caba 3856212121 118318 +v2.33 a70cf78e830ef8bf8db4cb5ffebb81cd45810bcaee2b690a5a17eff5f2eb8041 2610311015 118387 +v2.34 a36a7fde26c3b33239a8569fc457d964b4d5d711945d5cdedaf233cb2730b182 305285124 120733 diff --git a/type/__dtnrch_getssl/files/update_cksums.py b/type/__dtnrch_getssl/files/update_cksums.py new file mode 100755 index 0000000..c578b63 --- /dev/null +++ b/type/__dtnrch_getssl/files/update_cksums.py @@ -0,0 +1,96 @@ +#!/usr/bin/env python3 + +import collections +import hashlib +import json +import re +import sys +import urllib.request + +from cksum import Cksum + +GITHUB_REPO = "https://github.com/srvrco/getssl" + +class CksumLine(collections.namedtuple("CksumLine", ( + "tag_name", "sha256", "cksum"))): + __slots__ = () + + @classmethod + def from_line(cls, line): + cols = line.rstrip("\r\n").split("\t") + return cls(*cols) + + def to_line(self): + return "\t".join(getattr(self, k, "") or "" for k in self._fields) + + +def extract_github_repo_path(repo_url): + return re.sub(r"^.*github\.com", "", repo_url, flags=re.ASCII) + + +def fetch_github_releases(repo_url): + repo_path = extract_github_repo_path(repo_url) + releases_url = "https://api.github.com/repos%s/releases" % (repo_path) + page = 0 + releases = [] + while True: + page += 1 + with urllib.request.urlopen(urllib.request.Request( + "%s?per_page=10&page=%u" % (releases_url, page), + headers={ + "Accept": "application/vnd.github.v3+json", + })) as resp: + rlist = json.loads(resp.read().decode()) + if not rlist: + break + releases += rlist + return releases + + +def github_file_url(repo_url, ref, path): + return "https://raw.githubusercontent.com%s/%s%s" % ( + extract_github_repo_path(repo_url), ref, path) + + +def perform_hash(algo, contents): + if algo == "cksum": + c = Cksum() + c.update(contents) + return "%d %u" % (c.cksum(), c.size()) + else: + return getattr(hashlib, algo)(contents).hexdigest() + + +def checksum_url(url): + with urllib.request.urlopen(url) as f: + contents = f.read() + return { + algo: perform_hash(algo, contents) + for algo in ("sha256", "cksum") + } + + +if __name__ == "__main__": + with open(sys.argv[1], "r+") as f: + cksums = {} + for line in filter(lambda l: l and not re.match(r"^#", l), f): + cksum = CksumLine.from_line(line) + if cksum.tag_name in cksums: + raise RuntimeError( + "Duplicate tag in cksums.txt: %s" % (cksum.tag_name)) + cksums[cksum.tag_name] = cksum + + for release in sorted( + fetch_github_releases(GITHUB_REPO), + key=lambda r: r["published_at"]): + tag_name = release["tag_name"] + if tag_name in cksums: + continue + + getssl_bin_url = github_file_url(GITHUB_REPO, tag_name, "/getssl") + checksums = checksum_url(getssl_bin_url) + + cksum = CksumLine(tag_name, **checksums) + + # Append cksum to file + f.write(cksum.to_line() + "\n") diff --git a/type/__dtnrch_getssl/man.rst b/type/__dtnrch_getssl/man.rst new file mode 100644 index 0000000..2414a68 --- /dev/null +++ b/type/__dtnrch_getssl/man.rst @@ -0,0 +1,58 @@ +cdist-type__dtnrch_getssl(7) +============================ + +NAME +---- +cdist-type__dtnrch_getssl - Set up getssl. + + +DESCRIPTION +----------- +This space intentionally left blank. + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +state + Whether getssl should be installed (``present``) on the target or not + (``absent``). +version + The version of getssl to install on the target. + Or ``latest`` to use the latest version. + + +BOOLEAN PARAMETERS +------------------ +None. + + +EXAMPLES +-------- + +.. code-block:: sh + + # Ensure the latest version of getssl is installed + __dtnrch_getssl --version latest + + +SEE ALSO +-------- +None. + + +AUTHORS +------- +Dennis Camera <cdist--@--dtnr.ch> + + +COPYING +------- +Copyright \(C) 2020 Dennis Camera. 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. diff --git a/type/__dtnrch_getssl/manifest b/type/__dtnrch_getssl/manifest new file mode 100755 index 0000000..c2a0db4 --- /dev/null +++ b/type/__dtnrch_getssl/manifest @@ -0,0 +1,87 @@ +#!/bin/sh -e +# +# 2020 Dennis Camera (cdist at dtnr.ch) +# +# This file is part of cdist. +# +# cdist 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. +# +# cdist 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 cdist. If not, see <http://www.gnu.org/licenses/>. +# + +os=$(cat "${__global:?}/explorer/os") + +DEST=/usr/local/bin + +state_should=$(cat "${__object:?}/parameter/state") + +case ${state_should} +in + (present) + case ${os} + in + (alpine) + pkg_list='bash curl drill openssl' ;; + (debian|devuan|ubuntu) + pkg_list='bash curl dnsutils openssl' ;; + (freebsd) + pkg_list='bash curl' ;; + (openwrt) + pkg_list='bash curl openssl-util' ;; + (*) + pkg_list='bash curl openssl' ;; + esac + + for pkg in ${pkg_list} + do + __package "${pkg}" --state present + require=${require:-}${require:+ }__package/${pkg} + done + export require + + __directory "${DEST}" --state present --parents + require=${require:-}${require:+ }__directory/${DEST} + ;; + (absent) + : + ;; + (*) + printf 'Invalid --state: %s\n' "${state_should}" >&2 + exit 1 + ;; +esac + +# shellcheck disable=SC2034 +IFS=' ' read -r tag_name sha256_should cksum_should <<EOF +$( + version_should=$(cat "${__object:?}/parameter/version") + case ${version_should} + in + (latest) + tail -n 1 "${__type:?}/files/cksums.txt" + ;; + (*) + awk -F '\t' -v vers="${version_should}" 'index($1, vers) == ($1 ~ /^v/) + 1' "${__type:?}/files/cksums.txt" + ;; + esac +) +EOF + +__staged_file "${DEST}/getssl" --state "${state_should}" \ + --owner 0 --mode 0755 \ + --source "https://raw.githubusercontent.com/srvrco/getssl/${tag_name}/getssl" \ + --cksum "${cksum_should}" + +__directory '/etc/getssl' --state "${state_should}" --owner 0 --mode 0750 + +__cron 'getssl' --state "${state_should}" --user 0 --hour 1 --minute 0 \ + --command 'getssl -a -q -U' diff --git a/type/__dtnrch_getssl/parameter/default/state b/type/__dtnrch_getssl/parameter/default/state new file mode 100644 index 0000000..e7f6134 --- /dev/null +++ b/type/__dtnrch_getssl/parameter/default/state @@ -0,0 +1 @@ +present diff --git a/type/__dtnrch_getssl/parameter/default/version b/type/__dtnrch_getssl/parameter/default/version new file mode 100644 index 0000000..a0f9a4b --- /dev/null +++ b/type/__dtnrch_getssl/parameter/default/version @@ -0,0 +1 @@ +latest diff --git a/type/__dtnrch_getssl/parameter/optional b/type/__dtnrch_getssl/parameter/optional new file mode 100644 index 0000000..4d595ed --- /dev/null +++ b/type/__dtnrch_getssl/parameter/optional @@ -0,0 +1,2 @@ +state +version diff --git a/type/__dtnrch_getssl/singleton b/type/__dtnrch_getssl/singleton new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/type/__dtnrch_getssl/singleton |
