コード例 #1
0
def main():
    logger = CLILogger()

    parser = argparse.ArgumentParser(description="SD-card Wiping Tool")
    parser.add_argument("--sdcard", help="Device path for the SD-card", required=True)
    # defaults to help
    args = parser.parse_args(["--help"] if len(sys.argv) < 2 else None)

    sys.exit(wipe_card(logger, sd_card=args.sdcard))
コード例 #2
0
ファイル: cache.py プロジェクト: iamKaartik/kiwix-hotspot
def main():
    def default(logger, build_folder, cache_folder, **kwargs):
        parser.parse_args(["--help"])

    parser = argparse.ArgumentParser(
        description="Cache Folder management tool")
    parser.add_argument("--build",
                        help="Build Folder containing the cache one",
                        required=True)
    parser.set_defaults(func=default)
    subparsers = parser.add_subparsers()

    parser_show = subparsers.add_parser("show", help="List files in cache")
    parser_show.set_defaults(func=list_cache_files)

    parser_clean = subparsers.add_parser(
        "clean", help="Remove obsolete files from cache")
    parser_clean.set_defaults(func=clean_cache)

    parser_reset = subparsers.add_parser("reset",
                                         help="Reset cache folder completely")
    parser_reset.set_defaults(func=reset_cache)
    parser_reset.add_argument(
        "--keep-master",
        help="Keep the latest master image if it exists",
        action="store_true",
    )

    # defaults to help
    args = parser.parse_args(["--help"] if len(sys.argv) < 2 else None)

    logger = CLILogger()
    build_folder = args.build
    if not os.path.exists(build_folder) or not os.path.isdir(build_folder):
        logger.err("Build folder is not a directory.")
        sys.exit(1)
    cache_folder = get_cache(build_folder)

    # ensure we have a proper list of contents and packages to match against
    init(logger)

    sys.exit(args.func(logger, build_folder, cache_folder, **args.__dict__))
コード例 #3
0
def flash_image_with_etcher(image_fpath,
                            device_fpath,
                            retcode,
                            from_cli=False):
    """ flash an image onto SD-card

        use only with small image as there is no output capture on OSX
        and it is not really cancellable.
        retcode is a multiprocessing.Value """
    logger = CLILogger()
    cmd, log_to_file, log_file = get_etcher_command(image_fpath, device_fpath,
                                                    logger, from_cli)
    returncode, _ = subprocess_pretty_call(cmd, check=False, logger=logger)
    retcode.value = returncode
    if log_to_file:
        try:
            subprocess_pretty_call(["/bin/cat", log_file.name], logger)
            log_file.close()
            os.unlink(log_file.name)
        except Exception as exp:
            logger.err(str(exp))
    return returncode == 0
コード例 #4
0
def get_package_content(package_id):
    """ content-like dict for packages (zim file or static site) """
    for catalog in get_catalogs(CLILogger()):
        try:
            package = catalog["all"][package_id]
            package.update(
                {"ext": "zip" if package["type"] != "zim" else "zim"})
            package.update({"langid": package.get("langid") or package_id})
            return {
                "url":
                package["url"],
                "name":
                "{langid}.{ext}".format(**package),
                "checksum":
                package["sha256sum"],
                "archive_size":
                package["size"],
                # add a 10% margin for non-zim (zip file mostly)
                "expanded_size":
                package["size"] *
                1.1 if package["type"] != "zim" else package["size"],
            }
        except KeyError:
            continue
コード例 #5
0
ファイル: image.py プロジェクト: iamKaartik/kiwix-hotspot
    error = run_in_qemu(image_fpath, disk_size, root_size, logger,
                        CancelEvent(), qemu_ram)

    if error:
        logger.err("ERROR: unable to properly create image: {}".format(error))
        sys.exit(1)

    logger.std("SUCCESS! {} was built successfuly".format(image_fpath))


parser = argparse.ArgumentParser(
    description="Kiwix Hotspot master image creator")
parser.add_argument("--root", help="root partition size (GB)", default=7)
parser.add_argument("--size", help="Image (SD card) size (GB)", default=8)
parser.add_argument("--build",
                    help="Folder to create files in",
                    default=os.path.abspath("."))
parser.add_argument("--ram", help="RAM to be used by QEMU", default="2G")
parser.add_argument("--out", help="Master image filename (inside --build)")
args = parser.parse_args()

main(
    logger=CLILogger(),
    disk_size=args.size,
    root_size=args.root,
    build_folder=args.build,
    image_fname=args.out,
    qemu_ram=args.ram,
)
コード例 #6
0
from util import CancelEvent
from util import check_user_inputs
from version import get_version_str
from util import CLILogger, b64decode
from util import get_free_space_in_dir
from util import get_adjusted_image_size
from backend.catalog import get_catalogs
from run_installation import run_installation
from util import human_readable_size, get_cache
from backend.util import sd_has_single_partition, is_admin

import tzlocal
import humanfriendly

CANCEL_TIMEOUT = 5
logger = CLILogger()
logger.std("Kiwix Hotspot {v}".format(v=get_version_str()))


def set_config(config, args):
    def get_choices(option):
        return [x for x in parser._actions if x.dest == option][-1].choices

    def setif(key, value):
        if getattr(args, key, None) is None:
            setattr(args, key, value)

    if not isinstance(config, dict):
        return

    # direct arguments