#!/bin/sh # # Copyright (C) 2015, 2017 Etersoft # Copyright (C) 2015, 2017 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_orphan_altrpm() { docmd apt-cache list-extras } epm_autoorphans() { [ -z "$*" ] || fatal "No arguments are allowed here" case $BASEDISTRNAME in alt) # ALT Linux only assure_exists /usr/share/apt/scripts/list-extras.lua apt-scripts if [ -z "$dryrun" ] ; then message "We will try remove all installed packages which are missed in repositories" warning "Use with caution!" fi epm Upgrade || fatal info "Retrieving orphaned packages list ..." local PKGLIST=$(__epm_orphan_altrpm \ | sed -e "s/\.32bit//g" \ | grep -v -- "^eepm$" \ | grep -v -- "^distro_info$" \ | grep -v -- "^kernel") # TODO: implement for other PMTYPE info "Retrieving packages installed via epm play ..." local play_installed="$(epm play --list-installed-packages)" if [ -n "$play_installed" ] ; then message "Skip follow packages installed via epm play:" $(echo $play_installed | xargs -n1000 echo) PKGLIST="$(estrlist exclude "$play_installed" "$PKGLIST")" fi # TODO: implement for other PMTYPE local hold_packages="$(epm mark --short showhold)" if [ -n "$hold_packages" ] ; then message "Skip follow packages on hold:" $(echo $hold_packages | xargs -n1000 echo) PKGLIST="$(estrlist exclude "$hold_packages" "$PKGLIST")" fi if [ -n "$PKGLIST" ] ; then if [ -z "$dryrun" ] ; then showcmd epm remove $dryrun $force $PKGLIST confirm_info "We will remove packages above." fi info info docmd epm remove $dryrun $force $(subst_option non_interactive --auto) $PKGLIST else message "There are no orphan packages in the system." fi return 0 ;; esac case $PMTYPE in apt-dpkg|aptitude-dpkg) assure_exists deborphan showcmd deborphan a='' deborphan | docmd epm remove $dryrun ;; #aura) # sudocmd aura -Oj # ;; yum-rpm) docmd epm upgrade assure_exists package-cleanup yum-utils showcmd package-cleanup --orphans local PKGLIST=$(a= package-cleanup -q --orphans | grep -v "^eepm-") docmd epm remove $dryrun $PKGLIST ;; dnf-rpm|dnf5-rpm) # TODO: dnf list extras docmd epm upgrade assure_exists package-cleanup dnf-utils showcmd package-cleanup --orphans local PKGLIST=$(a= package-cleanup -q --orphans | grep -v "^eepm-") docmd epm remove $dryrun $PKGLIST ;; urpm-rpm) if [ -n "$dryrun" ] ; then fatal "--dry-run is not supported yet" else showcmd urpme --report-orphans sudocmd urpme --auto-orphans fi ;; #emerge) # sudocmd emerge --depclean # assure_exists revdep-rebuild # sudocmd revdep-rebuild # ;; pacman) if [ -n "$dryrun" ] ; then info "Autoorphans packages list:" sudocmd pacman -Qdtq else sudocmd pacman -Qdtq | sudocmd pacman -Rs - fi ;; slackpkg) # clean-system removes non official packages sudocmd slackpkg clean-system ;; eopkg) sudocmd eopkg remove-orphans ;; #guix) # sudocmd guix gc # ;; #pkgng) # sudocmd pkg autoremove # ;; zypper-rpm) # https://www.linux.org.ru/forum/desktop/11931830 assure_exists zypper zypper 1.9.2 # For zypper < 1.9.2: zypper se -si | grep 'System Packages' sudocmd zypper packages --orphaned # FIXME: x86_64/i586 are duplicated local PKGLIST=$(a= zypper packages --orphaned | tail -n +5 | cut -d \| -f 3 | sort -u) docmd epm remove $dryrun --clean-deps $PKGLIST ;; xbps) if [ -n "$dryrun" ] ; then fatal "--dry-run is not supported yet" else sudocmd xbps-remove -o fi ;; *) fatal 'Have no suitable command for $PMTYPE' ;; esac }