| 1 | #!/usr/bin/python |
|---|
| 2 | |
|---|
| 3 | import sys, re, os, initdutils |
|---|
| 4 | |
|---|
| 5 | if len(sys.argv) > 1: |
|---|
| 6 | initfile = sys.argv[1] |
|---|
| 7 | # If the absolute path isn't specified, assume it's relative to |
|---|
| 8 | # cwd; if that doesn't exist, try /etc/init.d |
|---|
| 9 | ap = os.path.abspath(initfile) |
|---|
| 10 | if os.path.exists(ap): |
|---|
| 11 | initfile = ap |
|---|
| 12 | else: |
|---|
| 13 | initfile = os.path.join('/etc/init.d', initfile) |
|---|
| 14 | else: |
|---|
| 15 | print >> sys.stderr, 'Usage: %s /etc/init.d/<init-script>' % sys.argv[0] |
|---|
| 16 | sys.exit(1) |
|---|
| 17 | |
|---|
| 18 | headers = initdutils.scan_initfile(initfile) |
|---|
| 19 | |
|---|
| 20 | provides = headers.get('Provides') |
|---|
| 21 | if provides: |
|---|
| 22 | facilities = initdutils.load_facilities() |
|---|
| 23 | depends = initdutils.load_depends() |
|---|
| 24 | |
|---|
| 25 | for facility in provides: |
|---|
| 26 | if facility in facilities: |
|---|
| 27 | entries = {} |
|---|
| 28 | for entry in facilities[facility].items(): |
|---|
| 29 | if entry[0] != initfile: |
|---|
| 30 | entries[entry[0]] = entry[1] |
|---|
| 31 | facilities[facility] = entries |
|---|
| 32 | |
|---|
| 33 | for (initscript, needed) in depends.iteritems(): |
|---|
| 34 | for facility in needed: |
|---|
| 35 | if facility[0] == "$": |
|---|
| 36 | continue |
|---|
| 37 | if not facilities.get(facility) and facility in provides: |
|---|
| 38 | print >> sys.stderr, 'Unable to remove %s: %s needs %s\n' % ( |
|---|
| 39 | initfile, initscript, facility) |
|---|
| 40 | sys.exit(1) |
|---|
| 41 | |
|---|
| 42 | if initfile in depends: |
|---|
| 43 | del depends[initfile] |
|---|
| 44 | initdutils.save_depends(depends) |
|---|
| 45 | |
|---|
| 46 | initdutils.save_facilities(facilities) |
|---|
| 47 | |
|---|
| 48 | initfile = initfile.replace('/etc/init.d/', '') |
|---|
| 49 | os.system('/usr/sbin/update-rc.d -f %s remove' % initfile) |
|---|