mirror of
https://github.com/munki/munki.git
synced 2025-12-30 19:20:10 -06:00
95 lines
3.4 KiB
Python
Executable File
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()
|