1. 05 May, 2019 1 commit
    • Oliver Smith's avatar
      Mount /dev/shm in chroots · 8187c668
      Oliver Smith authored
      Fix configure crash when building mozjs60 by mounting tmpfs as /dev/shm
      in chroots. This is an important fix, because of this dependency chain,
      that is currently broken in armhf and armv7 (see pmaports#244):
      postmarketos-base -> networkmanager -> polkit -> mozjs60
  2. 23 Mar, 2019 1 commit
  3. 02 Jan, 2019 1 commit
  4. 06 Dec, 2018 1 commit
  5. 01 Dec, 2018 1 commit
    • Oliver Smith's avatar
      build.find_aport() -> helpers.pmaports.find() · a44b80b3
      Oliver Smith authored
      Move find_aport() and find_aport_guess_main() from pmb/build/other.py
      to the new file pmb/helpers/pmaports.py.
      Finding aports is not only needed when building packages, hence it
      makes sense to move it out of pmb.build. The pmb/helpers/pmaports.py
      file will have more pmaports related functions in a follow up commit.
  6. 21 Nov, 2018 1 commit
  7. 25 Oct, 2018 2 commits
  8. 17 Sep, 2018 1 commit
  9. 10 Aug, 2018 1 commit
    • Oliver Smith's avatar
      pmb: qemu-user-static from aport, not from Debian · 68e1feef
      Oliver Smith authored
      In order to execute foreign arch binaries on the host system, we are
      using the Linux kernel's binfmt_misc feature in combination with
      static builds of QEMU. Before this patch, the statically compiled
      QEMU binaries were taken from Debian (mostly because I did not realize
      that Alpine ships them as well). Now we can use the ones from the aport.
      This allows us to easily update and patch the QEMU executables, we
      don't need to be in sync with Debian's versions anymore.
      Alpine's package is more modular, so we can save some download,
      install, zap time, as well as disk space: setting up an armhf chroot
      with pmbootstrap took ~102 MB before, now it's ~18 MB.
      Detailed changes:
      * Remove `cross/qemu-user-static-repack` aport
      * Add `data/qemu-user-binfmt.txt` with the binfmt_misc flags for ELF
        binaries of various arches (extracted from Debian's packaging)
      * When parsing that file, don't write verbose messages to
        `pmbootstrap log` anymore, only to the verbose log (can be enabled
        with `pmbootstrap -v`)
      * Rename `pmb.parse.arch.alpine_to_debian()` to ...`alpine_to_qemu()`
      * Rename `arch_debian` to `arch_qemu`
  10. 26 Jul, 2018 1 commit
    • Oliver Smith's avatar
      pmb: adjust to distcc 3.3 and wrap it with sshd · 4844719b
      Oliver Smith authored
      Since Alpine updated to distcc 3.3 last week, pmbootstrap wasn't able to use
      distcc for cross compilation anymore. It always falled back to running the
      compiler in QEMU (which works, but is a lot slower). The reason for that is,
      that distcc requires all compilers that are being used in a whitelist now.
      This partially fixes CVE-2004-2687 in distccd, which allowed trivial remote
      code execution by any process connecting to the distccd server. We only run
      distccd on localhost, but still this can be used for privilege escalation of
      sandboxed processes running on the host system (not part of pmbootstrap
      Because the CVE is only partially fixed (see the comment in
      `pmb/chroot/distccd.py` for details), we make sure that only the building
      chroots can talk to the distcc server by running distcc over ssh.
      * Completely refactored `pmb/chroot/distccd.py` to run distcc over ssh
        * Store the running distcc server's arguments as JSON now, not as INI
      * Make debugging distcc issues easy:
        * Set DISTCC_BACKOFF_PERIOD=0, so the distcc client will not ignore the
          server after errors happened (this masks the original error!)
        * New pmbootstrap parameters:
          * `--distcc-nofallback`: avoids falling back to compiling with QEMU and not
      	   throwing an error
      	* `--ccache-disable`: avoid ccache (when the compiler output is cached,
      	  distcc does not get used)
        * `--verbose` prints verbose output of the distcc too
        * New test case, that uses the new pmbootstrap parameters to force
      	compilation through distcc, and shows the output of distcc and distccd in
      	verbose mode on error (as well as the log of sshd)
  11. 15 Jul, 2018 1 commit
    • Oliver Smith's avatar
      pmb: fix test suite not running through twice · cca5c9aa
      Oliver Smith authored
      The test suite needed a `pmbootstrap shutdown` after running through,
      before it could successfully run again.
      This was caused by `test/test_pkgrel_bump.py`, which creates a
      temporary work folder with every subfolder ("chroot_native",
      "cache_apk_x86_64", ...) linked to the original work folder except for
      the "packages" folder. At the end of the test case,
      `pmbootstrap shutdown` gets executed and is expected to umount
      everything as usual. But it does not umount anything because of the
      symlinks, so `work/chroot_native/mnt/pmbootstrap-packages` points to
      the fake packages folder of that test case, even after it is finished.
      As a result, any test case that tries to access the packages folder in
      the native chroot, will fail until `pmbootstrap shutdown` gets called.
      Detailed Changes:
      * Umount all folders inside the work folder, even if these are symlinks
      * Remove obsolete reference to "disable timestamp based rebuilds" in a
        comment in `test/test_pkgrel_bump.py`
      * Run `pmbootstrap work_migrate` and `pmbootstrap shutdown` at the
        beginning of `test/testcases_fast.sh`, in case the pkgrel_bump test
        case was aborted before it could properly shutdown and to make it
        more robust in general (user may have changed the mountpoints, work
        folder may need to be migrated)
  12. 14 Jul, 2018 1 commit
  13. 09 Jun, 2018 1 commit
    • steamport's avatar
      menuconfig: add gconfig/xconfig support (#1509) · 30df0725
      steamport authored
      * change "pmbootstrap kconfig_check" to "pmbootstrap kconfig check"
      * change "pmbootstrap menuconfig" to "pmbootstrap kconfig edit [-x|-g]"
        (with legacy alias, because the first syntax was referenced to a lot)
      * enable X11 interfaces: -x: xconfig, -g: gconfig
      * new function to copy the xauthority file:
      * remove menufconfig() function from the kernel template and all kernel
        aports ([skip ci] because it would rebuild all kernels and run out of
        time). Alpine has dropped this as well, and it wouldn't work with the
        new code anyway.
  14. 29 Apr, 2018 1 commit
    • Oliver Smith's avatar
      Recreate device nodes in chroot after shutdown (#1447) · 4e665a21
      Oliver Smith authored
      Device nodes in the chroots get created in a tmpfs, so they can be
      created even if the filesystem where the chroot resides does not
      support device nodes (#1317). In "pmbootstrap shutdown" we umount the
      `dev` folder, which means all device nodes that were created inside
      this folder are gone. This commit changes the code to actually recreate
      the device nodes when using the chroot again.
      * move `pmb.chroot.init.create_device_nodes` to
      * don't call it in `pmb.chroot.init()` anymore, but in
      * Create the `null` device as well (`apk --initdb` also creates it on
        `init`, but we don't call it after `shutdown`)
  15. 11 Apr, 2018 1 commit
  16. 03 Apr, 2018 1 commit
    • Oliver Smith's avatar
      pmbootstrap init: kernel selection / remove linux-pmos-lts (#1363) · b66b5dcc
      Oliver Smith authored
      * As discussed in IRC/matrix, we're removing `linux-postmarketos-lts`
        for now. The kernel isn't used right now, and we save lots of
        maintenance effort with not updating it every week or so.
      * new config option `"kernel"` with possible values:
        `"downstream", "mainline", "stable"` (downstream is always
      * ask for the kernel during `pmbootstrap init` if the device package
        has kernel subpackages and install it in `_install.py`
      * postmarketos-mkinitfs: display note instead of exit with error when
        the `deviceinfo_dtb` file is missing (because we expect it to be
        missing for downstream kernels)
      * device-sony-amami:
        * add kernel subpackages for downstream, mainline
        * set `deviceinfo_dtb`
      * device-qemu-amd64: add kernel subpackages for stable, lts, mainline
      * test cases and test data for new functions
      * test case that checks all aports for right usage of the feature:
        * don't mix specifying kernels in depends *and* subpackages
        * 1 kernel in depends is maximum
        * kernel subpackages must have a valid name
        * Test if devices packages reference at least one kernel
      * Remove `_build_device_depends_note()` which informs the user that
        `--ignore-depends` can be used with device packages to avoid building
        the kernel. The idea was to make the transition easier after a change
        we did months ago, and now the kernel doesn't always get built before
        building the device package so it's not relevant anymore.
      * pmb/chroot/other.py:
        * Add autoinstall=True to kernel_flavors_installed(). When the flag
          is set, the function makes sure that at least one kernel for the
          device is installed.
        * Remove kernel_flavor_autodetect() function, wherever it was used,
          it has been replaced with kernel_flavors_installed()[0].
      * pmb.helpers.frontend.py: remove code to install at least one kernel,
        kernel_flavors_installed() takes care of that now.
  17. 11 Mar, 2018 1 commit
    • Oliver Smith's avatar
      aportgen: Gracefully handle old aports_upstream (#1291) · b8f35d45
      Oliver Smith authored
      In order to get cross-compilers, we generate a few aports (e.g.
      binutils-armhf, gcc-armhf) automatically from Alpine's aports.
      pmbootstrap was already able to perform a git checkout of Alpine's
      aports repository. But it needed to be manually updated. Otherwise
      the `pmbootstrap aportgen` command could actually downgrade the aport
      instead of updating it to the current version.
      After thinking about adding a dedicated pmbootstrap command for
      updating git repositories, I thought it would be better to not open
      that can of worms (pmbootstrap as general git wrapper? no thanks).
      The solution implemented here compares the upstream aport version of
      the git checkout of a certain package (e.g. gcc for gcc-armhf) with the
      version in Alpine's binary package APKINDEX. When the aport version is
      lower than the binary package version, it shows the user how to update
      the git repository with just one command:
          pmbootstrap chroot --add=git --user -- \
              git -C /mnt/pmbootstrap-git/aports_upstream pull
      * `pmb.aportgen.core.get_upstream_aport()`: new function, that returns
        the absolute path to the upstream aport on disk, after checking the
        version of the aport against the binary package.
      * Use that new function in pmb.aportgen.gcc and pmb.aportgen.binutils
      * New function `pmb.helpers.repo.alpine_apkindex_path()`: updates the
        APKINDEX if necessary and returns the absolute path to the APKINDEX.
        This code was basically present already, but not as function, so now
        we have a bit less overhead there.
      * `pmbootstrap chroot`: new `--user` argument
      * `pmb.parse.apkbuild`: make pkgname check optional, as it fails with
        the official gcc APKBUILD before we modify it (the current APKBUILD
        parser is not meant to be perfect, as this would require a full shell
        parsing implementation).
      * Extended `test_aportgen.py` and enabled it by default in
        `testcases_fast.sh`.  Previously it was disabled due to traffic
        concerns (cloning the aports repo, but then again we do a full KDE
        plasma mobile installation in Travis now, so that shouldn't matter
        too much).
      * `testcases_fast.sh`: With "test_aport_in_sync_with_git" removed
        from the disabled-by-default list (left over from timestamp based
        rebuilds), there were no more test cases disabled by default. I've
        changed it, so now the qemu_running_processes test case is disabled,
        and added an `--all` parameter to the script to disable no test
        cases. Travis runs with the `--all` parameter while it's useful to
        do a quick local test without `--all` in roughly 2 minutes instead of
      * `aports/cross/binutils-*`: Fix `_mirror` variable to point to current
        default Alpine mirror (so the aportgen testcase runs through).
  18. 10 Mar, 2018 3 commits
    • Oliver Smith's avatar
      Properly escape commands in pmb.chroot.user() (#1316) · 36663886
      Oliver Smith authored
      ## Introduction
      In #1302 we noticed that `pmb.chroot.user()` does not escape commands
      properly: When passing one string with spaces, it would pass them as
      two strings to the chroot. The use case is passing a description with
      a space inside to `newapkbuild` with `pmboostrap newapkbuild`.
      This is not a security issue, as we don't pass strings from untrusted
      input to this function.
      ## Functions for running commands in pmbootstrap
      To put the rest of the description in context: We have four high level
      functions that run commands:
      * `pmb.helpers.run.user()`
      * `pmb.helpers.run.root()`
      * `pmb.chroot.root()`
      * `pmb.chroot.user()`
      In addition, one low level function that the others invoke:
      * `pmb.helpers.run.core()`
      ## Flawed test case
      The issue described above did not get detected for so long, because we
      have a test case in place since day one, which verifies that all of the
      functions above escape everything properly:
      * `test/test_shell_escape.py`
      So the test case ran a given command through all these functions, and
      compared the result each time. However, `pmb.chroot.root()`
      modified the command variable (passed by reference) and did the
      escaping already, which means `pmb.chroot.user()` running directly
      afterwards only returns the right output when *not* doing any escaping.
      Without questioning the accuracy of the test case, I've escaped
      commands and environment variables with `shlex.quote()` *before*
      passing them to `pmb.chroot.user()`. In retrospective this does not
      make sense at all and is reverted with this commit.
      ## Environment variables
      By coincidence, we have only passed custom environment variables to
      `pmb.chroot.user()`, never to the other high level functions. This only
      worked, because we did not do any escaping and the passed line gets
      executed as shell command:
      $ MYENV=test echo test2
      test 2
      If it was properly escaped as one shell command:
      $ 'MYENV=test echo test2'
      sh: MYENV=test echo test2: not found
      So doing that clearly doesn't work anymore. I have added a new `env`
      parameter to `pmb.chroot.user()` (and to all other high level functions
      for consistency), where environment variables can be passed as a
      dictionary. Then the function knows what to do and we end up with
      properly escaped commands and environment variables.
      ## Details
      * Add new `env` parameter to all high level command execution functions
      * New `pmb.helpers.run.flat_cmd()` function, that takes a command as
        list and environment variables as dict, and creates a properly escaped
        flat string from the input.
      * Use that function for proper escaping in all high level exec funcs
      * Don't escape commands *before* passing them to `pmb.chroot.user()`
      * Describe parameters of the command execution functions
      * `pmbootstrap -v` writes the exact command to the log that was
        executed (in addition to the simplified form we always write down for
      * `test_shell_escape.py`: verify that the command passed by reference
        has not been modified, add a new test for strings with spaces, add
        tests for new function `pmb.helpers.run.flat_cmd()`
      * Remove obsolete commend in `pmb.chroot.distccd` about environment
        variables, because we don't use any there anymore
      * Add `TERM=xterm` to default environment variables in the chroot,
        so running ncurses applications like `menuconfig` and `nano` works out of
        the box
    • Oliver Smith's avatar
    • Oliver Smith's avatar
      pmbootstrap zap -m: delete outdated packages too (#1306) · e72afc53
      Oliver Smith authored
      `-m` is for deleting local compiled packages, for which there is no
      aport with the same version. Prior to this change, this only worked
      for packages where no aport exists, or for packages that are newer
      than the aports.
      That is, because we used the usual APKINDEX parsing logic, which
      ignores old packages in the APKINDEX and only returns the one with the
      highest version (that makes sense during dependency resolution).
      * New `pmb.parse.apkindex.parse_blocks()` function that returns a raw
        list of blocks, instead of the dict with removed duplicates with
        lower version you get from the usual `.parse()` function.
      * Renamed each of the zap flags and their descriptions to make clear
        what they are doing now.
        short  long (old)         long (new)
        -p     --packages         --pkgs-local
        -m     --mismatch-bins    --pkgs-local-mismatch
        -o,    --old-bins         --pkgs-online-mismatch
  19. 04 Mar, 2018 2 commits
    • Oliver Smith's avatar
      convert dict.keys() to list() (#1290) · ac2a0b27
      Oliver Smith authored
    • Oliver Smith's avatar
      Only download APKINDEX for relevant architectures (#1201) · 99127111
      Oliver Smith authored
      ### Only download APKINDEX for relevant architectures
      We're downloading the APKINDEX files for all architectures supported by
      postmarketOS currently (x86, x86_64, armhf, aarch64). Most of the time,
      we only need it for the native and device arch, so this PR reduces the
      downloaded files to what is really necessary.
      ### Intuitive pmbootstrap update logic
      * pmb.helpers.repo.update():
        * Default is updating all arches where the APKBUILD files exist
        * Add existing_only parameter
        * Return True when files have been downloaded
        * Properly print which arches will be updated
        * Print update reason only in verbose log
        * Add and improve comments
      * pmb.parse.arguments(), update action:
        * Add --non-existing parameter
        * Default for --arch is None (instead of arch.native)
      * pmb.helpers.frontend.update():
        * Inform about --non-existing if no APKBUILDs have been updated
  20. 25 Feb, 2018 1 commit
    • Oliver Smith's avatar
      Don't mark all packages as explicitly installed (#1247) · 937686d1
      Oliver Smith authored
      pmbootstrap does dependency resolving on its own, and passes the list
      of resolved packages to apk when we want it to install something. The
      reason was outlined in #129:
      > fixing #120: packages do not get updated in "pmbootstrap install"
      > after they have been rebuilt. For this to work, we specify all
      > packages explicitly for abuild, instead of letting abuild do the
      > resolving.
      This new PR fixes #1212 (which noted that all of these dependencies
      were explicitly marked for installation) by doing the following:
      1. All packages and dependencies get attached to the virtual package
        .pmbootstrap instead of world
      2. We install the packages (without depends) explcitly
      3. .pmbootstrap gets removed, which means that all packages from 1.
        stay installed, but are no longer marked as explicitly installed.
        They will get removed automatically, when the depending packages get
      In addition, the mechanism for replacing the package of locally built
      packages with their full path, was broken and has been fixed in this
      commit. This is necessary to update packages of the same version with
  21. 20 Feb, 2018 2 commits
    • Oliver Smith's avatar
      zap_mismatch_bins: Adjust to new apkindex parsing · 90ca7b63
      Oliver Smith authored
      Without this fix, `pmbootstrap zap -m` fails with:
        File "/home/user/code/pmbootstrap/pmb/__init__.py", line 61, in main
          getattr(frontend, args.action)(args)
        File "/home/user/code/pmbootstrap/pmb/helpers/frontend.py", line 322, in zap
        File "/home/user/code/pmbootstrap/pmb/chroot/zap.py", line 54, in zap
          zap_mismatch_bins(args, confirm, dry)
        File "/home/user/code/pmbootstrap/pmb/chroot/zap.py", line 110, in zap_mismatch_bins
          if pkgname != bin_data["pkgname"]:
      KeyError: 'pkgname'
    • Oliver Smith's avatar
      Index parser: support multiple package providers (#1202) · db5e6963
      Oliver Smith authored
      * The APKINDEX parser used to return a dictionary with one package for
        a given package name. This works for the installed packages database,
        because there can only be one provider for a package. But when
        parsing packages from binary repositories, we need to support
        multiple providers for one package. It is now possible to get a
        dictionary with either multiple providers, or just a single provider
        for each package.
      * Dependency parsing logic has been adjusted, to support multiple
        providers. For multiple providers, the one with the same package
        name as the package we are looking up is prefered. If there is none
        (eg. "so:libEGL.so.1" is provided by "mesa-egl"), it prefers packages
        that will be installed anyway, and after that packages that are
        already installed. When all else fails, it just picks the first one
        and prints a note in the "pmbootstrap log".
      * Added testcases for all functions in pmb.parse.apkindex and
      * pmbootstrap chroot has a new "--add" parameter to specify packages
        that pmbootstrap should build if neccessary, and install in the
        chroot. This can be used to quickly test the depencency resolution
        of pmbootstrap without doing a full "pmbootstrap install".
      Fixes #1122.
  22. 17 Feb, 2018 1 commit
  23. 09 Feb, 2018 1 commit
    • Oliver Smith's avatar
      Fix screwed up progress bars in Travis output (#1213) · 3fe75ddb
      Oliver Smith authored
      Right now, they appear on screen when using --details-to-stdout. This
      does not work well with Travis CI and screws up the log.
      Disabling the progress bars in abuild works just like Alpine does it in
      their Travis CI script: Exporting SUDO_APK as
      "abuild-apk --no-progress" instead of "abuild-apk".
      test_check_checksums.py: Run "pmbootstrap build_init" before building
      any packages, so it is a bit less verbose (downloading the APKINDEX
      files etc.). Later we run the build init code again (because we use
      --strict while building the packages), but then the APKINDEX files
      are already present. So overall the log is a bit shorter before the
      building starts. (It is still logged to the logfile, which gets
      printed on error anyway.)
  24. 31 Jan, 2018 1 commit
    • Oliver Smith's avatar
      Fix pmbootstrap zap -m / various zap improvements (#1166) · 0f5056f6
      Oliver Smith authored
      zap -m:
      * APKINDEX parsing: parse the "origin" field as well, so we know
        where a subpackage comes from
      * pmbootstrap zap -m: properly delete all packages, that do not
        have an aport or where the aport has another version. This also
        works with subpackages now,
        we use the origin field to resolve it.
      * Only reindex when packages have been deleted in "zap -m"
      zap in general:
      * Show the amount of cleared up space after the deletion instead
        of "Done"
      * Print "Shutdown complete" to "pmbootstrap log" instead of stdout
        (we need to call it twice during zap now to get the space
        calculation right)
      * Add `--dry` argument to `pmbootstrap zap` (this was very useful
        for debugging) to list the packages/chroots that would get
      * Roughly output the command that would get executed to delete
        files, so it's obvious what's going on in --dry mode. (% rm ...)
  25. 23 Jan, 2018 2 commits
    • Oliver Smith's avatar
      Fix error message suggesting to run invalid command "zap -a" (#1132) · e5ed3f86
      Oliver Smith authored
      The message showed up, when you apk-static download could not be
      verified. What the user needs to do instead is checking if openssl
      is installed, and possibly delete the http cache ("zap -hc").
    • Oliver Smith's avatar
      Improved pmbootstrap init (#1095) · 3c8a93fa
      Oliver Smith authored
      This PR makes the workflow faster and pmbootstrap will
      produce less traffic. Details:
      * Check if it's possible to create and read from a device
        node directly when initializing a chroot (closes #472)
      * Copy the Qemu binary into the forign-arch chroots
        before initializing them, so the post-install script
        directly work during the chroot setup and we don't need
        to call apk fix afterwards
      * Use pmb.helpers.repo.update(), which only updates the
        APKINDEX files if they are older than 4 hours, instead
        of using apk's repo update function which always
        downloads the APKINDEX files
      * Chroot initialization
        * Getting the initial APKINDEX to download apk-tools-static
        * Updating the APKINDEX at the start of pmbootstrap install
      * Fixed a bug in from_chroot_suffix: the buildroot_x86_64 has
        architecture x86_64, not x86.
  26. 06 Jan, 2018 1 commit
  27. 04 Jan, 2018 1 commit
  28. 21 Dec, 2017 1 commit
    • Oliver Smith's avatar
      ccache: Fix for distcc cross-compiling / various improvements (#1026) · 567ac64e
      Oliver Smith authored
      * ccache: Fix for distcc cross-compiling / various improvements
      * Make ccache work when cross-compiling with distcc (fix #716)
      * Allow to configure the ccache size in "pmbootstrap init"
      * Moved ccache stats code from pmb/build/other.py to
      * Grouped job count, ccache size and timestamp based rebuilds
        together to "build options" and allow to skip them
      * Sorted config options that had to be modified anyway
      * Improve comment in arch-bin-masquerade APKBUILD
  29. 30 Nov, 2017 1 commit
  30. 26 Nov, 2017 1 commit
    • Oliver Smith's avatar
      Fix #824: Refactor pmb/build/package.py (make depends work like in abuild) (#935) · d3c77c39
      Oliver Smith authored
      * Rename pmb/build/package.py to pmb/build/_package.py, so we can
        access the functions it contains in testcases, and still use
      * Refactor the entire file. Instead of one big function that does
        too many things, we have many small ones now, that are tested
        in the testsuite and easier to modify
      * Whenever building a package, pmbootstrap does not only build and
        install the "makedepends" (like we did before), now it does the
        same for the "depends". That's required to be compatible with
        abuild. The old behavior can still be used with 'pmbootstrap
        build --ignore-depends'.
      * Because of that change, noarch packages can no longer be built in
        the native chroot if we need them for a foreign chroot. A device-
        package depending on a kernel would pull in the same kernel for
        the native architecture otherwise.
      * Running 'pmbootstrap build device-...' without '--ignore-depends'
        and without a matching '--arch' displays a note that explains
        this change to the user and tells how to use it instead.
      * Noarch packages no longer get symlinked. That was only
        implemented for packages built in the native chroot, and now that
        is not always the case anymore. Symlinking these packages creates
        packages with broken dependencies anyway (e.g.
        device-samsung-i9100 can't be installed in x86_64, because
        linux-samsung-i9100 is armhf only).
      * Rename "carch" to "arch" wherever used. Naming it "carch"
        sometimes is confusing with no benefit.
      * Add a testcase for the aarch64 qemu workaround (because it failed
        first and I needed to know for sure if it is working again).
      * Improved some verbose logging, which helped with development of
        this feature.
      * Removed the old "build" test case (which was disabled in
        testcases_fast.sh) as the new "build_package" test case covers its
      * Only build indexes if the packages folder exists for that arch (Travis
        couldn't run a test case otherwise)
  31. 04 Nov, 2017 2 commits
  32. 02 Nov, 2017 1 commit
  33. 25 Oct, 2017 1 commit