[__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:
ander 2020-07-27 06:20:21 +02:00 committed by Darko Poljak
parent fdef468f1a
commit 73f1937636
10 changed files with 306 additions and 0 deletions

View 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

View 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

View 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.

View 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

View file

@ -0,0 +1,2 @@
backup-destination
preserve-archive

View file

@ -0,0 +1,2 @@
sum-file
tar-strip

View file

@ -0,0 +1 @@
destination

View 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

View 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\..+'"

View 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