From 5ffb29a48aa1e5f5c172915637a0fa209a08a4fc Mon Sep 17 00:00:00 2001 From: Vitaly Lipatov <lav@etersoft.ru> Date: Tue, 9 Apr 2024 15:52:14 +0300 Subject: [PATCH] commit packed 3.62.2 --- packed/epm.sh | 154 ++++++++++++++++++++++++++++++++++--------------- packed/serv.sh | 24 +++++--- 2 files changed, 125 insertions(+), 53 deletions(-) diff --git a/packed/epm.sh b/packed/epm.sh index fb5ce7ff..ac9869c2 100755 --- a/packed/epm.sh +++ b/packed/epm.sh @@ -34,7 +34,7 @@ SHAREDIR=$PROGDIR # will replaced with /etc/eepm during install CONFIGDIR=$PROGDIR/../etc -EPMVERSION="3.62.1" +export EPMVERSION="3.62.2" # package, single (file), pipe, git EPMMODE="package" @@ -404,7 +404,7 @@ info() check_su_root() { - [ "$BASEDISTRNAME" = "alt" ] || return 0 + #[ "$BASEDISTRNAME" = "alt" ] || return 0 is_root || return 0 @@ -457,6 +457,7 @@ set_sudo() fi fi else + # TODO: check user_can_sudo in https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh # use sudo if one is tuned and tuned without password # hack: check twice $SUDO_CMD -l -n >/dev/null 2>/dev/null @@ -661,7 +662,7 @@ regexp_subst() sed -i -r -e "$expression" "$@" } -assure_exists() +try_assure_exists() { local package="$2" [ -n "$package" ] || package="$(__get_package_for_command "$1")" @@ -670,9 +671,15 @@ assure_exists() local ask='' [ -n "$non_interactive" ] || ask=1 - ( verbose='' direct='' interactive=$ask epm_assure "$1" $package $3 ) || fatal + ( verbose='' direct='' interactive=$ask epm_assure "$1" $package $3 ) +} + +assure_exists() +{ + try_assure_exists "$@" || fatal } + assure_exists_erc() { local package="erc" @@ -762,8 +769,8 @@ eget() { # check for both # we really need that cross here, - is_command curl || assure_exists wget - is_command wget || assure_exists curl + is_command curl || try_assure_exists wget + is_command wget || try_assure_exists curl internal_tools_eget "$@" } @@ -877,6 +884,8 @@ set_distro_info() test_shell + [ -n "$SUDO_USER" ] && warning "It is not necessary to run epm using sudo." + assure_tmpdir set_bigtmpdir @@ -3084,7 +3093,7 @@ __download_pkg_urls() [ "$i" = "*" ] && warning "Incorrect true status from eget. No saved files from download $url, ignoring" && continue [ -s "$tmppkg/$i" ] || continue chmod $verbose a+r "$tmppkg/$i" - local si="${i/ /}" + local si="$(echo "$i" | sed -e 's| |-|g')" if [ "$si" != "$i" ] ; then info "Space detected in the downloaded file '$i', removing spaces ..." mv -v "$tmppkg/$i" "$tmppkg/$si" @@ -3313,7 +3322,7 @@ __epm_korinf_install() { local pkg_urls='' for pkgurl in $* ; do pkg="$(__epm_korinf_site_mask "$pkgurl")" - [ -n "$pkg" ] || fatal "Can't get package url from $pkgurl" + [ -n "$pkg" ] || fatal "Can't get package url by $pkgurl" [ -n "$pkg_urls" ] && pkg_urls="$pkg_urls $pkg" || pkg_urls="$pkg" done # due Error: Can't use epm call from the piped script @@ -3450,7 +3459,7 @@ __epm_filelist_remote() case $PMTYPE in apt-dpkg) - assure_exists apt-file || return + try_assure_exists apt-file || return if sudo_allowed ; then sudocmd apt-file update else @@ -3462,11 +3471,11 @@ __epm_filelist_remote() docmd pkcon get-files "$@" ;; yum-rpm) - assure_exists yum-utils || return + assure_exists yum-utils docmd repoquery -q -l "$@" ;; dnf-rpm) - assure_exists dnf-plugins-core || return + assure_exists dnf-plugins-core docmd dnf repoquery -l "$@" ;; *) @@ -5736,8 +5745,8 @@ epm_moo() __repack_rpm_base() { - assure_exists db_dump || fatal - assure_exists db_load || fatal + assure_exists db_dump + assure_exists db_load cd /var/lib/rpm || fatal mv Packages Packages.BACKUP || fatal # mask dependencies with a= @@ -9270,6 +9279,31 @@ __check_stoplist() grep -E -q "^$1$" $alf } +__convert_packrule_to_regexp() +{ + local tmpalf + tmpalf="$(mktemp)" || fatal + # copied from eget's filter_glob + # check man glob + # remove commentы and translate glob to regexp + grep -v "^[[:space:]]*#" "$1" | grep -v "^[[:space:]]*$" | sed -e "s|\*|.*|g" -e "s|?|.|g" >$tmpalf + echo "$tmpalf" +} + +__check_packrule() +{ + local pkg="$1" + local alf="$CONFIGDIR/packrules.list" + [ -s "$pkg" ] || return 1 + [ -s "$alf" ] || return 1 + + local tmpalf=$(__convert_packrule_to_regexp "$alf") + remove_on_exit $tmpalf + __PACKRULE="$(awk -v s="$pkg" 'BEGIN{FS=" "} s ~ $2 {print $1}' "$tmpalf")" + rm $tmpalf + [ -n "${__PACKRULE}" ] + return +} __prepare_source_package() { @@ -9294,7 +9328,10 @@ __prepare_source_package() # convert tarballs to tar (for alien) # they will fill $returntarname - if rihas "$alpkg" "\.AppImage$" ; then + + if __check_packrule "$alpkg" ; then + __epm_pack_run_handler ${__PACKRULE} "$pkg" + elif rihas "$alpkg" "\.AppImage$" ; then # big hack with $pkg_urls_downloaded (it can be a list, not a single url) __epm_pack_run_handler generic-appimage "$pkg" "" "$pkg_urls_downloaded" SUBGENERIC='appimage' @@ -9443,17 +9480,31 @@ __epm_repack_to_deb() # File bin/epm-repack-rpm: +__icons_res_list="apps scalable symbolic 8x8 14x14 16x16 20x20 22x22 24x24 28x28 32x32 36x36 42x42 45x45 48x48 64 64x64 72x72 96x96 128x128 144x144 160x160 192x192 256x256 256x256@2x 480x480 512 512x512 1024x1024" +__icons_type_list="actions animations apps categories devices emblems emotes filesystems intl mimetypes places status stock" + __get_icons_hicolor_list() { local i j - for i in apps scalable symbolic 8x8 14x14 16x16 20x20 22x22 24x24 28x28 32x32 36x36 42x42 45x45 48x48 64 64x64 72x72 96x96 128x128 144x144 160x160 192x192 256x256 256x256@2x 480x480 512 512x512 1024x1024 ; do + for i in ${__icons_res_list} ; do echo "/usr/share/icons/hicolor/$i" - for j in actions animations apps categories devices emblems emotes filesystems intl mimetypes places status stock ; do + for j in ${__icons_type_list}; do echo "/usr/share/icons/hicolor/$i/$j" done done } +__get_icons_gnome_list() +{ + local i j + for i in ${__icons_res_list} ; do + echo "/usr/share/icons/gnome/$i" + for j in ${__icons_type_list}; do + echo "/usr/share/icons/gnome/$i/$j" + done + done +} + __fix_spec() { local pkgname="$1" @@ -9465,6 +9516,8 @@ __fix_spec() # https://bugzilla.altlinux.org/show_bug.cgi?id=38842 for i in / /etc /etc/init.d /etc/systemd /bin /opt /usr /usr/bin /usr/lib /usr/lib64 /usr/share /usr/share/doc /var /var/log /var/run \ /etc/cron.daily /usr/share/icons/usr/share/pixmaps /usr/share/man /usr/share/man/man1 /usr/share/appdata /usr/share/applications /usr/share/menu \ + /usr/share/mime /usr/share/mime/packages \ + /usr/share/icons/gnome $(__get_icons_gnome_list) \ /usr/share/icons/hicolor $(__get_icons_hicolor_list) ; do sed -i \ -e "s|/\./|/|" \ @@ -9527,23 +9580,43 @@ EOF remove_on_exit "$HOME/.rpmmacros" } -__try_install_eepm_rpmbuild() +__assure_exists_rpmbuild() { + # checking both if they already installed + RPMBUILD=/usr/bin/eepm-rpmbuild + if [ -x $RPMBUILD ] ; then + info "will use eepm-rpmbuild for rpm packing" + export EPM_RPMBUILD=$RPMBUILD + return + fi + RPMBUILD=/usr/bin/rpmbuild [ -x "$RPMBUILD" ] && return + + # try install eepm-rpm-build RPMBUILD=/usr/bin/eepm-rpmbuild - if [ ! -x $RPMBUILD ] ; then - epm install eepm-rpm-build - fi + try_assure_exists $RPMBUILD eepm-rpm-build if [ -x $RPMBUILD ] ; then - warning "will use eepm-rpmbuild for rpm packing" + info "will use eepm-rpmbuild for rpm packing" export EPM_RPMBUILD=$RPMBUILD return fi + + # return to the default RPMBUILD=/usr/bin/rpmbuild + + # TODO: check for all systems + case $PKGFORMAT in + rpm) + assure_exists $RPMBUILD rpm-build + ;; + deb) + assure_exists $RPMBUILD rpm + ;; + esac } __epm_repack_to_rpm() @@ -9551,30 +9624,17 @@ __epm_repack_to_rpm() local pkg="$1" # Note: install epm-repack for static (package based) dependencies - assure_exists alien || fatal + assure_exists alien assure_exists fakeroot # will set RPMBUILD - __try_install_eepm_rpmbuild - - if [ ! -x $RPMBUILD ] ; then - RPMBUILD=/usr/bin/rpmbuild - # TODO: check for all systems - case $PKGFORMAT in - rpm) - assure_exists $RPMBUILD rpm-build || fatal - ;; - deb) - assure_exists $RPMBUILD rpm || fatal - ;; - esac - fi + __assure_exists_rpmbuild umask 022 # TODO: improve if echo "$pkg" | grep -q "\.deb" ; then - assure_exists dpkg || fatal + assure_exists dpkg # TODO: Для установки требует: /usr/share/debconf/confmodule но пакет не может быть установлен # assure_exists debconf fi @@ -10605,7 +10665,7 @@ __epm_repo_pkgdel_alt() local rd="$REPO_DIR/$arch/RPMS.$REPO_NAME" [ -d $REPO_DIR/$arch/RPMS.$REPO_NAME ] || continue for i in $rd/$1* ; do - [ "$1" = "$(epm print name for package $i)" || continue + [ "$1" = "$(epm print name for package $i)" ] || continue rm -v $rd/$1* done done @@ -11465,7 +11525,7 @@ __epm_restore_npm() { local req_file="$1" - assure_exists jq || fatal + assure_exists jq if [ -n "$dryrun" ] ; then local lt @@ -11527,7 +11587,7 @@ __epm_restore_perl_shyaml() { local req_file="$1" - assure_exists shyaml || fatal + assure_exists shyaml if [ -n "$dryrun" ] ; then local lt @@ -11891,7 +11951,7 @@ __alt_local_content_search() fatal "There was some error in contents index retrieving. Try run 'epm update' again." fi - local CI="$(cat $ALT_CONTENTS_INDEX_LIST)" + local CI="$(ls $(cat $ALT_CONTENTS_INDEX_LIST) 2>/dev/null)" info "Searching for $1 ... " @@ -12035,7 +12095,7 @@ rsync_alt_contents_index() local URL="$1" local TD="$2" local res - assure_exists rsync || return + try_assure_exists rsync || return if ! __rsync_check "$URL" ; then warning "$URL is not accessible via rsync, skipping contents index update..." @@ -12977,7 +13037,7 @@ esac case $PMTYPE in apt-dpkg) is_command apt-file || return 0 - assure_exists apt-file || return 0 + try_assure_exists apt-file || return 0 sudocmd apt-file update ;; esac @@ -15569,8 +15629,9 @@ url_get_response() local answer answer="$(quiet=1 __wget --spider -S "$URL" 2>&1)" # HTTP/1.1 405 Method Not Allowed - if echo "$answer" | grep -q "^ *HTTP/[12.]* 405" ; then - (quiet=1 __wget --start-pos=5000G -S "$URL" 2>&1) + # HTTP/1.1 404 Not Found + if echo "$answer" | grep -q "^ *HTTP/[12.]* 40[45]" ; then + (quiet=1 __wget -O/dev/null --header="Range: bytes=0-0" -S "$URL" 2>&1) return fi echo "$answer" @@ -15615,7 +15676,8 @@ url_get_response() local answer answer="$(quiet=1 __curl -LI "$URL" 2>&1)" # HTTP/1.1 405 Method Not Allowed - if echo "$answer" | grep -q "^ *HTTP/[12.]* 405" ; then + # HTTP/1.1 404 Not Found + if echo "$answer" | grep -q "^ *HTTP/[12.]* 40[45]" ; then (quiet=1 __curl -L -i -r0-0 "$URL" 2>&1) return fi diff --git a/packed/serv.sh b/packed/serv.sh index 7d61069b..dfa4fe91 100755 --- a/packed/serv.sh +++ b/packed/serv.sh @@ -20,7 +20,8 @@ PROGDIR=$(dirname "$0") PROGNAME=$(basename "$0") [ -n "$EPMCURDIR" ] || export EPMCURDIR="$(pwd)" -CMDSHELL="/bin/bash" +CMDENV="/usr/bin/env" +[ -x "$CMDENV" ] && CMDSHELL="/usr/bin/env bash" || CMDSHELL="$SHELL" # TODO: pwd for ./epm and which for epm [ "$PROGDIR" = "." ] && PROGDIR="$EPMCURDIR" if [ "$0" = "/dev/stdin" ] || [ "$0" = "sh" ] ; then @@ -33,7 +34,7 @@ SHAREDIR=$PROGDIR # will replaced with /etc/eepm during install CONFIGDIR=$PROGDIR/../etc -EPMVERSION="3.62.1" +EPMVERSION="3.62.2" # package, single (file), pipe, git EPMMODE="package" @@ -404,7 +405,7 @@ info() check_su_root() { - [ "$BASEDISTRNAME" = "alt" ] || return 0 + #[ "$BASEDISTRNAME" = "alt" ] || return 0 is_root || return 0 @@ -457,6 +458,7 @@ set_sudo() fi fi else + # TODO: check user_can_sudo in https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh # use sudo if one is tuned and tuned without password # hack: check twice $SUDO_CMD -l -n >/dev/null 2>/dev/null @@ -661,7 +663,7 @@ regexp_subst() sed -i -r -e "$expression" "$@" } -assure_exists() +try_assure_exists() { local package="$2" [ -n "$package" ] || package="$(__get_package_for_command "$1")" @@ -670,9 +672,15 @@ assure_exists() local ask='' [ -n "$non_interactive" ] || ask=1 - ( verbose='' direct='' interactive=$ask epm_assure "$1" $package $3 ) || fatal + ( verbose='' direct='' interactive=$ask epm_assure "$1" $package $3 ) } +assure_exists() +{ + try_assure_exists "$@" || fatal +} + + assure_exists_erc() { local package="erc" @@ -762,8 +770,8 @@ eget() { # check for both # we really need that cross here, - is_command curl || assure_exists wget - is_command wget || assure_exists curl + is_command curl || try_assure_exists wget + is_command wget || try_assure_exists curl internal_tools_eget "$@" } @@ -877,6 +885,8 @@ set_distro_info() test_shell + [ -n "$SUDO_USER" ] && warning "It is not necessary to run epm using sudo." + assure_tmpdir set_bigtmpdir -- 2.24.1