chore: reorganize files
This commit is contained in:
parent
07da873bb3
commit
56e81efab3
13 changed files with 184 additions and 189 deletions
2
Makefile
2
Makefile
|
|
@ -7,7 +7,7 @@ build:
|
||||||
scripts/shcompile src/main.sh > zpkg && chmod +x zpkg
|
scripts/shcompile src/main.sh > zpkg && chmod +x zpkg
|
||||||
|
|
||||||
# minimized build with lxsh
|
# minimized build with lxsh
|
||||||
var_exclude = TMPDIR ZPKG_.* _ZPKG_.* SSH_ADDRESS HTTP_ADDRESS PKG_PATH COMPRESSION ALLOW_ROOT UPDATE_REMOVE NOSUDO
|
var_exclude = TMPDIR ZPKG_.* _ZPKG_.* SSH_ADDRESS HTTP_ADDRESS PKG_PATH COMPRESSION ALLOW_ROOT UPDATE_REMOVE NOSUDO ROOT_PATH DEBUG
|
||||||
minimal: minimal-deploy
|
minimal: minimal-deploy
|
||||||
|
|
||||||
minimal-deploy: minimal-build
|
minimal-deploy: minimal-build
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,14 @@ virtual_config_path()
|
||||||
ln -sf "$old_pkg_path/installed" "$PKG_PATH/installed"
|
ln -sf "$old_pkg_path/installed" "$PKG_PATH/installed"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# defaults
|
||||||
|
config_path=${ZPKG_ROOT_PATH-$ROOT_PATH}/etc/zpkg
|
||||||
|
fname="$(basename "$0")"
|
||||||
|
ALLOW_ROOT=false
|
||||||
|
UPDATE_REMOVE=true
|
||||||
|
TMPDIR=${TMPDIR-/tmp}
|
||||||
|
|
||||||
|
|
||||||
# resolve relative config_path
|
# resolve relative config_path
|
||||||
config_path="$(resolve_path "$config_path" "$(pwd)")"
|
config_path="$(resolve_path "$config_path" "$(pwd)")"
|
||||||
config_file="$config_path/zpkg.conf"
|
config_file="$config_path/zpkg.conf"
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
|
||||||
# $1 = source , $2 = package , $3 = name
|
# $1 = source , $2 = package , $3 = name
|
||||||
package()
|
package()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
11
src/env.sh
11
src/env.sh
|
|
@ -1,11 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
_OUTPUT=/dev/stdin
|
|
||||||
[ "$_ZPKG_SELF_UPGRADE" = "y" ] && _OUTPUT=/dev/null
|
|
||||||
|
|
||||||
config_path=$ZPKG_ROOT_PATH/etc/zpkg
|
|
||||||
fname="$(basename "$0")"
|
|
||||||
ALLOW_ROOT=false
|
|
||||||
UPDATE_REMOVE=true
|
|
||||||
|
|
||||||
[ -z "$TMPDIR" ] && TMPDIR=/tmp
|
|
||||||
57
src/files.sh
Normal file
57
src/files.sh
Normal file
|
|
@ -0,0 +1,57 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# $1 = file , $2 = prefix , $3 = target to extract
|
||||||
|
unpack()
|
||||||
|
{
|
||||||
|
echo "Unpacking $1"
|
||||||
|
$pcompress -dc < "$1" 2>/dev/null | tar -xf - $3
|
||||||
|
}
|
||||||
|
|
||||||
|
# $1 = source_dir , $2 = dest_dir , $3 = prefix
|
||||||
|
copy_files() {
|
||||||
|
$3 cp -r "$1/." "$2"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
install_files() {
|
||||||
|
(
|
||||||
|
umask a+rx
|
||||||
|
set -e
|
||||||
|
if [ -d "ROOT" ] ; then
|
||||||
|
copy_files ROOT "$ROOT_PATH/" $2 2>/dev/null
|
||||||
|
fi
|
||||||
|
if [ -d "HOME" ] ; then
|
||||||
|
copy_files HOME "$HOME" 2>/dev/null
|
||||||
|
fi
|
||||||
|
add_package_entry "$1" $2
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
# files from stdin
|
||||||
|
# $1 = from where , $2 = prefix
|
||||||
|
delete_files()
|
||||||
|
{
|
||||||
|
cd "$1" || return $?
|
||||||
|
list=$(cat)
|
||||||
|
printf "%s\n" "$list" | tr '\n' '\0' | $2 xargs -0 rm -d 2>/dev/null
|
||||||
|
printf "%s\n" "$list" | tr '\n' '\0' | xargs -0 -n1 dirname | uniq |
|
||||||
|
tr '\n' '\0' | $2 xargs -0 rmdir -p 2>/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
# stdin: old list
|
||||||
|
# $1 = old list , $2 = new path
|
||||||
|
to_delete()
|
||||||
|
{
|
||||||
|
find "$2" -type d 2>/dev/null | sed 's|$|/|g' > tmplist
|
||||||
|
find "$2" -type f 2>/dev/null >> tmplist
|
||||||
|
sort tmplist > list
|
||||||
|
diff --new-line-format="" --unchanged-line-format="" "$1" list
|
||||||
|
rm tmplist list
|
||||||
|
}
|
||||||
|
|
||||||
|
# $1 = package , $2 = sudo
|
||||||
|
remove_files() {
|
||||||
|
filetree=$(metadata_get tree < "$PKG_PATH/$1.dat" | base64 -d)
|
||||||
|
printf "%s\n" "$filetree" | grep "^ROOT/" | to_delete - ROOT | sed 's|^ROOT/||g' | tac | delete_files "$ROOT_PATH/" $2
|
||||||
|
printf "%s\n" "$filetree" | grep "^HOME/" | to_delete - HOME | sed 's|^HOME/||g' | tac | delete_files "$HOME"
|
||||||
|
}
|
||||||
|
|
@ -1,51 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# $1 = file , $2 = prefix , $3 = target to extract
|
|
||||||
unpack()
|
|
||||||
{
|
|
||||||
echo "Unpacking $1"
|
|
||||||
$pcompress -dc < "$1" 2>/dev/null | tar -xf - $3
|
|
||||||
}
|
|
||||||
|
|
||||||
# $1 = package , $2 = prefix
|
|
||||||
add_package_entry()
|
|
||||||
{
|
|
||||||
(
|
|
||||||
set -e
|
|
||||||
cd "$PKG_PATH"
|
|
||||||
if grep -q "^$1 " installed 2>/dev/null
|
|
||||||
then
|
|
||||||
$2 sed "s|$1 .*\$|$1 $(date +%s)|g" -i installed
|
|
||||||
else
|
|
||||||
$2 sh -c "echo '$1 $(date +%s)' >> installed"
|
|
||||||
$2 chmod a+r installed
|
|
||||||
fi
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
# $1 = source_dir , $2 = dest_dir , $3 = prefix
|
|
||||||
copy_files() {
|
|
||||||
$3 cp -r "$1/." "$2"
|
|
||||||
}
|
|
||||||
|
|
||||||
# $1 = package , $2 = prefix
|
|
||||||
install_package()
|
|
||||||
{
|
|
||||||
[ "$1" = "$fname" ] && [ -z "$opt_R" ] && _self_update=y && return 0
|
|
||||||
echo "Installing $1"
|
|
||||||
tmpdir="$TMPDIR/zpkg_$(random_string 5)"
|
|
||||||
mkdir -p "$tmpdir"
|
|
||||||
(
|
|
||||||
cd "$tmpdir" || exit $?
|
|
||||||
fetch_package "$1" || { echo "Package '$1' not found" >&2 && return 1; }
|
|
||||||
unpack "$1.tar.$extension" $2 || exit $?
|
|
||||||
gen_metadata "$1.tar.$extension" | $2 tee "$PKG_PATH/$1.dat" >/dev/null
|
|
||||||
hook install pre "$1" $2
|
|
||||||
install_files "$1" $2
|
|
||||||
hook install post "$1" $2
|
|
||||||
add_package_entry "$1" $2
|
|
||||||
)
|
|
||||||
ret=$?
|
|
||||||
rm -rf "$tmpdir" 2>/dev/null
|
|
||||||
return $ret
|
|
||||||
}
|
|
||||||
|
|
@ -1,19 +1,5 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
deps()
|
|
||||||
{
|
|
||||||
(
|
|
||||||
cd "$PKG_PATH"
|
|
||||||
l=$(grep "^$1 " pkglist) || return $?
|
|
||||||
echo "$l" | cut -d' ' -f3-
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
# $1 = pkg file
|
|
||||||
desc() {
|
|
||||||
cat "$1" | $pcompress -dc 2>/dev/null | tar -xOf - DESC
|
|
||||||
}
|
|
||||||
|
|
||||||
resolve_packages()
|
resolve_packages()
|
||||||
{
|
{
|
||||||
RET=0
|
RET=0
|
||||||
|
|
@ -47,14 +33,6 @@ resolve_deps()
|
||||||
return $RET
|
return $RET
|
||||||
}
|
}
|
||||||
|
|
||||||
is_installed()
|
|
||||||
{
|
|
||||||
(
|
|
||||||
cd "$PKG_PATH"
|
|
||||||
grep -q "^$1 " installed 2>/dev/null
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
# $1 = file
|
# $1 = file
|
||||||
view_package_file() {
|
view_package_file() {
|
||||||
tree=$(cat "$1" | $pcompress -dc 2>/dev/null | tar -tf - 2>/dev/null) || exit $?
|
tree=$(cat "$1" | $pcompress -dc 2>/dev/null | tar -tf - 2>/dev/null) || exit $?
|
||||||
|
|
@ -3,9 +3,7 @@
|
||||||
[ "$DEBUG" = true ] && set -x
|
[ "$DEBUG" = true ] && set -x
|
||||||
|
|
||||||
# ordered requirements
|
# ordered requirements
|
||||||
%include util.sh env.sh print.sh
|
%include util.sh options.sh config.sh
|
||||||
%include options.sh
|
|
||||||
%include config.sh
|
|
||||||
|
|
||||||
# everything else
|
# everything else
|
||||||
%include *.sh
|
%include *.sh
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,38 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# $1 = package , $2 = prefix
|
||||||
|
add_package_entry()
|
||||||
|
{
|
||||||
|
(
|
||||||
|
set -e
|
||||||
|
cd "$PKG_PATH"
|
||||||
|
if grep -q "^$1 " installed 2>/dev/null ; then
|
||||||
|
$2 sed "s|$1 .*\$|$1 $(date +%s)|g" -i installed
|
||||||
|
else
|
||||||
|
$2 sh -c "echo '$1 $(date +%s)' >> installed"
|
||||||
|
$2 chmod a+r installed
|
||||||
|
fi
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
deps()
|
||||||
|
{
|
||||||
|
(
|
||||||
|
cd "$PKG_PATH"
|
||||||
|
l=$(grep "^$1 " pkglist) || return $?
|
||||||
|
echo "$l" | cut -d' ' -f3-
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
# $1 = package
|
||||||
|
is_installed()
|
||||||
|
{
|
||||||
|
(
|
||||||
|
cd "$PKG_PATH"
|
||||||
|
grep -q "^$1 " installed 2>/dev/null
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
# stdin = metadata
|
# stdin = metadata
|
||||||
# $1 = value
|
# $1 = value
|
||||||
metadata_get() {
|
metadata_get() {
|
||||||
|
|
@ -29,12 +64,12 @@ gen_metadata() {
|
||||||
printf "installsize=%s\n" "$isize"
|
printf "installsize=%s\n" "$isize"
|
||||||
gen_hook_metadata
|
gen_hook_metadata
|
||||||
printf "tree=%s\n" "$(find ROOT HOME ! -type d 2>/dev/null | base64 -w0)"
|
printf "tree=%s\n" "$(find ROOT HOME ! -type d 2>/dev/null | base64 -w0)"
|
||||||
printf "dirtree=%s\n" "$(find ROOT HOME -type d -mindepth 1 2>/dev/null | base64 -w0)"
|
printf "dirtree=%s\n" "$(find ROOT HOME -mindepth 1 -type d 2>/dev/null | base64 -w0)"
|
||||||
}
|
}
|
||||||
|
|
||||||
# $1 = sudo
|
# $1 = sudo
|
||||||
convert_to_metadata() {
|
convert_to_metadata() {
|
||||||
find "$PKG_PATH" -type f -maxdepth 1 -name "*.tar.$extension" |
|
find "$PKG_PATH" -maxdepth 1 -type f -name "*.tar.$extension" |
|
||||||
while read -r I ; do
|
while read -r I ; do
|
||||||
pkgname=$(basename "${I%.tar.$extension}")
|
pkgname=$(basename "${I%.tar.$extension}")
|
||||||
echo "Migrate $pkgname"
|
echo "Migrate $pkgname"
|
||||||
|
|
|
||||||
80
src/operation.sh
Normal file
80
src/operation.sh
Normal file
|
|
@ -0,0 +1,80 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# $1 = package , $2 = prefix
|
||||||
|
install_package()
|
||||||
|
{
|
||||||
|
[ "$1" = "$fname" ] && [ -z "$opt_R" ] && _self_update=y && return 0
|
||||||
|
echo "Installing $1"
|
||||||
|
tmpdir="$TMPDIR/zpkg_$(random_string 5)"
|
||||||
|
mkdir -p "$tmpdir"
|
||||||
|
(
|
||||||
|
cd "$tmpdir" || exit $?
|
||||||
|
fetch_package "$1" || { echo "Package '$1' not found" >&2 && return 1; }
|
||||||
|
unpack "$1.tar.$extension" $2 || exit $?
|
||||||
|
gen_metadata "$1.tar.$extension" | $2 tee "$PKG_PATH/$1.dat" >/dev/null
|
||||||
|
hook install pre "$1" $2
|
||||||
|
install_files "$1" $2
|
||||||
|
hook install post "$1" $2
|
||||||
|
add_package_entry "$1" $2
|
||||||
|
)
|
||||||
|
ret=$?
|
||||||
|
rm -rf "$tmpdir" 2>/dev/null
|
||||||
|
return $ret
|
||||||
|
}
|
||||||
|
|
||||||
|
# $1 = package , $2 = prefix
|
||||||
|
remove_package()
|
||||||
|
{
|
||||||
|
if [ ! -f "$PKG_PATH/$1.dat" ] || ! grep -q "^$1 " "$PKG_PATH/installed"
|
||||||
|
then
|
||||||
|
echo "Package '$1' not installed" >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Removing $1"
|
||||||
|
|
||||||
|
hook remove pre "$1" $2
|
||||||
|
remove_files "$1" $2
|
||||||
|
hook remove post "$1" $2
|
||||||
|
$2 rm -f "$PKG_PATH/$1.dat" 2>/dev/null
|
||||||
|
$2 sed -i "/^$1 /d" "$PKG_PATH/installed"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
# $1 = package , $2 = prefix
|
||||||
|
upgrade_package()
|
||||||
|
{
|
||||||
|
[ "$1" = "$fname" ] && [ -z "$opt_R" ] && _self_update=y && return 0
|
||||||
|
echo "Updating $1"
|
||||||
|
tmpdir="$TMPDIR/zpkg_$(random_string 5)"
|
||||||
|
mkdir -p "$tmpdir"
|
||||||
|
(
|
||||||
|
# fetch package
|
||||||
|
cd "$tmpdir"
|
||||||
|
fetch_package "$1" || { echo "Package '$1' not found" >&2 && return 1; }
|
||||||
|
unpack "$1.tar.$extension" || return $?
|
||||||
|
|
||||||
|
hook upgrade pre "$1" $2
|
||||||
|
remove_files "$1" $2
|
||||||
|
gen_metadata . | $2 tee "$PKG_PATH/$1.dat" >/dev/null
|
||||||
|
install_files "$1" $2
|
||||||
|
hook upgrade post "$1" $2
|
||||||
|
)
|
||||||
|
ret=$?
|
||||||
|
rm -rf "$tmpdir" 2>/dev/null
|
||||||
|
return $ret
|
||||||
|
}
|
||||||
|
|
||||||
|
## self upgrading mitigation
|
||||||
|
|
||||||
|
_OUTPUT=/dev/stdin
|
||||||
|
[ "$_ZPKG_SELF_UPGRADE" = "y" ] && _OUTPUT=/dev/null
|
||||||
|
|
||||||
|
unset _self_update
|
||||||
|
do_self_update()
|
||||||
|
{
|
||||||
|
_tmpzpkg="$TMPDIR/zpkg_bin_$(random_string 5)"
|
||||||
|
# copy current file
|
||||||
|
cp "$0" "$_tmpzpkg" || return $?
|
||||||
|
exec sh -c '_ZPKG_SELF_UPGRADE=y "$1" -c "$2" -R install zpkg ; rm -f "$1"' sh "$_tmpzpkg" "$config_path"
|
||||||
|
}
|
||||||
|
|
@ -1,20 +0,0 @@
|
||||||
install_files() {
|
|
||||||
(
|
|
||||||
umask a+rx
|
|
||||||
set -e
|
|
||||||
if [ -d "ROOT" ] ; then
|
|
||||||
copy_files ROOT "$ROOT_PATH/" $2 2>/dev/null
|
|
||||||
fi
|
|
||||||
if [ -d "HOME" ] ; then
|
|
||||||
copy_files HOME "$HOME" 2>/dev/null
|
|
||||||
fi
|
|
||||||
add_package_entry "$1" $2
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
# $1 = package , $2 = sudo
|
|
||||||
remove_files() {
|
|
||||||
filetree=$(metadata_get tree < "$PKG_PATH/$1.dat" | base64 -d)
|
|
||||||
printf "%s\n" "$filetree" | grep "^ROOT/" | to_delete - ROOT | sed 's|^ROOT/||g' | tac | delete_files "$ROOT_PATH/" $2
|
|
||||||
printf "%s\n" "$filetree" | grep "^HOME/" | to_delete - HOME | sed 's|^HOME/||g' | tac | delete_files "$HOME"
|
|
||||||
}
|
|
||||||
|
|
@ -1,42 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# files from stdin
|
|
||||||
# $1 = from where , $2 = prefix
|
|
||||||
delete_files()
|
|
||||||
{
|
|
||||||
cd "$1" || return $?
|
|
||||||
list=$(cat)
|
|
||||||
printf "%s\n" "$list" | tr '\n' '\0' | $2 xargs -0 rm -d 2>/dev/null
|
|
||||||
printf "%s\n" "$list" | tr '\n' '\0' | xargs -0 -n1 dirname | uniq |
|
|
||||||
tr '\n' '\0' | $2 xargs -0 rmdir -p 2>/dev/null
|
|
||||||
}
|
|
||||||
|
|
||||||
# stdin: old list
|
|
||||||
# $1 = old list , $2 = new path
|
|
||||||
to_delete()
|
|
||||||
{
|
|
||||||
find "$2" -type d 2>/dev/null | sed 's|$|/|g' > tmplist
|
|
||||||
find "$2" -type f 2>/dev/null >> tmplist
|
|
||||||
sort tmplist > list
|
|
||||||
diff --new-line-format="" --unchanged-line-format="" "$1" list
|
|
||||||
rm tmplist list
|
|
||||||
}
|
|
||||||
|
|
||||||
# $1 = package , $2 = prefix
|
|
||||||
remove_package()
|
|
||||||
{
|
|
||||||
if [ ! -f "$PKG_PATH/$1.dat" ] || ! grep -q "^$1 " "$PKG_PATH/installed"
|
|
||||||
then
|
|
||||||
echo "Package '$1' not installed" >&2
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Removing $1"
|
|
||||||
|
|
||||||
hook remove pre "$1" $2
|
|
||||||
remove_files "$1" $2
|
|
||||||
hook remove post "$1" $2
|
|
||||||
$2 rm -f "$PKG_PATH/$1.dat" 2>/dev/null
|
|
||||||
$2 sed -i "/^$1 /d" "$PKG_PATH/installed"
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# $1 = package , $2 = prefix
|
|
||||||
upgrade_package()
|
|
||||||
{
|
|
||||||
[ "$1" = "$fname" ] && [ -z "$opt_R" ] && _self_update=y && return 0
|
|
||||||
echo "Updating $1"
|
|
||||||
tmpdir="$TMPDIR/zpkg_$(random_string 5)"
|
|
||||||
mkdir -p "$tmpdir"
|
|
||||||
(
|
|
||||||
# fetch package
|
|
||||||
cd "$tmpdir"
|
|
||||||
fetch_package "$1" || { echo "Package '$1' not found" >&2 && return 1; }
|
|
||||||
unpack "$1.tar.$extension" || return $?
|
|
||||||
|
|
||||||
hook upgrade pre "$1" $2
|
|
||||||
remove_files "$1" $2
|
|
||||||
gen_metadata . | $2 tee "$PKG_PATH/$1.dat" >/dev/null
|
|
||||||
install_files "$1" $2
|
|
||||||
hook upgrade post "$1" $2
|
|
||||||
)
|
|
||||||
ret=$?
|
|
||||||
rm -rf "$tmpdir" 2>/dev/null
|
|
||||||
return $ret
|
|
||||||
}
|
|
||||||
|
|
||||||
## self upgrading mitigation
|
|
||||||
|
|
||||||
unset _self_update
|
|
||||||
do_self_update()
|
|
||||||
{
|
|
||||||
_tmpzpkg="$TMPDIR/zpkg_bin_$(random_string 5)"
|
|
||||||
# copy current file
|
|
||||||
cp "$0" "$_tmpzpkg" || return $?
|
|
||||||
exec sh -c '_ZPKG_SELF_UPGRADE=y "$1" -c "$2" -R install zpkg ; rm -f "$1"' sh "$_tmpzpkg" "$config_path"
|
|
||||||
}
|
|
||||||
Loading…
Reference in a new issue