diff options
| -rwxr-xr-x | install-system.sh | 85 | ||||
| -rw-r--r-- | src/verbs/install.py | 155 | ||||
| -rw-r--r-- | src/verbs/update.py | 16 | 
3 files changed, 84 insertions, 172 deletions
| diff --git a/install-system.sh b/install-system.sh deleted file mode 100755 index eeb7e9c..0000000 --- a/install-system.sh +++ /dev/null @@ -1,85 +0,0 @@ -#!/bin/bash - -# This is just a temporary install script that will install xilinux into a folder -# recommended to run with root - -KEY="davidovski https://xi.davidovski.xyz/repo/xi.pub" - -XI_OPTS="-nyl" - -R=$1 - -[ $# -eq 0 ] && echo "Please specify where you would like to instal the system" && exit 1 - -if [ -e $R ]; then -    printf "Remove existing system? [Y/n] " -    read response - -    if [ "$response" != "n" ]; then -        rm -rf $R -        echo "removed $R" -    fi -fi -     - -mkdir -p $R -mkdir -p $R/tmp -mkdir -p $R/dev -mkdir -p $R/sys -mkdir -p $R/run -mkdir -p $R/proc -mkdir -p $R/usr/bin -mkdir -p $R/usr/lib -mkdir -p $R/root - -cd $R -ln -s usr/bin bin -ln -s usr/bin sbin -ln -s usr/bin usr/sbin - -ln -s usr/lib lib -ln -s usr/lib lib64 -ln -s usr/lib usr/lib64 - -ln -s usr/local usr - -xi sync && -xi $XI_OPTS --root . install $(ls /var/lib/xipkg/packages/core) && -xi $XI_OPTS --root . keyimport $KEY && -# chroot into the system to install xipkg and any postinstall scripts -xi $XI_OPTS --root . install xipkg && - -cd ../.. && - -echo "base system installed next to do:" && -echo "    xichroot into system" && -echo "    set hostname at /etc/hostname" && -echo "    configure DNS at /etc/resolv.conf" && -echo "    xi sync" && -echo "    install any additional packages" && -echo "    compile and install kernel" && -echo "    configure and install grub" && -echo "  * hope that the system works!" && -echo "have fun!" && -exit 0; - -echo "something went wrong" -exit 0; - - -## leftover autoconfig scripts - -mkdir -p $R/var/lib/xipkg/ -cp -r /var/lib/xipkg/packages $R/var/lib/xipkg -cp -r /var/lib/xipkg/keychain $R/var/lib/xipkg - -# Autoconfiguring some things like network - -mkdir -p $R/etc -echo "xilinux" > $R/etc/hostname - -cat > $R/etc/resolv.conf << "EOF" -nameserver 80.80.80.80 -nameserver 80.80.81.81 -EOF - diff --git a/src/verbs/install.py b/src/verbs/install.py index 9832e2b..b2fdf51 100644 --- a/src/verbs/install.py +++ b/src/verbs/install.py @@ -301,7 +301,7 @@ def run_post_install(config, verbose=False, root="/"):  def install_single(package, options, config, post_install=True, verbose=False, unsafe=False): -    checksum, sources, repo = find_package(package, config["repos"], +    checksum, sources, repo, size, files = find_package(package, config["repos"],              config["dir"]["packages"], config["sources"])      info = retrieve_package_info( @@ -318,6 +318,85 @@ def install_single(package, options, config, post_install=True, verbose=False, u              config, verbose=verbose, root=options["r"]) +def install_multiple(to_install, args, options, config, terminology=("install", "installed", "installing")): +    v = options["v"] +    unsafe = options["u"] + +    length = 0 +    total_files = 0 +    infos = [] +    for package in to_install: +        util.loading_bar(len(infos), len(to_install), "Gathering package infos") +        checksum, sources, repo, size, filecount = find_package(package, config["repos"], +                config["dir"]["packages"], config["sources"]) + +        if checksum != None: +            info = retrieve_package_info( +                        sources, checksum, package, config, +                        verbose=v, skip_verification=unsafe +                ) + +            # TODO make package_size be written in package info or sync list instead +            length += int(size) +            total_files += int(filecount) + +            infos.append( +                    (package, sources, repo, info) +                    ) + +    divisor, unit = util.get_unit(length) + +    util.loading_bar(len(infos), len(to_install), "Gathered package infos") +    print(colors.RESET) + +    if not options["y"]: +        print(colors.BLUE + f"The following packages will be {terminology[1]}:") +        print(end="\t") +        for d in to_install: +            print(colors.BLUE if d in args else colors.LIGHT_BLUE, d, end="") +        print() + +        print(colors.BLUE + "Total download size: " + colors.LIGHT_BLUE + str(round(length / divisor, 2)) + unit) + +    if options["y"] or util.ask_confirmation(colors.BLUE + "Continue?"): +        # TODO try catch over each package in each stage so that we can know if there are errors + +        downloaded = 0 +        pkg_files = [] +        for package_info in infos: +            (package, sources, repo, info) = package_info + +            package_path, source, key, size = retrieve_package(sources,  +                    info, package, config,  +                    completed=downloaded, total_download=length, +                    verbose=v, skip_verification=unsafe) + +            downloaded += size + +            pkg_files.append( +                    (package, package_path, sources[source], key, repo, info) +                    ) +         +        util.loading_bar(int(length/divisor), int(length/divisor), "Downloaded packages", unit=unit) +        print(colors.RESET) + +        extracted = 0 +        for f in pkg_files: +            util.loading_bar(extracted, total_files, terminology[2].capitalize() + " files") + +            (package, package_path, source, key, repo, info) = f + +            files = install_package(package, package_path, info,  +                    repo, source, key, True, +                    config, verbose=v, root=options["r"]) +            extracted += len(files.split("\n")) + +        util.loading_bar(extracted, total_files, terminology[1].capitalize() + " files") +        print(colors.RESET) +    else: +        print(colors.RED + "Action cancelled by user") + +  def install(args, options, config):      if not options["l"]:          sync(args, options, config) @@ -345,79 +424,7 @@ def install(args, options, config):              print()          if len(to_install) > 0: -            length = 0 -            total_files = 0 -            infos = [] -            for package in to_install: -                util.loading_bar(len(infos), len(to_install), "Gathering package infos") -                checksum, sources, repo, size, filecount = find_package(package, config["repos"], -                        config["dir"]["packages"], config["sources"]) - -                if checksum != None: -                    info = retrieve_package_info( -                                sources, checksum, package, config, -                                verbose=v, skip_verification=unsafe -                        ) - -                    # TODO make package_size be written in package info or sync list instead -                    length += int(size) -                    total_files += int(filecount) - -                    infos.append( -                            (package, sources, repo, info) -                            ) - -            divisor, unit = util.get_unit(length) - -            util.loading_bar(len(infos), len(to_install), "Gathered package infos") -            print(colors.RESET) - -            if not options["y"]: -                print(colors.BLUE + "The following packages will be installed:") -                print(end="\t") -                for d in to_install: -                    print(colors.BLUE if d in args else colors.LIGHT_BLUE, d, end="") -                print() - -                print(colors.BLUE + "Total download size: " + colors.LIGHT_BLUE + str(round(length / divisor, 2)) + unit) - -            if options["y"] or util.ask_confirmation(colors.BLUE + "Continue?"): -                # TODO try catch over each package in each stage so that we can know if there are errors - -                downloaded = 0 -                pkg_files = [] -                for package_info in infos: -                    (package, sources, repo, info) = package_info - -                    package_path, source, key, size = retrieve_package(sources,  -                            info, package, config,  -                            completed=downloaded, total_download=length, -                            verbose=v, skip_verification=unsafe) - -                    downloaded += size - -                    pkg_files.append( -                            (package, package_path, sources[source], key, repo, info) -                            ) -                 -                util.loading_bar(int(length/divisor), int(length/divisor), "Downloaded packages", unit=unit) -                print(colors.RESET) - -                extracted = 0 -                for f in pkg_files: -                    util.loading_bar(extracted, total_files, "Installing files") - -                    (package, package_path, source, key, repo, info) = f - -                    files = install_package(package, package_path, info,  -                            repo, source, key, True, -                            config, verbose=v, root=options["r"]) -                    extracted += len(files.split("\n")) - -                util.loading_bar(extracted, total_files, "Installed files") -                print(colors.RESET) -            else: -                print(colors.RED + "Action cancelled by user") +            install_multiple(to_install, args, options, config)          else:              print(colors.LIGHT_RED + "Nothing to do")      else: diff --git a/src/verbs/update.py b/src/verbs/update.py index 4348637..6fe89f6 100644 --- a/src/verbs/update.py +++ b/src/verbs/update.py @@ -3,7 +3,7 @@ import util  import colors  import time -from verbs.install import find_package, install_single +from verbs.install import find_package, install_multiple  from verbs.sync import sync  VERSION_COMPARED = "CHECKSUM" @@ -26,7 +26,7 @@ def get_available_version(package_name, config, root="/"):      repos = config["repos"]      packages_dir = config["dir"]["packages"]      sources = config["sources"] -    checksum, found_sources, requested_repo = find_package(package_name, repos, packages_dir, sources) +    checksum, found_sources, requested_repo, size, files = find_package(package_name, repos, packages_dir, sources)      return checksum  def update(args, options, config): @@ -41,17 +41,7 @@ def update(args, options, config):          updates = [update for update in updates if update in args]      if len(updates) > 0: -        print(colors.CLEAR_LINE + colors.RESET, end="") -        print(colors.BLUE + "The following packages will be updated:") -        print(end="\t") -        for d in updates: -            print(colors.BLUE if d in args else colors.LIGHT_BLUE, d, end="") -        print() - -        if util.ask_confirmation(colors.BLUE + "Continue?", no_confirm=options["y"]): -            for package in updates: -                install_single(package, options, config, verbose=v, post_install=False, unsafe=options["u"]) -                util.fill_line(f"Updated {package}", colors.BG_CYAN + colors.LIGHT_BLACK, end="\n") +        install_multiple(updates, args, options, config, terminology=("update", "updated", "updating"))      else:          print(colors.LIGHT_RED + "Nothing to do") | 
