#!/bin/sh # # Copyright (C) 2023 Etersoft # Copyright (C) 2023 Vitaly Lipatov <lav@etersoft.ru> # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # load_helper epm-sh-altlinux load_helper epm-assure load_helper epm-repack [ -n "$EPM_PACK_SCRIPTS_DIR" ] || EPM_PACK_SCRIPTS_DIR="$CONFIGDIR/pack.d" __epm_pack() { local packname="$1" local tarname="$2" returntarname='' local repackcode="$EPM_PACK_SCRIPTS_DIR/$packname.sh" [ -x "$repackcode" ] || fatal "Can't find script $repackcode for packname $packname" [ -f "$repackcode.rpmnew" ] && warning "There is .rpmnew file(s) in $EPM_PACK_SCRIPTS_DIR dir. The pack script can be outdated." tmpdir="$(mktemp -d)" filefortarname="$tmpdir/filefortarname" trap "rm -rf $tmpdir" EXIT set_sudo export SUDO # TODO: inside () ? export PATH=$PROGDIR:$PATH local bashopt='' [ -n "$verbose" ] && bashopt='-x' #info "Running $($script --description 2>/dev/null) ..." ( unset EPMCURDIR ; docmd $CMDSHELL $bashopt $repackcode "$tarname" "$filefortarname" ) || fatal returntarname="$(cat "$filefortarname")" || fatal "pack script $repackcode didn't set tarname" rm -rf $tmpdir [ -s "$returntarname" ] || fatal "pack script $repackcode didn't return tarname" #local newname="$(basename "$returntarname")" # now it is by default in the current dir #if [ "$returntarname" != "$(realpath $newname)" ; then # # repack put its result to the current dir # mv -v $returntarname . || fatal #fi if [ -n "$download_only" ] ; then return fi trap "rm -v $returntarname" EXIT # FIXME: __epm_repack will drop trap repacked_pkgs='' # repack to our target if __epm_repack_if_needed $returntarname ; then [ -n "$repacked_pkgs" ] || fatal "Can't repack $returntarname" # if repack is forced or repack rule (not disabled) is exists elif [ -n "$repack" ] || [ -z "$norepack" ] && __epm_have_repack_rule $returntarname ; then __epm_repack "$returntarname" [ -n "$repacked_pkgs" ] || fatal "Can't repack $returntarname" fi if [ -n "$repacked_pkgs" ] ; then rm -v $returntarname mv -v $repacked_pkgs . || fatal pkgname=$(pwd)/"$(basename $repacked_pkgs)" else pkgname="$returntarname" fi if [ -n "$install" ] ; then trap "rm -v $pkgname" EXIT docmd epm install $pkgname return fi trap "" EXIT } epm_pack_help() { cat <<EOF epm pack - create rpm package from files Usage: epm pack [options] <packname> <tar|url|dir> Options: <packname> - receipt <dir> - create tarball from the dir before <url> - download tar from url --install - install after pack result --repack - force repack ever if returned package can be installed without repack --download-only - save pack result and exit --save-only - save repacked packages and exit (this is default behaviour) EOF } epm_pack() { if [ "$1" = "-h" ] || [ "$1" = "--help" ] ; then epm_pack_help exit fi #TODO trap "__epm_remove_tmp_files" EXIT local packname="$1" local tarname="$2" [ -n "$packname" ] || fatal "run with packname, see --help" if is_url "$tarname"; then pkg_urls="$tarname" load_helper epm-download __handle_pkg_urls_to_install # drop spaces and get full path tarname="$(realpath $pkg_files)" elif [ -d "$tarname" ] ; then fatal "FIXME: implement packing of the dir $tarname?" tarname='' elif [ -s "$tarname" ] ; then # get full path for real name tarname="$(realpath "$tarname")" else # just pass name true fi __epm_pack "$packname" "$tarname" }