mirror of
https://github.com/Telecominfraproject/OpenNetworkLinux.git
synced 2025-11-01 10:48:18 +00:00
python3 is starting to become the default on all major distributions. Using `/usr/bin/python2` should be safe for the near future.
75 lines
2.1 KiB
Python
Executable File
75 lines
2.1 KiB
Python
Executable File
#!/usr/bin/python2
|
|
import sys
|
|
import os
|
|
import argparse
|
|
import subprocess
|
|
import shutil
|
|
import tempfile
|
|
|
|
ap = argparse.ArgumentParser(description="CPIO Modify Tool.")
|
|
|
|
ap.add_argument("--cpio", help="Input cpio gzip", required=True)
|
|
ap.add_argument("--add-directory", nargs='+', help="Add the given directory to the root of the cpio.", default=[])
|
|
ap.add_argument("--makedevs", nargs='+', help="Run makedevs", default=[])
|
|
ap.add_argument("--ls", action='store_true', help="List files in CPIO and exit.")
|
|
ap.add_argument("--out", help="New CPIO")
|
|
|
|
ops = ap.parse_args()
|
|
|
|
#
|
|
# This is all pretty hacky right now
|
|
#
|
|
|
|
class CpioManager(object):
|
|
def __init__(self):
|
|
pass
|
|
|
|
def __denit__(self):
|
|
self.close(None)
|
|
|
|
def open(self, cpio):
|
|
self.dir = tempfile.mkdtemp()
|
|
if os.system("cd %s && gzip -dc %s | sudo cpio -id" % (
|
|
self.dir, os.path.abspath(cpio))) != 0:
|
|
raise Exception("Could not unpack cpio %s" % cpio)
|
|
|
|
def add_directory(self, directory):
|
|
if not os.path.isdir(directory):
|
|
raise Exception("Directory %s does not exist" % directory)
|
|
|
|
if os.system("tar -c --exclude '.*~' -C %s . | sudo tar -x -C %s" % (directory, self.dir)) != 0:
|
|
raise Exception("Could not add directory %s" % directory)
|
|
|
|
def makedevs(self, devfile):
|
|
if os.system("sudo %s -d %s %s" % (os.path.join(os.getenv('SWITCHLIGHT'), "tools", "makedevs"), os.path.abspath(devfile), self.dir)) != 0:
|
|
raise Exception("Could not run makedevs")
|
|
|
|
def close(self, ncpio):
|
|
if ncpio:
|
|
os.system("cd %s && find . | sudo cpio -H newc -o | gzip -f > %s" % (self.dir, os.path.abspath(ncpio)))
|
|
os.system("sudo rm -rf %s" % (self.dir))
|
|
self.dir = None
|
|
|
|
def list(self):
|
|
os.system("cd %s && find . -exec ls -l {} \; " % (self.dir))
|
|
|
|
cm = CpioManager()
|
|
cm.open(ops.cpio)
|
|
|
|
if ops.ls:
|
|
cm.list()
|
|
sys.exit(0)
|
|
|
|
for d in ops.add_directory:
|
|
cm.add_directory(d)
|
|
|
|
for md in ops.makedevs:
|
|
cm.makedevs(md)
|
|
|
|
cm.close(ops.out)
|
|
|
|
|
|
|
|
|
|
|