#!/bin/sh # # Copyright (C) 2012, 2016 Etersoft # Copyright (C) 2012, 2016 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/>. # __epm_autoremove_altrpm_pp() { local pkgs info "Removing unused python/perl modules..." #[ -n "$force" ] || info "You can run with --force for more deep removing" local force=force local flag= [ -n "$force" ] || libexclude=$libexclude'[^-]*$' libexclude='^(python-module-|python3-module-|python-modules-|python3-modules|perl-)' [ -n "$force" ] || libexclude=$libexclude'[^-]*$' showcmd "apt-cache list-nodeps | grep -E -- \"$libexclude\"" pkgs=$(apt-cache list-nodeps | grep -E -- "$libexclude" ) [ -n "$pkgs" ] && sudocmd rpm -v -e $pkgs && flag=1 if [ -n "$flag" ] ; then info "" info "call again for next cycle until all modules will be removed" __epm_autoremove_altrpm_pp fi return 0 } __epm_autoremove_altrpm_lib() { local pkgs info info "Removing all non -devel/-debuginfo libs packages not need by anything..." #[ -n "$force" ] || info "You can run with --force for more deep removing" local force=force local flag= local libexclude='^(lib|i586-lib)' [ -n "$force" ] || libexclude=$libexclude'[^-]*$' # https://www.altlinux.org/APT_в_ALT_Linux/Советы_по_использованию#apt-cache_list-nodeps showcmd "apt-cache list-nodeps | grep -- \"$libexclude\"" pkgs=$(apt-cache list-nodeps | grep -E -- "$libexclude" \ | sed -e "s/[-\.]32bit$//g" \ | grep -E -v -- "-(devel|devel-static|debuginfo)$" \ | grep -E -v -- "-(util|utils|tool|tools|plugin|daemon|help)$" \ | grep -E -v -- "^(libsystemd|libreoffice|libnss|libvirt-client|libvirt-daemon|libsasl2-plugin|eepm)" ) [ -n "$pkgs" ] && sudocmd rpm -v -e $pkgs && flag=1 if [ -n "$flag" ] ; then info "" info "call again for next cycle until all libs will be removed" __epm_autoremove_altrpm_lib fi return 0 } __epm_autoremove_altrpm() { local pkg load_helper epm-packages assure_exists /etc/buildreqs/files/ignore.d/apt-scripts apt-scripts __epm_autoremove_altrpm_pp __epm_autoremove_altrpm_lib return 0 } # TODO: keep our eepm package epm_autoremove() { [ -z "$pkg_filenames" ] || fatal "No arguments are allowed here" case $DISTRNAME in ALTLinux) __epm_autoremove_altrpm docmd epm remove-old-kernels if which nvidia-clean-driver 2>/dev/null ; then sudocmd nvidia-clean-driver fi return ;; *) ;; esac case $PMTYPE in apt-dpkg|aptitude-dpkg) sudocmd apt-get autoremove ;; aura) sudocmd aura -Oj ;; yum-rpm) # cleanup orphanes? while true ; do docmd package-cleanup --leaves $(subst_option non_interactive --assumeyes) # FIXME: package-cleanup have to use stderr for errors local PKGLIST=$(package-cleanup -q --leaves | grep -v "^eepm-") [ -n "$PKGLIST" ] || break sudocmd yum remove $PKGLIST done ;; dnf-rpm) sudocmd dnf autoremove ;; # see autoorhans #urpm-rpm) # sudocmd urpme --auto-orphans # ;; emerge) sudocmd emerge --depclean assure_exists revdep-rebuild sudocmd revdep-rebuild ;; # see autoorhans #pacman) # sudocmd pacman -Qdtq | sudocmd pacman -Rs - # ;; slackpkg) # clean-system removes non official packages #sudocmd slackpkg clean-system ;; guix) sudocmd guix gc ;; pkgng) sudocmd pkg autoremove ;; zypper-rpm) # https://www.linux.org.ru/forum/desktop/11931830 assure_exists zypper zypper 1.9.3 sudocmd zypper packages --unneeded # FIXME: x86_64/i586 are duplicated local PKGLIST=$(zypper packages --unneeded | tail -n +5 | cut -d \| -f 3 | sort -u) sudocmd zypper remove --clean-deps $PKGLIST ;; xbps) CMD="xbps-remove -O" ;; *) fatal "Have no suitable command for $PMTYPE" ;; esac }