Files
munki/code/client/removepackages
2018-01-20 08:46:22 -08:00

95 lines
3.4 KiB
Python
Executable File

#!/usr/bin/python
# encoding: utf-8
#
# Copyright 2009-2018 Greg Neagle.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""
removepackages
munkilib/removepackages.py should be a symlink to this file for backwards
compatibility
Command-line tool to analyze installed packages and remove
files unique to the packages given. No attempt
is made to revert to older versions of a file when uninstalling;
only file removals are done.
"""
import optparse
import os
import sys
from munkilib import display
from munkilib import munkistatus
from munkilib.installer import rmpkgs
def main():
'''Used when calling removepackages.py directly from the command line.'''
# command-line options
parser = optparse.OptionParser()
parser.set_usage('''Usage: %prog [options] package_id ...''')
parser.add_option('--forcedeletebundles', '-f', action='store_true',
help='Delete bundles even if they aren\'t empty.')
parser.add_option('--listfiles', '-l', action='store_true',
help='List the filesystem objects to be removed, '
'but do not actually remove them.')
parser.add_option('--rebuildpkgdb', action='store_true',
help='Force a rebuild of the internal package database.')
parser.add_option('--noremovereceipts', action='store_true',
help='''Do not remove receipts and boms from
/Library/Receipts and update internal package
database.''')
parser.add_option('--noupdateapplepkgdb', action='store_true',
help='Do not update Apple\'s package database. '
'If --noremovereceipts is also given, this is implied')
parser.add_option('--munkistatusoutput', '-m', action='store_true',
help='Output is formatted for use with MunkiStatus.')
parser.add_option('--verbose', '-v', action='count', default=1,
help='More verbose output. May be specified multiple '
'times.')
# Get our options and our package names
options, pkgnames = parser.parse_args()
# check to see if we're root
if os.geteuid() != 0:
print >> sys.stderr, "You must run this as root!"
exit(-1)
# set the display globals
display.munkistatusoutput = options.munkistatusoutput
display.verbose = options.verbose
if options.munkistatusoutput:
pkgcount = len(pkgnames)
munkistatus.message("Removing %s packages..." % pkgcount)
munkistatus.detail("")
retcode = rmpkgs.removepackages(
pkgnames,
forcedeletebundles=options.forcedeletebundles,
listfiles=options.listfiles,
rebuildpkgdb=options.rebuildpkgdb,
noremovereceipts=options.noremovereceipts,
noupdateapplepkgdb=options.noupdateapplepkgdb)
if options.munkistatusoutput:
munkistatus.quit_app()
exit(retcode)
if __name__ == '__main__':
main()