forked from ungleich-public/cdist
[__unpack] no mkdir by default, because destination can be file, but tar needs mkdir andrar needs slash at the end
This commit is contained in:
parent
fdef468f1a
commit
73f1937636
10 changed files with 306 additions and 0 deletions
37
cdist/conf/type/__unpack/explorer/state
Executable file
37
cdist/conf/type/__unpack/explorer/state
Executable file
|
@ -0,0 +1,37 @@
|
||||||
|
#!/bin/sh -e
|
||||||
|
|
||||||
|
src="/$__object_id"
|
||||||
|
|
||||||
|
if [ -f "$__object/parameter/sum-file" ]
|
||||||
|
then
|
||||||
|
src_sum_was_file="$( cat "$__object/parameter/sum-file" )"
|
||||||
|
else
|
||||||
|
src_sum_was_file="$src.cdist__unpack_sum"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f "$src" ]
|
||||||
|
then
|
||||||
|
if [ -n "$__cdist_dry_run" ]
|
||||||
|
then
|
||||||
|
echo 'mismatch'
|
||||||
|
else
|
||||||
|
echo 'missing'
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if [ ! -f "$src_sum_was_file" ]
|
||||||
|
then
|
||||||
|
echo 'mismatch'
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
src_sum_was="$( cat "$src_sum_was_file" )"
|
||||||
|
|
||||||
|
src_sum_is="$( cksum "$src" | awk '{ print $1$2 }' )"
|
||||||
|
|
||||||
|
if [ "$src_sum_was" = "$src_sum_is" ]
|
||||||
|
then
|
||||||
|
echo 'match'
|
||||||
|
else
|
||||||
|
echo 'mismatch'
|
||||||
|
fi
|
||||||
|
fi
|
75
cdist/conf/type/__unpack/gencode-remote
Executable file
75
cdist/conf/type/__unpack/gencode-remote
Executable file
|
@ -0,0 +1,75 @@
|
||||||
|
#!/bin/sh -e
|
||||||
|
|
||||||
|
if grep -Eq '^(missing|match)$' "$__object/explorer/state"
|
||||||
|
then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
os="$( cat "$__global/explorer/os" )"
|
||||||
|
|
||||||
|
src="/$__object_id"
|
||||||
|
|
||||||
|
dst="$( sed 's/\/$//' "$__object/parameter/destination" )"
|
||||||
|
|
||||||
|
cmd=''
|
||||||
|
|
||||||
|
case "$src" in
|
||||||
|
*.tar|*.tgz|*.tar.*)
|
||||||
|
cmd="mkdir -p '$dst' && tar --directory='$dst' --extract --file='$src'"
|
||||||
|
|
||||||
|
if [ -f "$__object/parameter/tar-strip" ]
|
||||||
|
then
|
||||||
|
tar_strip="$( cat "$__object/parameter/tar-strip" )"
|
||||||
|
|
||||||
|
cmd="$cmd --strip-components=$tar_strip"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*.7z)
|
||||||
|
case "$os" in
|
||||||
|
centos|fedora|redhat)
|
||||||
|
cmd='7za'
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
cmd='7zr'
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
cmd="$cmd e -aoa -o'$dst' '$src'"
|
||||||
|
;;
|
||||||
|
*.bz2)
|
||||||
|
cmd="bunzip2 --stdout '$src' > '$dst'"
|
||||||
|
;;
|
||||||
|
*.gz)
|
||||||
|
cmd="gunzip --stdout '$src' > '$dst'"
|
||||||
|
;;
|
||||||
|
*.lzma|*.xz)
|
||||||
|
cmd="xz --uncompress --stdout '$src' > '$dst'"
|
||||||
|
;;
|
||||||
|
*.rar)
|
||||||
|
cmd="unrar x -o+ '$src' '$dst/'"
|
||||||
|
;;
|
||||||
|
*.zip)
|
||||||
|
cmd="unzip -o '$src' -d '$dst'"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -f "$__object/parameter/backup-destination" ]
|
||||||
|
then
|
||||||
|
echo "if [ -e '$dst' ]; then mv '$dst' '$dst.cdist__unpack_backup_$( date +%s )'; fi"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$cmd"
|
||||||
|
|
||||||
|
if [ -f "$__object/parameter/sum-file" ]
|
||||||
|
then
|
||||||
|
sum_file="$( cat "$__object/parameter/sum-file" )"
|
||||||
|
else
|
||||||
|
sum_file="$src.cdist__unpack_sum"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "cksum '$src' | awk '{ print \$1\$2 }' > '$sum_file'"
|
||||||
|
|
||||||
|
if [ ! -f "$__object/parameter/preserve-archive" ]
|
||||||
|
then
|
||||||
|
echo "rm -f '$src'"
|
||||||
|
fi
|
79
cdist/conf/type/__unpack/man.rst
Normal file
79
cdist/conf/type/__unpack/man.rst
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
cdist-type__unpack(7)
|
||||||
|
=====================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
cdist-type__unpack - Unpack archives
|
||||||
|
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Unpack ``.tar``, ``.tgz``, ``.tar.*``, ``.7z``, ``.bz2``, ``.gz``,
|
||||||
|
``.lzma``, ``.xz``, ``.rar`` and ``.zip`` archives. Archive type is
|
||||||
|
detected by extension.
|
||||||
|
|
||||||
|
To achieve idempotency, checksum file will be created in target. See
|
||||||
|
``--sum-file`` parameter for details.
|
||||||
|
|
||||||
|
|
||||||
|
REQUIRED PARAMETERS
|
||||||
|
-------------------
|
||||||
|
destination
|
||||||
|
Depending on archive format file or directory to where archive
|
||||||
|
contents will be written.
|
||||||
|
|
||||||
|
|
||||||
|
OPTIONAL PARAMETERS
|
||||||
|
-------------------
|
||||||
|
sum-file
|
||||||
|
Override archive's checksum file in target. By default
|
||||||
|
``XXX.cdist__unpack_sum`` will be used, where ``XXX`` is source
|
||||||
|
archive path. This file must be kept in target's persistent storage.
|
||||||
|
|
||||||
|
tar-strip
|
||||||
|
Tarball specific. See ``man tar`` for ``--strip-components``.
|
||||||
|
|
||||||
|
|
||||||
|
OPTIONAL BOOLEAN PARAMETERS
|
||||||
|
---------------------------
|
||||||
|
backup-destination
|
||||||
|
By default destination file will be overwritten. In case destination
|
||||||
|
is directory, files from archive will be added to or overwritten in
|
||||||
|
directory. This parameter moves existing destination to
|
||||||
|
``XXX.cdist__unpack_backup_YYY``, where ``XXX`` is destination and
|
||||||
|
``YYY`` current UNIX timestamp.
|
||||||
|
|
||||||
|
preserve-archive
|
||||||
|
Don't delete archive after unpacking.
|
||||||
|
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
.. code-block:: sh
|
||||||
|
|
||||||
|
__directory /opt/cpma
|
||||||
|
|
||||||
|
require='__directory/opt/cpma' \
|
||||||
|
__download /opt/cpma/cnq3.zip \
|
||||||
|
--url https://cdn.playmorepromode.com/files/cnq3/cnq3-1.51.zip \
|
||||||
|
--sum md5:46da3021ca9eace277115ec9106c5b46
|
||||||
|
|
||||||
|
require='__download/opt/cpma/cnq3.zip' \
|
||||||
|
__unpack /opt/cpma/cnq3.zip \
|
||||||
|
--backup-destination \
|
||||||
|
--preserve-archive \
|
||||||
|
--destination /opt/cpma/server
|
||||||
|
|
||||||
|
|
||||||
|
AUTHORS
|
||||||
|
-------
|
||||||
|
Ander Punnar <ander-at-kvlt-dot-ee>
|
||||||
|
|
||||||
|
|
||||||
|
COPYING
|
||||||
|
-------
|
||||||
|
Copyright \(C) 2020 Ander Punnar. 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.
|
41
cdist/conf/type/__unpack/manifest
Executable file
41
cdist/conf/type/__unpack/manifest
Executable file
|
@ -0,0 +1,41 @@
|
||||||
|
#!/bin/sh -e
|
||||||
|
|
||||||
|
os="$( cat "$__global/explorer/os" )"
|
||||||
|
|
||||||
|
src="/$__object_id"
|
||||||
|
|
||||||
|
case "$src" in
|
||||||
|
*.7z)
|
||||||
|
__package p7zip
|
||||||
|
;;
|
||||||
|
*.bz2)
|
||||||
|
case "$os" in
|
||||||
|
freebsd)
|
||||||
|
# bzip2 is part of freebsd base system
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
__package bzip2
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
*.lzma|*.xz|*.txz)
|
||||||
|
case "$os" in
|
||||||
|
debian|ubuntu|devuan)
|
||||||
|
__package xz-utils
|
||||||
|
;;
|
||||||
|
alpine|centos)
|
||||||
|
__package xz
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
*.rar)
|
||||||
|
case "$os" in
|
||||||
|
debian|ubuntu|devuan|alpine|freebsd)
|
||||||
|
__package unrar
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
*.zip)
|
||||||
|
__package unzip
|
||||||
|
;;
|
||||||
|
esac
|
2
cdist/conf/type/__unpack/parameter/boolean
Normal file
2
cdist/conf/type/__unpack/parameter/boolean
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
backup-destination
|
||||||
|
preserve-archive
|
2
cdist/conf/type/__unpack/parameter/optional
Normal file
2
cdist/conf/type/__unpack/parameter/optional
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
sum-file
|
||||||
|
tar-strip
|
1
cdist/conf/type/__unpack/parameter/required
Normal file
1
cdist/conf/type/__unpack/parameter/required
Normal file
|
@ -0,0 +1 @@
|
||||||
|
destination
|
3
cdist/conf/type/__unpack/test/README
Normal file
3
cdist/conf/type/__unpack/test/README
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
./make-test-files.sh
|
||||||
|
./make-init-manifest.sh | cdist config -i - localhost
|
||||||
|
sudo find /tmp/cdist__unpack_test/ -type f -exec cat {} \; | sort
|
22
cdist/conf/type/__unpack/test/make-init-manifest.sh
Executable file
22
cdist/conf/type/__unpack/test/make-init-manifest.sh
Executable file
|
@ -0,0 +1,22 @@
|
||||||
|
#!/bin/sh -e
|
||||||
|
|
||||||
|
p="$( pwd )"
|
||||||
|
d=/tmp/cdist__unpack_test
|
||||||
|
|
||||||
|
echo 'export CDIST_ORDER_DEPENDENCY=1'
|
||||||
|
|
||||||
|
echo "__directory $d"
|
||||||
|
|
||||||
|
find "$p" -name 'test.*' -and -not -name '*.cdist__unpack_sum' \
|
||||||
|
| sort \
|
||||||
|
| while read -r l
|
||||||
|
do
|
||||||
|
n="$( basename "$l" )"
|
||||||
|
|
||||||
|
printf '__unpack %s --destination %s/%s\n' \
|
||||||
|
"$l" \
|
||||||
|
"$d" \
|
||||||
|
"$n"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "__clean_path $p --pattern '.+/test\..+'"
|
44
cdist/conf/type/__unpack/test/make-test-files.sh
Executable file
44
cdist/conf/type/__unpack/test/make-test-files.sh
Executable file
|
@ -0,0 +1,44 @@
|
||||||
|
#!/bin/sh -ex
|
||||||
|
|
||||||
|
echo test.7z > test
|
||||||
|
7z a test.7z test > /dev/null
|
||||||
|
|
||||||
|
echo test.bz2 > test
|
||||||
|
bzip2 test
|
||||||
|
|
||||||
|
echo test.gz > test
|
||||||
|
gzip test
|
||||||
|
|
||||||
|
echo test.lzma > test
|
||||||
|
lzma test
|
||||||
|
|
||||||
|
echo test.rar > test
|
||||||
|
rar a test.rar test > /dev/null
|
||||||
|
|
||||||
|
echo test.tar.bz2 > test
|
||||||
|
tar cf test.tar test
|
||||||
|
bzip2 test.tar
|
||||||
|
|
||||||
|
echo test.tar.xz > test
|
||||||
|
tar cf test.tar test
|
||||||
|
xz test.tar
|
||||||
|
|
||||||
|
echo test.tgz > test
|
||||||
|
tar cf test.tar test
|
||||||
|
gzip test.tar
|
||||||
|
mv test.tar.gz test.tgz
|
||||||
|
|
||||||
|
echo test.tar.gz > test
|
||||||
|
tar cf test.tar test
|
||||||
|
gzip test.tar
|
||||||
|
|
||||||
|
echo test.tar > test
|
||||||
|
tar cf test.tar test
|
||||||
|
|
||||||
|
echo test.xz > test
|
||||||
|
xz test
|
||||||
|
|
||||||
|
echo test.zip > test
|
||||||
|
zip test.zip test > /dev/null
|
||||||
|
|
||||||
|
rm test
|
Loading…
Reference in a new issue