diff --git a/.gitignore b/.gitignore index 2fffe83..4043516 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,13 @@ -build/* -config/keys/* +build config/env/* -config/container/Dockerfile.* +config/container/Dockerfile-* +config/manifests/**/*.yml release/* + +# Old path, please manually move to new path. +config/keys + +# New keys path. +keys + .* diff --git a/Makefile b/Makefile index 8edd221..cdb15fc 100644 --- a/Makefile +++ b/Makefile @@ -1,17 +1,21 @@ +SHELL = /bin/bash -o nounset -o pipefail -o errexit +MAKEFLAGS += --no-builtin-rules +.SUFFIXES: + ## Argument Variables ## -CPUS := $(shell nproc) -MEMORY := 10000 -DISK := 300000 -DEVICE := -BACKEND := local -CHANNEL := beta -BUILD := user -FLAVOR := aosp -IMAGE := hashbang/aosp-build:latest -IMAGE_OPTIONS := -NAME := aosp-build-$(FLAVOR)-$(BACKEND) -SHELL := /bin/bash +CPUS = $(shell nproc) +MEMORY = 10000 +DISK = 300000 +DEVICE = +BACKEND = local +CHANNEL = beta +FLAVOR = aosp +IMAGE = hashbang/aosp-build:latest +IMAGE_OPTIONS = +RUN_OPTIONS = +NAME = aosp-build-$(FLAVOR)-$(BACKEND) +REQUIRED_FREE_SPACE_IN_GIB = 120 -include $(PWD)/config/env/$(BACKEND).env @@ -25,20 +29,24 @@ default: machine image fetch tools keys build release ## Primary Targets ## .PHONY: fetch -fetch: submodule-update machine image +fetch: $(contain) fetch .PHONY: keys keys: - $(contain) keys + $(contain-keys) keys + +.PHONY: review +review: + $(contain) review .PHONY: build -build: +build: ensure-enough-free-disk-space $(contain) build .PHONY: release release: - $(contain) release + $(contain-keys) release .PHONY: publish publish: @@ -52,28 +60,41 @@ clean: mrproper: storage-delete machine-delete rm -rf build - ## Secondary Targets ## +config/container/Dockerfile: config/container/Dockerfile.j2 config/container/render_template + ./config/container/render_template "$<" "{\"tags\":[]}" > "$@" + +## Support for different Docker image variants. +config/container/Dockerfile-golang: +config/container/Dockerfile-latest: +config/container/Dockerfile-%: config/container/Dockerfile.j2 config/container/render_template + ./config/container/render_template "$<" "{\"tags\":[\"$*\"]}" > "$@" + .PHONY: image -image: +image: config/container/Dockerfile $(docker) build \ --tag $(IMAGE) \ - --file $(PWD)/config/container/Dockerfile \ + --file "$(PWD)/$<" \ $(IMAGE_OPTIONS) \ $(PWD) -config/container/Dockerfile.minimal: config/container/Dockerfile config/container/render_template - ./config/container/render_template "$<" | grep -v '^#\s*$$' > "$@" - -.PHONY: image-minimal -image-minimal: config/container/Dockerfile.minimal +.PHONY: image-% +image-golang: +image-latest: +image-%: config/container/Dockerfile-% $(docker) build \ --tag $(IMAGE) \ --file "$(PWD)/$<" \ $(IMAGE_OPTIONS) \ $(PWD) +## Note that the `image-latest` target should be used for pinning. +.PHONY: config/container/packages-pinned.list +config/container/packages-pinned.list: + $(contain-no-tty) pin-packages > "$@" + + .PHONY: tools tools: mkdir -p config/keys build/base release build/external @@ -97,14 +118,14 @@ kernel: .PHONY: latest latest: config submodule-latest fetch -.PHONY: manifest -manifest: config - $(contain) bash -c "source <(environment) && manifest" - .PHONY: config config: $(contain) bash -c "source <(environment) && config" +.PHONY: manifest +manifest: + $(contain) bash -c "source <(environment) && manifest" + .PHONY: test-repro test-repro: $(contain) test-repro @@ -114,18 +135,16 @@ test: test-repro .PHONY: patches patches: - @$(contain) bash -c "cd base; repo diff --absolute" + @$(contain) bash -c "cd build/base && repo diff --absolute" .PHONY: shell shell: - $(docker) inspect "$(NAME)" \ - && $(docker) exec --interactive --tty "$(NAME)" shell \ - || $(contain) shell + $(docker) exec --interactive --tty "$(NAME)" shell \ + || $(contain) shell .PHONY: monitor monitor: - $(docker) inspect "$(NAME)" \ - && $(docker) exec --interactive --tty "$(NAME)" htop + $(docker) exec --interactive --tty "$(NAME)" htop .PHONY: install install: tools @@ -250,22 +269,63 @@ endif userid = $(shell id -u) groupid = $(shell id -g) docker_machine = docker-machine --storage-path "${PWD}/build/machine" -contain := \ + +# Can be used mount aosp-build directory to /opt/aosp-build to allow fast +# development without the need to rebuild the container image all the time. +# See HashbangMobile for example. +contain-base-extend = + +contain-base = \ $(docker) run \ --rm \ - --tty \ --interactive \ --name "$(NAME)" \ --hostname "$(NAME)" \ --user $(userid):$(groupid) \ --env DEVICE=$(DEVICE) \ + --privileged \ --security-opt seccomp=unconfined \ --volume $(PWD)/config:/home/build/config \ --volume $(PWD)/release:/home/build/release \ --volume $(PWD)/scripts:/home/build/scripts \ - $(storage_flags) \ + $(contain-base-extend) \ + $(RUN_OPTIONS) \ + --shm-size="1g" \ + $(storage_flags) + +contain-no-tty = \ + $(contain-base) \ + $(IMAGE) + +contain-keys = \ + $(contain-base) \ + --tty \ + --volume $(PWD)/keys:/home/build/keys \ + $(IMAGE) + +contain = \ + $(contain-base) \ + --tty \ $(IMAGE) +## Helpers ## + +ensure-git-status-clean: + @if [ -z "$(shell git status --porcelain=v2)" ]; then \ + echo "git status has no output. Working tree is clean."; \ + else \ + git status; \ + echo "Working tree is not clean as required. Exiting."; \ + exit 1; \ + fi + +ensure-enough-free-disk-space: + @free_space=$(shell df -k --output=avail "$$PWD" | tail -n1); \ + needed_free_space=$$(( $(REQUIRED_FREE_SPACE_IN_GIB) * 1024 * 1024 )); \ + if [[ $$free_space -lt $$needed_free_space ]]; then \ + echo "Not enought free space. $(REQUIRED_FREE_SPACE_IN_GIB) GiB are required." 1>&2; \ + exit 1; \ + fi ## Required Binary Check ## diff --git a/README.md b/README.md index 4b4a20c..5a29591 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ of the Makefile and config.yml from this repo, along with any desired patches. ## Support ## -Please join us on IRC: ircs://irc.hashbang.sh/#!os +Please join us on IRC: ircs://irc.hashbang.sh/#!mobile ## Features ## @@ -42,72 +42,12 @@ Please join us on IRC: ircs://irc.hashbang.sh/#!os ## Install ## -### Requirements ### +Refer to [GrapheneOS CLI install]. - * [Android Developer Tools][4] +[GrapheneOS CLI install]: https://grapheneos.org/install/cli -[4]: https://developer.android.com/studio/releases/platform-tools +### Notes -### Connect - - 1. Go to "Settings > About Phone" - 2. Tap "Build number" 7 times. - 3. Go to "Settings > System > Advanced > Developer options" - 4. Enable "USB Debugging" - 5. Connect to device to laptop via short USB C cable - 6. Hit "OK" on "Allow USB Debugging?" prompt on device if present. - 7. Verify ADB connectivity - ``` - adb devices - ``` - Note: Should return something like: "7CKY1QD3F device" - -### Flash - - 1. Extract - - ``` - unzip crosshatch-PQ1A.181205.006-factory-1947dcec.zip - cd crosshatch-PQ1A.181205.006 - ``` - - 2. [Connect](#Connect) - 3. Go to "Settings > System > Advanced > Developer options" - 4. Enable "OEM Unlocking" - 5. Unlock the bootloader via ADB - - ``` - adb reboot bootloader - fastboot flashing unlock - ``` - Note: You must manually accept prompt on device. - - 6. Flash new factory images - - ``` - ./flash-all.sh - ``` - -### Harden - - 1. [Connect](#Connect) - 2. Lock the bootloader - ``` - adb reboot bootloader - fastboot flashing lock - ``` - 3. Go to "Settings > About Phone" - 4. Tap "Build number" 7 times. - 5. Go to "Settings > System > Advanced > Developer options" - 6. Disable "OEM unlocking" - 7. Reboot - 8. Verify boot message: "Your device is loading a different operating system" - 9. Go to "Settings > System > Advanced > Developer options" - 10. Verify "OEM unlocking" is still disabled - -#### Notes - - * Failure to run these hardening steps means -anyone- can flash your device. * Past this point if signing keys are lost, all devices are bricked. Backup! ### Update ### @@ -126,11 +66,27 @@ Please join us on IRC: ircs://irc.hashbang.sh/#!os ## Build ## +Most of the dependencies are "contained". Only minimal software requirements +exist for the controlling host that cannot be contained easily because of the +bootstrapping problem: + +* GNU core utilities +* GNU Make +* Python 3 dependencies: jinja2 + +They should be packaged by your distribution under the following names (adjust +slight distro differences yourself): + +``` +coreutils make python3 python3-jinja2 +``` + ### Backends ### #### Local ##### Requirements + * Docker 10+ * x86_64 CPU * 10GB+ available memory @@ -250,13 +206,41 @@ make diff > patches/my-feature.patch make install ``` -#### Update #### +### Release ### -Build latest config from upstream sources: +1. Update references to latest upstream sources. -``` -make DEVICE=crosshatch manifest -``` + ``` + make config + ``` + +1. Regenerate the git-repo XML manifest files. + + ``` + make manifest + ``` + +1. Build all targets impacted by given change + + ``` + make DEVICE=crosshatch release + ``` + +1. Commit changes to a PR + +## Review ## + +Patchsets that base on AOSP will carry their patchset forward using `git +rebase`. In case you use aosp-build you might be interested in an ongoing +review of this patchset across rebases. For this, checkout `make review`. + +Refer to https://github.com/ypid/android-review for one public instance of such +a review. + +### How it works? ### + +We use the hash locked manifest that [aosp-build] produces from AOSP to +whatever you have checked out. ## Notes ## diff --git a/config/config.yml b/config/config.yml index 9001d8d..cd12d31 100644 --- a/config/config.yml +++ b/config/config.yml @@ -1,88 +1,94 @@ -version: '10' +version: '11' name: Android Open Source Project type: release variant: user -datetime: 1580725592 +datetime: 1628023512 host: android user: build build_kernel: true platform: extra_remotes: - - name: github - fetch: https://github.com + - name: grapheneos + fetch: https://github.com/GrapheneOS extra_projects: - - name: hashbang/android-prepare-vendor + - name: android-prepare-vendor groups: device path: vendor/android-prepare-vendor - remote: github - revision: refs/heads/10.0 + remote: grapheneos + revision: refs/heads/11 remove_paths: - - platform/prebuilts/qemu-kernel - - platform/developers/samples/android - - platform/developers/demos - device/generic/car - - device/generic/qemu - - device/lenaro/bootloader/arm-trusted-firmware - - device/lenaro/bootloader/edk2 - - device/lenaro/bootloader/OpenPlatformPkg - - device/lenaro/hikey - - device/lenaro/hikey-kernel - - device/lenaro/ - - device/google/atv - - device/google/contexthub - - device/google/muskie - - device/google/marlin - - device/generic/mips - - device/google/hikey-kernel - - device/generic/mips64 - device/generic/mini-emulator-arm64 - device/generic/mini-emulator-armv7-a-neon - - device/generic/mini-emulator-mips - - device/generic/mini-emulator-mips64 - device/generic/mini-emulator-x86 - device/generic/mini-emulator-x86_64 - - device/google/accessory/arduino - - device/google/accessory/demokit + - device/generic/qemu + - device/google/atv + - device/google/contexthub + - device/google/crosshatch-kernel + - device/google/muskie + - device/google/wahoo-kernel + - device/lenaro/bootloader/arm-trusted-firmware + - device/linaro/bootloader/OpenPlatformPkg + - device/linaro/bootloader/arm-trusted-firmware + - device/linaro/bootloader/edk2 + - device/linaro/dragonboard + - device/linaro/dragonboard-kernel + - device/linaro/poplar + - device/linaro/poplar-kernel + - platform/developers/demos + - platform/developers/samples/android + - platform/prebuilts/qemu-kernel + - prebuilts/android-emulator remove_groups: + - beagle_x15 - darwin + - mips + - yukawa devices: bonito: - kernel_ref: origin/android-msm-bluecross-4.9-pie-qpr1 - build_id: QQ1A.200105.002 - factory_hash: 3169d39601cf5e2bbec9680c244365e132903c8e3df7b1ca05629b4e94688a0d - ota_hash: 592a20ac4d8c537c65a473efd2679b4bfd70fb9887fb588460524345d6ddcfee - platform_ref: android-10.0.0_r21 + kernel_ref: android-msm-bluecross-4.9-pie-qpr1 + build_id: RQ3A.210805.001.A1 + factory_hash: 4deed5603ff2fcedf9bfe5650cf439b74dd033516d4bb07e02b0125154cb08c7 + ota_hash: 8920cb15c9fb996c22a8d581a2f4f97c0aaf484595d11acd58d015fe27b90d99 + platform_ref: android-11.0.0_r40 + platform_pubkey: aosp.asc sargo: - kernel_ref: origin/android-msm-bluecross-4.9-pie-qpr1 - build_id: QQ1A.200105.002 - factory_hash: 0c3e12c2499d8132bd4e21772c4028c24e993852abe0622e025a7325a555ef73 - ota_hash: 3316c5ea9842f7634be3835a79ae34daa1aa02b0063fc45a86f9c96d6bb9e771 - platform_ref: android-10.0.0_r21 + kernel_ref: android-msm-bonito-4.9-android11 + build_id: RQ3A.210805.001.A1 + factory_hash: 32a5c41f8395857973cad4f6b5a33659b5aee4791f0c9a9f79ce7eb31690624f + ota_hash: ebb9b740bd630191d6193e1a01c4af041e5ddf01325169c197d8bdf194986dda + platform_ref: android-11.0.0_r40 + platform_pubkey: aosp.asc crosshatch: - kernel_ref: origin/android-msm-bluecross-4.9-pie-qpr1 + kernel_ref: android-msm-bluecross-4.9-pie-qpr1 avb_mode: vbmeta_chained - build_id: QQ1A.200105.003 - factory_hash: 6d235f477ac74153bf8bc23e69e30c81cb500ca2ac72a3d67731f916981dacea - ota_hash: d156e29c1c0d3af19fd9795bb8bf63c60ff15ac0fc7328aded7cb3c6e53bb7b8 - platform_ref: android-10.0.0_r22 + build_id: RQ3A.210805.001.A1 + factory_hash: dcbbb40157dac0188c615318235230aabdc6cacef908b19c3d995e571f80f485 + ota_hash: 3e29c11c7e3e2006ccdce401d041fc744131f21ef4fdd7740fa7e11fca2fc011 + platform_ref: android-11.0.0_r40 + platform_pubkey: aosp.asc blueline: - kernel_ref: origin/android-msm-bluecross-4.9-pie-qpr1 + kernel_ref: android-msm-bluecross-4.9-pie-qpr1 avb_mode: vbmeta_chained - build_id: QQ1A.200105.003 - factory_hash: 8e0fc70e8d598ce753b8e3a9ef77381293af63ea0e91c9c72837233b2d2eb14e - ota_hash: f758eeb5738a9f7d586b569ef0ed18b2223c076f6b1f980de159f6e183b1fd7b - platform_ref: android-10.0.0_r22 + build_id: RQ3A.210805.001.A1 + factory_hash: c2672e81a3975ca11f3258c6709b7d5878964ac22d14d1395a6eb650e1a6b65b + ota_hash: 24c289a3bbeaafded1cd28f3c6e371bf779090d7b7d08510ebad2de38be5bbfa + platform_ref: android-11.0.0_r40 + platform_pubkey: aosp.asc taimen: - kernel_ref: origin/android-msm-wahoo-4.4-pie-qpr2 + kernel_ref: android-msm-wahoo-4.4-pie-qpr2 avb_mode: vbmeta_simple - build_id: QQ1A.200105.002 - factory_hash: 10d1c3227e4e37994386f6d5940a2a6a973ceba423369a75200e7f2fb6a5f915 - ota_hash: 150a82f7593456769f85dd031673f1b8612be4e766a5d7524bdcd3ffc5186a45 - platform_ref: android-10.0.0_r21 + build_id: RP1A.201005.004.A1 + factory_hash: 2f5c4987a8e1c29bb2843d7f7d36721d52f2eb25a0fe4c74b3590e34a06eb44f + ota_hash: 9de3b96223cf14e8afd69ed9b21b801a15a96990781a7058ac8418ffd78e0dd7 + platform_ref: android-11.0.0_r25 + platform_pubkey: aosp.asc walleye: - kernel_ref: origin/android-msm-wahoo-4.4-pie-qpr2 + kernel_ref: android-msm-wahoo-4.4-pie-qpr2 avb_mode: vbmeta_simple - build_id: QQ1A.200105.002 - factory_hash: 877e8ab1131301ef680056e45ca40a87421a72833d53fda87ed00fadb1fe7480 - ota_hash: cfc5642bb00103ecbf8315420834ab3d346f14feba3f14c650d503b688c3fa97 - platform_ref: android-10.0.0_r21 + build_id: RP1A.201005.004.A1 + factory_hash: 0c23f6cf9e2194a3e72b1288f65c5a7f2f6c020080af49c8a494ee99ab3eb543 + ota_hash: ccd1069bde76fc2ef3414d619ddb5fb840addae955e85d9829df9a7e8d2484a9 + platform_ref: android-11.0.0_r25 + platform_pubkey: aosp.asc diff --git a/config/container/Dockerfile b/config/container/Dockerfile index 3d8d16e..e213792 100644 --- a/config/container/Dockerfile +++ b/config/container/Dockerfile @@ -1,61 +1,30 @@ -ARG GOLANG_IMAGE_REF=@sha256:84349ee862d8bafff35e0d2bfd539da565b536b4dfce654773fc21a1db2da6d7 -ARG UBUNTU_IMAGE_REF=@sha256:7d657275047118bb77b052c4c0ae43e8a289ca2879ebfa78a703c93aa8fd686c - -# {% if "golang" in tags %} -FROM golang${GOLANG_IMAGE_REF} as golang - -ARG FIXUID_GIT_REF="0ec93d22e52bde5b7326e84cb62fd26a3d20cead" -ARG OZZOCONFIG_GIT_REF="0ff174cf5aa6480026e0b40c14fd9cfb61c4abf6" -ARG JSONPREPROCESS_GIT_REF="a4e954386171be645f1eb7c41865d2624b69259d" -ARG TOML_GIT_REF="3012a1dbe2e4bd1391d42b32f0577cb7bbc7f005" -ARG YAMLV2_GIT_REF="51d6538a90f86fe93ac480b35f37b2be17fef232" -ARG GLIDE_GIT_REF="b94b39d657d8abcccba6545e148f1201aee6ffec" - -RUN apk add bash git make - -RUN printf "\ -github.com/boxboat/fixuid.git github.com/boxboat/fixuid ${FIXUID_GIT_REF} \n\ -github.com/go-ozzo/ozzo-config github.com/go-ozzo/ozzo-config ${OZZOCONFIG_GIT_REF} \n\ -github.com/hnakamur/jsonpreprocess github.com/hnakamur/jsonpreprocess ${JSONPREPROCESS_GIT_REF} \n\ -github.com/BurntSushi/toml github.com/BurntSushi/toml ${TOML_GIT_REF} \n\ -github.com/go-yaml/yaml gopkg.in/yaml.v2 ${YAMLV2_GIT_REF} \n" \ -> /go/src/repos - -RUN echo ' \ - set -o nounset -o pipefail -o errexit; \ - cat /go/src/repos | while read -r line; do \ - repo=$(echo $line | awk "{ print \$1 }"); \ - folder=$(echo $line | awk "{ print \$2 }"); \ - ref=$(echo $line | awk "{ print \$3 }"); \ - git clone "https://${repo}" "/go/src/${folder}"; \ - git -C "/go/src/${folder}" checkout ${ref}; \ - done' \ -| bash - -RUN go build -o /usr/local/bin/fixuid github.com/boxboat/fixuid -# {% endif %} - - -FROM ubuntu:cosmic${UBUNTU_IMAGE_REF} - -# {% if "golang" in tags %} -COPY --from=golang /usr/local/bin/ /usr/local/bin/ -# {% endif %} +# This file was generated using a Jinja2 template. +# Please make your changes in `Dockerfile.j2` and then `make` the individual Dockerfile's. + +ARG DEBIAN_IMAGE_REF=@sha256:8414aa82208bc4c2761dc149df67e25c6b8a9380e5d8c4e7b5c84ca2d04bb244 + + + +FROM debian:buster${DEBIAN_IMAGE_REF} + +ARG DEBIAN_FRONTEND=noninteractive + ENV HOME=/home/build ENV PATH=/home/build/scripts:/opt/aosp-build/scripts:/home/build/out/host/linux-x86/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin -ENV DEBIAN_FRONTEND=noninteractive \ - LANG=C.UTF-8 \ +ENV LANG=C.UTF-8 \ TZ=UTC \ TERM=xterm-256color -## The list can be generated by: dpkg -l | awk '{ if ($1 == "ii") print $2 "=" $3 }' -ADD config/container/packages.list /etc/apt/packages.list - ADD config/container/sources.list /etc/apt/sources.list -RUN apt update -y \ - && apt install -y $(cat /etc/apt/packages.list) \ +ADD config/container/packages-pinned.list /etc/apt/packages.list + +RUN apt-get update \ + && apt-get install -y $(grep -v '^#' /etc/apt/packages.list) \ + && sed --in-place '/en_US.UTF-8/s/^#\s*//;' /etc/locale.gen \ + && dpkg-reconfigure locales \ + && update-locale LANG=en_US.UTF-8 \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* ADD config /opt/aosp-build/config @@ -65,17 +34,12 @@ RUN useradd -G plugdev,sudo -ms /bin/bash build \ && chown -R build:build /home/build \ && echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers -# {% if "golang" in tags %} -RUN chown root:root /usr/local/bin/fixuid \ - && chmod 4755 /usr/local/bin/fixuid \ - && mkdir -p /etc/fixuid \ - && printf "user: build\ngroup: build\npaths:\n - /\n - /home/build/build\n" > /etc/fixuid/config.yml - -ENTRYPOINT ["/usr/local/bin/fixuid", "-q"] -# {% endif %} WORKDIR /home/build CMD [ "/bin/bash", "/usr/local/bin/build" ] USER build + +# Other scripts might also need to use git. So do it here. +RUN printf "[color]\nui=auto\n[user]\nemail=aosp@example.org\nname=AOSP User" > ~/.gitconfig diff --git a/config/container/Dockerfile.j2 b/config/container/Dockerfile.j2 new file mode 100644 index 0000000..b46ea90 --- /dev/null +++ b/config/container/Dockerfile.j2 @@ -0,0 +1,97 @@ +{{ "# This file was generated using a Jinja2 template." }} +{{ "# Please make your changes in `Dockerfile.j2` and then `make` the individual Dockerfile's." }} + +{% if "golang" in tags %} +ARG GOLANG_IMAGE_REF=@sha256:84349ee862d8bafff35e0d2bfd539da565b536b4dfce654773fc21a1db2da6d7 +{% endif %} +ARG DEBIAN_IMAGE_REF=@sha256:102ab2db1ad671545c0ace25463c4e3c45f9b15e319d3a00a1b2b085293c27fb + +{% if "golang" in tags %} +FROM golang${GOLANG_IMAGE_REF} as golang + +ARG FIXUID_GIT_REF="0ec93d22e52bde5b7326e84cb62fd26a3d20cead" +ARG OZZOCONFIG_GIT_REF="0ff174cf5aa6480026e0b40c14fd9cfb61c4abf6" +ARG JSONPREPROCESS_GIT_REF="a4e954386171be645f1eb7c41865d2624b69259d" +ARG TOML_GIT_REF="3012a1dbe2e4bd1391d42b32f0577cb7bbc7f005" +ARG YAMLV2_GIT_REF="51d6538a90f86fe93ac480b35f37b2be17fef232" +ARG GLIDE_GIT_REF="b94b39d657d8abcccba6545e148f1201aee6ffec" + +RUN apk add bash git make + +RUN printf "\ +github.com/boxboat/fixuid.git github.com/boxboat/fixuid ${FIXUID_GIT_REF} \n\ +github.com/go-ozzo/ozzo-config github.com/go-ozzo/ozzo-config ${OZZOCONFIG_GIT_REF} \n\ +github.com/hnakamur/jsonpreprocess github.com/hnakamur/jsonpreprocess ${JSONPREPROCESS_GIT_REF} \n\ +github.com/BurntSushi/toml github.com/BurntSushi/toml ${TOML_GIT_REF} \n\ +github.com/go-yaml/yaml gopkg.in/yaml.v2 ${YAMLV2_GIT_REF} \n" \ +> /go/src/repos + +RUN echo ' \ + set -o nounset -o pipefail -o errexit; \ + cat /go/src/repos | while read -r line; do \ + repo=$(echo $line | awk "{ print \$1 }"); \ + folder=$(echo $line | awk "{ print \$2 }"); \ + ref=$(echo $line | awk "{ print \$3 }"); \ + git clone "https://${repo}" "/go/src/${folder}"; \ + git -C "/go/src/${folder}" checkout ${ref}; \ + done' \ +| bash + +RUN go build -o /usr/local/bin/fixuid github.com/boxboat/fixuid +{% endif %} + +# TODO: Install repo from backports. +FROM debian:buster-20210621${DEBIAN_IMAGE_REF} + +ARG DEBIAN_FRONTEND=noninteractive + +{% if "golang" in tags %} +COPY --from=golang /usr/local/bin/ /usr/local/bin/ +{% endif %} + +ENV HOME=/home/build +ENV PATH=/home/build/scripts:/opt/aosp-build/scripts:/home/build/out/host/linux-x86/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin + +ENV LANG=C.UTF-8 \ + TZ=UTC \ + TERM=xterm-256color + +ADD config/container/sources.list /etc/apt/sources.list +{% if "latest" in tags %} +ADD config/container/packages.list /etc/apt/packages.list +{% else %} +ADD config/container/packages-pinned.list /etc/apt/packages.list +{% endif %} + +RUN echo 'Acquire::Check-Valid-Until "false";' > /etc/apt/apt.conf.d/00debuerreotype_snapshot \ + && apt-get update \ + && apt-get install -y $(grep -v '^#' /etc/apt/packages.list) \ + && sed --in-place '/en_US.UTF-8/s/^#\s*//;' /etc/locale.gen \ + && dpkg-reconfigure locales \ + && update-locale LANG=en_US.UTF-8 \ + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +ADD config /opt/aosp-build/config +ADD scripts /opt/aosp-build/scripts + +RUN useradd -G plugdev,sudo -ms /bin/bash build \ + && chown -R build:build /home/build \ + && echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers + +{% if "golang" in tags %} +RUN chown root:root /usr/local/bin/fixuid \ + && chmod 4755 /usr/local/bin/fixuid \ + && mkdir -p /etc/fixuid \ + && printf "user: build\ngroup: build\npaths:\n - /\n - /home/build/build\n" > /etc/fixuid/config.yml + +ENTRYPOINT ["/usr/local/bin/fixuid", "-q"] +{% endif %} + +WORKDIR /home/build + +CMD [ "/bin/bash", "/usr/local/bin/build" ] + +USER build + +# Other scripts might also need to use git. So do it here. +RUN printf "[color]\nui=auto\n[user]\nemail=aosp@example.org\nname=AOSP User" > ~/.gitconfig diff --git a/config/container/packages-pinned.list b/config/container/packages-pinned.list new file mode 100644 index 0000000..01535e6 --- /dev/null +++ b/config/container/packages-pinned.list @@ -0,0 +1,909 @@ +aapt=1:8.1.0+r23-3 +abootimg=0.6-1+b2 +acl=2.2.53-4 +adduser=3.118 +android-framework-res=1:8.1.0+r23-3 +android-libaapt:amd64=1:8.1.0+r23-3 +android-libandroidfw:amd64=1:8.1.0+r23-3 +android-libbacktrace=1:8.1.0+r23-5 +android-libbase=1:8.1.0+r23-5 +android-libcutils=1:8.1.0+r23-5 +android-liblog=1:8.1.0+r23-5 +android-libunwind=8.1.0+r23-2 +android-libutils=1:8.1.0+r23-5 +android-libziparchive=1:8.1.0+r23-5 +ant=1.10.5-2 +ant-optional=1.10.5-2 +apksigner=0.8-2 +apktool=2.3.4-1 +apt=1.8.2.3 +arj=3.10.22-18 +base-files=10.3+deb10u10 +base-passwd=3.5.46 +bash=5.0-4 +bc=1.07.1-2+b1 +binfmt-support=2.2.0-2 +binutils=2.31.1-16 +binutils-common:amd64=2.31.1-16 +binutils-multiarch=2.31.1-16 +binutils-x86-64-linux-gnu=2.31.1-16 +bison=2:3.3.2.dfsg-1 +blt=2.5.3+dfsg-4 +bsdmainutils=11.1.2+b1 +bsdutils=1:2.33.1-0.1 +build-essential=12.6 +bzip2=1.0.6-9.2~deb10u1 +bzip2-doc=1.0.6-9.2~deb10u1 +ca-certificates=20200601~deb10u2 +ca-certificates-java=20190405 +ca-certificates-mono=5.18.0.240+dfsg-3 +caca-utils=0.99.beta19-2.1 +cli-common=0.10 +coreutils=8.30-3 +cpp=4:8.3.0-1 +cpp-8=8.3.0-6 +cramfsswap=1.4.1-1.1 +curl=7.64.0-4+deb10u1 +dash=0.5.10.2-5 +db-util=5.3.1+nmu1 +db5.3-util=5.3.28+dfsg1-0.5 +dbus=1.12.20-0+deb10u1 +debconf=1.5.71 +debian-archive-keyring=2019.1+deb10u1 +debianutils=4.8.6.1 +default-jdk-headless=2:1.11-71 +default-jre-headless=2:1.11-71 +device-tree-compiler=1.4.7-3 +diffoscope=165~bpo10+1 +diffoscope-minimal=165~bpo10+1 +diffutils=1:3.7-3 +dirmngr=2.2.12-1+deb10u1 +distro-info-data=0.41+deb10u3 +docx2txt=1.4-1 +dos2unix=7.4.0-1 +dpkg=1.19.7 +dpkg-dev=1.19.7 +e2fsprogs=1.44.5-1+deb10u3 +enjarify=1:1.0.3-4 +fakeroot=1.23-1 +fastjar=2:0.98-6+b1 +fdisk=2.33.1-0.1 +ffmpeg=7:4.1.6-1~deb10u1 +file=1:5.35-4+deb10u1 +findutils=4.6.0+git+20190209-2 +firmware-linux-free=3.4 +flex=2.6.4-6.2 +fontconfig=2.13.1-2 +fontconfig-config=2.13.1-2 +fontforge-extras=0.3-4 +fonts-dejavu-core=2.37-1 +fonts-droid-fallback=1:6.0.1r16-1.1 +fonts-lyx=2.3.2-1 +fonts-noto-mono=20181227-1 +fp-compiler-3.0.4:amd64=3.0.4+dfsg-22 +fp-units-rtl-3.0.4:amd64=3.0.4+dfsg-22 +fp-utils=3.0.4+dfsg-22 +fp-utils-3.0.4=3.0.4+dfsg-22 +fpc-source-3.0.4=3.0.4+dfsg-22 +freeglut3:amd64=2.8.1-3 +g++=4:8.3.0-1 +g++-8=8.3.0-6 +g++-8-multilib=8.3.0-6 +g++-multilib=4:8.3.0-1 +gawk=1:4.2.1+dfsg-1 +gcc=4:8.3.0-1 +gcc-8=8.3.0-6 +gcc-8-base:amd64=8.3.0-6 +gcc-8-multilib=8.3.0-6 +gcc-multilib=4:8.3.0-1 +genisoimage=9:1.1.11-3+b2 +gettext=0.19.8.1-9 +gettext-base=0.19.8.1-9 +gfortran=4:8.3.0-1 +gfortran-8=8.3.0-6 +ghc=8.4.4+dfsg1-3 +ghostscript=9.27~dfsg-2+deb10u4 +giflib-tools=5.1.4-3 +git=1:2.20.1-2+deb10u3 +git-man=1:2.20.1-2+deb10u3 +gnupg=2.2.12-1+deb10u1 +gnupg-l10n=2.2.12-1+deb10u1 +gnupg-utils=2.2.12-1+deb10u1 +gpg=2.2.12-1+deb10u1 +gpg-agent=2.2.12-1+deb10u1 +gpg-wks-client=2.2.12-1+deb10u1 +gpg-wks-server=2.2.12-1+deb10u1 +gpgconf=2.2.12-1+deb10u1 +gpgsm=2.2.12-1+deb10u1 +gpgv=2.2.12-1+deb10u1 +grep=3.3-1 +gsfonts=1:8.11+urwcyr1.0.7~pre44-4.4 +gzip=1.9-3 +hdf5-tools=1.10.4+repack-10 +hicolor-icon-theme=0.17-2 +hostname=3.21 +htop=2.2.0-1+b1 +i965-va-driver:amd64=2.3.0+dfsg1-1 +icu-devtools=63.1-6+deb10u1 +imagemagick=8:6.9.10.23+dfsg-2.1+deb10u1 +imagemagick-6-common=8:6.9.10.23+dfsg-2.1+deb10u1 +imagemagick-6.q16=8:6.9.10.23+dfsg-2.1+deb10u1 +init-system-helpers=1.56+nmu1 +intel-media-va-driver:amd64=18.4.1+dfsg1-1 +iso-codes=4.2-1 +jarwrapper=0.72.9 +java-common=0.71 +javascript-common=11 +jsbeautifier=1.6.4-7 +junit=3.8.2-9 +krb5-locales=1.17-3+deb10u1 +ledit=2.04-1 +less=487-0.1+b1 +lib32asan5=8.3.0-6 +lib32atomic1=8.3.0-6 +lib32gcc-8-dev=8.3.0-6 +lib32gcc1=1:8.3.0-6 +lib32gomp1=8.3.0-6 +lib32itm1=8.3.0-6 +lib32mpx2=8.3.0-6 +lib32ncurses-dev=6.1+20181013-2+deb10u2 +lib32ncurses6=6.1+20181013-2+deb10u2 +lib32ncursesw6=6.1+20181013-2+deb10u2 +lib32quadmath0=8.3.0-6 +lib32stdc++-8-dev=8.3.0-6 +lib32stdc++6=8.3.0-6 +lib32tinfo6=6.1+20181013-2+deb10u2 +lib32ubsan1=8.3.0-6 +lib32z1=1:1.2.11.dfsg-1 +lib32z1-dev=1:1.2.11.dfsg-1 +libaacs0:amd64=0.9.0-2 +libacl1:amd64=2.2.53-4 +libaec0:amd64=1.0.2-1 +libafflib0v5=3.7.17-5 +libalgorithm-diff-perl=1.19.03-2 +libalgorithm-diff-xs-perl=0.04-5+b1 +libalgorithm-merge-perl=0.08-3 +libantlr-java=2.7.7+dfsg-9.2 +libantlr3-runtime-java=3.5.2-9 +libaom0:amd64=1.0.0-3 +libapache-pom-java=18-1 +libapparmor1:amd64=2.13.2-10 +libapt-inst2.0:amd64=1.8.2.2 +libapt-pkg5.0:amd64=1.8.2.3 +libarchive-tools=3.3.3-4+deb10u1 +libarchive13:amd64=3.3.3-4+deb10u1 +libasan5:amd64=8.3.0-6 +libasound2:amd64=1.1.8-1 +libasound2-data=1.1.8-1 +libass9:amd64=1:0.14.0-2 +libassuan0:amd64=2.5.2-1 +libasyncns0:amd64=0.8-6 +libatinject-jsr330-api-java=1.0+ds1-5 +libatomic1:amd64=8.3.0-6 +libattr1:amd64=1:2.4.48-4 +libaudio2:amd64=1.9.4-6 +libaudit-common=1:2.8.4-3 +libaudit1:amd64=1:2.8.4-3 +libauthen-sasl-perl=2.1600-1 +libavahi-client3:amd64=0.7-4+b1 +libavahi-common-data:amd64=0.7-4+b1 +libavahi-common3:amd64=0.7-4+b1 +libavc1394-0:amd64=0.5.4-5 +libavcodec58:amd64=7:4.1.6-1~deb10u1 +libavdevice58:amd64=7:4.1.6-1~deb10u1 +libavfilter7:amd64=7:4.1.6-1~deb10u1 +libavformat58:amd64=7:4.1.6-1~deb10u1 +libavresample4:amd64=7:4.1.6-1~deb10u1 +libavutil56:amd64=7:4.1.6-1~deb10u1 +libbdplus0:amd64=0.1.2-3 +libbinutils:amd64=2.31.1-16 +libbison-dev:amd64=2:3.3.2.dfsg-1 +libblas-dev:amd64=3.8.0-2 +libblas3:amd64=3.8.0-2 +libblkid1:amd64=2.33.1-0.1 +libbluray2:amd64=1:1.1.0-1 +libbs2b0:amd64=3.1.0+dfsg-2.2 +libbsd-dev:amd64=0.9.1-2 +libbsd0:amd64=0.9.1-2 +libbz2-1.0:amd64=1.0.6-9.2~deb10u1 +libbz2-dev:amd64=1.0.6-9.2~deb10u1 +libc-bin=2.28-10 +libc-dev-bin=2.28-10 +libc-l10n=2.28-10 +libc6:amd64=2.28-10 +libc6-dev:amd64=2.28-10 +libc6-dev-i386=2.28-10 +libc6-dev-x32=2.28-10 +libc6-i386=2.28-10 +libc6-x32=2.28-10 +libcaca0:amd64=0.99.beta19-2.1 +libcairo2:amd64=1.16.0-4 +libcap-ng0:amd64=0.7.9-2 +libcap2:amd64=1:2.25-2 +libcc1-0:amd64=8.3.0-6 +libcdio-cdda2:amd64=10.2+0.94+2-4 +libcdio-paranoia2:amd64=10.2+0.94+2-4 +libcdio18:amd64=2.0.0-2 +libchromaprint1:amd64=1.4.3-3 +libcodec2-0.8.1:amd64=0.8.1-2 +libcom-err2:amd64=1.44.5-1+deb10u3 +libcommons-cli-java=1.4-1 +libcommons-io-java=2.6-2 +libcommons-lang3-java=3.8-2 +libcommons-parent-java=43-1 +libcroco3:amd64=0.6.12-3 +libcrystalhd3:amd64=1:0.0~git20110715.fdd2f19-13 +libcups2:amd64=2.2.10-6+deb10u4 +libcupsfilters1:amd64=1.21.6-5 +libcupsimage2:amd64=2.2.10-6+deb10u4 +libcurl3-gnutls:amd64=7.64.0-4+deb10u1 +libcurl4:amd64=7.64.0-4+deb10u1 +libdata-dump-perl=1.23-1 +libdate-manip-perl=6.76-1 +libdatrie1:amd64=0.2.12-2 +libdb5.3:amd64=5.3.28+dfsg1-0.5 +libdbus-1-3:amd64=1.12.20-0+deb10u1 +libdc1394-22:amd64=2.2.5-1 +libde265-0:amd64=1.0.3-1+b1 +libdebconfclient0:amd64=0.249 +libdjvulibre-text=3.5.27.1-10 +libdjvulibre21:amd64=3.5.27.1-10 +libdom4j-java=2.1.1-2 +libdpkg-perl=1.19.7 +libdrm-amdgpu1:amd64=2.4.97-1 +libdrm-common=2.4.97-1 +libdrm-dev:amd64=2.4.97-1 +libdrm-intel1:amd64=2.4.97-1 +libdrm-nouveau2:amd64=2.4.97-1 +libdrm-radeon1:amd64=2.4.97-1 +libdrm2:amd64=2.4.97-1 +libdw1:amd64=0.176-1.1 +libedit2:amd64=3.1-20181209-1 +libegl-mesa0:amd64=18.3.6-2+deb10u1 +libegl1:amd64=1.1.0-1 +libelf1:amd64=0.176-1.1 +libencode-locale-perl=1.05-1 +liberror-perl=0.17027-2 +libewf2=20140804-1 +libexpat1:amd64=2.2.6-2+deb10u1 +libext2fs2:amd64=1.44.5-1+deb10u3 +libfakeroot:amd64=1.23-1 +libfaketime:amd64=0.9.7-3 +libfdisk1:amd64=2.33.1-0.1 +libffi-dev:amd64=3.2.1-9 +libffi6:amd64=3.2.1-9 +libfftw3-double3:amd64=3.3.8-2 +libfile-basedir-perl=0.08-1 +libfile-desktopentry-perl=0.22-1 +libfile-fcntllock-perl=0.22-3+b5 +libfile-listing-perl=6.04-1 +libfile-mimeinfo-perl=0.29-1 +libfl-dev:amd64=2.6.4-6.2 +libfl2:amd64=2.6.4-6.2 +libflac8:amd64=1.3.2-3 +libflite1:amd64=2.1-release-3 +libfont-afm-perl=1.20-2 +libfontconfig1:amd64=2.13.1-2 +libfontenc1:amd64=1:1.1.3-1+b2 +libfreetype6:amd64=2.9.1-3+deb10u2 +libfribidi0:amd64=1.0.5-3.1+deb10u1 +libgbm1:amd64=18.3.6-2+deb10u1 +libgcc-8-dev:amd64=8.3.0-6 +libgcc1:amd64=1:8.3.0-6 +libgcrypt20:amd64=1.8.4-5+deb10u1 +libgd3:amd64=2.2.5-5.2 +libgdbm-compat4:amd64=1.18.1-4 +libgdbm6:amd64=1.18.1-4 +libgdk-pixbuf2.0-0:amd64=2.38.1+dfsg-1 +libgdk-pixbuf2.0-bin=2.38.1+dfsg-1 +libgdk-pixbuf2.0-common=2.38.1+dfsg-1 +libgfortran-8-dev:amd64=8.3.0-6 +libgfortran5:amd64=8.3.0-6 +libgif7:amd64=5.1.4-3 +libgl1:amd64=1.1.0-1 +libgl1-mesa-dev:amd64=18.3.6-2+deb10u1 +libgl1-mesa-dri:amd64=18.3.6-2+deb10u1 +libglapi-mesa:amd64=18.3.6-2+deb10u1 +libgles1:amd64=1.1.0-1 +libgles2:amd64=1.1.0-1 +libglib2.0-0:amd64=2.58.3-2+deb10u2 +libglib2.0-data=2.58.3-2+deb10u2 +libglu1-mesa:amd64=9.0.0-2.1+b3 +libglvnd-core-dev:amd64=1.1.0-1 +libglvnd-dev:amd64=1.1.0-1 +libglvnd0:amd64=1.1.0-1 +libglx-mesa0:amd64=18.3.6-2+deb10u1 +libglx0:amd64=1.1.0-1 +libgme0:amd64=0.6.2-1 +libgmp-dev:amd64=2:6.1.2+dfsg-4 +libgmp10:amd64=2:6.1.2+dfsg-4 +libgmpxx4ldbl:amd64=2:6.1.2+dfsg-4 +libgnutls30:amd64=3.6.7-4+deb10u7 +libgomp1:amd64=8.3.0-6 +libgpg-error0:amd64=1.35-1 +libgpm2:amd64=1.20.7-5 +libgraphite2-3:amd64=1.3.13-7 +libgs9:amd64=9.27~dfsg-2+deb10u4 +libgs9-common=9.27~dfsg-2+deb10u4 +libgsm1:amd64=1.0.18-2 +libgssapi-krb5-2:amd64=1.17-3+deb10u1 +libguava-java=19.0-1 +libharfbuzz0b:amd64=2.3.1-1 +libhdf5-103:amd64=1.10.4+repack-10 +libheif1:amd64=1.3.2-2~deb10u1 +libhogweed4:amd64=3.4.1-1 +libhtml-form-perl=6.03-1 +libhtml-format-perl=2.12-1 +libhtml-parser-perl=3.72-3+b3 +libhtml-tagset-perl=3.20-3 +libhtml-tree-perl=5.07-2 +libhttp-cookies-perl=6.04-1 +libhttp-daemon-perl=6.01-3 +libhttp-date-perl=6.02-1 +libhttp-message-perl=6.18-1 +libhttp-negotiate-perl=6.01-1 +libice6:amd64=2:1.0.9-2 +libicu-dev:amd64=63.1-6+deb10u1 +libicu4j-java=62.1-2 +libicu63:amd64=63.1-6+deb10u1 +libid3tag0:amd64=0.15.1b-14 +libidn11:amd64=1.33-2.2 +libidn2-0:amd64=2.0.5-1+deb10u1 +libiec61883-0:amd64=1.2.0-3 +libigdgmm5:amd64=18.4.1+ds1-1 +libijs-0.35:amd64=0.35-14 +libilmbase23:amd64=2.2.1-2 +libimagequant0:amd64=2.12.2-1.1 +libimlib2:amd64=1.5.1-1 +libintellij-annotations-java=17.0.0-1 +libio-html-perl=1.001-1 +libio-socket-ssl-perl=2.060-3 +libio-stringy-perl=2.111-3 +libipc-system-simple-perl=1.25-4 +libisl19:amd64=0.20-2 +libitm1:amd64=8.3.0-6 +libjack-jackd2-0:amd64=1.9.12~dfsg-2 +libjaxen-java=1.1.6-4 +libjaxp1.3-java=1.3.05-5 +libjbig0:amd64=2.1-3.1+b2 +libjbig2dec0:amd64=0.16-1 +libjcommander-java=1.71-3 +libjdom1-java=1.1.3-2 +libjetbrains-annotations-java=17.0.0-1 +libjpeg-dev=1:1.5.2-2+deb10u1 +libjpeg62-turbo:amd64=1:1.5.2-2+deb10u1 +libjpeg62-turbo-dev:amd64=1:1.5.2-2+deb10u1 +libjs-jquery=3.3.1~dfsg-3 +libjs-jquery-ui=1.12.1+dfsg-5 +libjsr305-java=0.1~+svn49-11 +libjxr-tools=1.1-6+b1 +libjxr0:amd64=1.1-6+b1 +libk5crypto3:amd64=1.17-3+deb10u1 +libkeyutils1:amd64=1.6-6 +libkrb5-3:amd64=1.17-3+deb10u1 +libkrb5support0:amd64=1.17-3+deb10u1 +libksba8:amd64=1.3.5-2 +liblapack-dev:amd64=3.8.0-2 +liblapack3:amd64=3.8.0-2 +liblcms2-2:amd64=2.9-3 +libldap-2.4-2:amd64=2.4.47+dfsg-3+deb10u5 +libldap-common=2.4.47+dfsg-3+deb10u5 +liblilv-0-0:amd64=0.24.2~dfsg0-2 +libllvm7:amd64=1:7.0.1-8+deb10u2 +liblocale-gettext-perl=1.07-3+b4 +liblqr-1-0:amd64=0.4.2-2.1 +liblsan0:amd64=8.3.0-6 +libltdl7:amd64=2.4.6-9 +liblua5.2-0:amd64=5.2.4-1.1+b2 +liblua5.3-0:amd64=5.3.3-1.1 +liblwp-mediatypes-perl=6.02-1 +liblwp-protocol-https-perl=6.07-2 +liblz4-1:amd64=1.8.3-1+deb10u1 +liblzma-dev:amd64=5.2.4-1 +liblzma5:amd64=5.2.4-1 +liblzo2-2:amd64=2.10-0.1 +libmagic-mgc=1:5.35-4+deb10u1 +libmagic1:amd64=1:5.35-4+deb10u1 +libmagickcore-6.q16-6:amd64=8:6.9.10.23+dfsg-2.1+deb10u1 +libmagickcore-6.q16-6-extra:amd64=8:6.9.10.23+dfsg-2.1+deb10u1 +libmagickwand-6.q16-6:amd64=8:6.9.10.23+dfsg-2.1+deb10u1 +libmailtools-perl=2.18-1 +libmariadb3:amd64=1:10.3.27-0+deb10u1 +libmng1:amd64=1.0.10+dfsg-3.1+b5 +libmono-btls-interface4.0-cil=5.18.0.240+dfsg-3 +libmono-corlib4.5-cil=5.18.0.240+dfsg-3 +libmono-i18n-west4.0-cil=5.18.0.240+dfsg-3 +libmono-i18n4.0-cil=5.18.0.240+dfsg-3 +libmono-security4.0-cil=5.18.0.240+dfsg-3 +libmono-system-configuration4.0-cil=5.18.0.240+dfsg-3 +libmono-system-core4.0-cil=5.18.0.240+dfsg-3 +libmono-system-numerics4.0-cil=5.18.0.240+dfsg-3 +libmono-system-security4.0-cil=5.18.0.240+dfsg-3 +libmono-system-xml4.0-cil=5.18.0.240+dfsg-3 +libmono-system4.0-cil=5.18.0.240+dfsg-3 +libmonoboehm-2.0-1=5.18.0.240+dfsg-3 +libmount1:amd64=2.33.1-0.1 +libmp3lame0:amd64=3.100-2+b1 +libmpc3:amd64=1.1.0-1 +libmpdec2:amd64=2.4.2-2 +libmpfr6:amd64=4.0.2-1 +libmpg123-0:amd64=1.25.10-2 +libmpx2:amd64=8.3.0-6 +libmysofa0:amd64=0.6~dfsg0-3+deb10u1 +libncurses-dev:amd64=6.1+20181013-2+deb10u2 +libncurses5:amd64=6.1+20181013-2+deb10u2 +libncurses5-dev:amd64=6.1+20181013-2+deb10u2 +libncurses6:amd64=6.1+20181013-2+deb10u2 +libncursesw6:amd64=6.1+20181013-2+deb10u2 +libnet-dbus-perl=1.1.0-5+b1 +libnet-http-perl=6.18-1 +libnet-smtp-ssl-perl=1.04-1 +libnet-ssleay-perl=1.85-2+b1 +libnetpbm10=2:10.0-15.3+b2 +libnettle6:amd64=3.4.1-1 +libnghttp2-14:amd64=1.36.0-2+deb10u1 +libnorm1:amd64=1.5.8+dfsg2-1 +libnpth0:amd64=1.6-1 +libnspr4:amd64=2:4.20-1 +libnss3:amd64=2:3.42.1-1+deb10u3 +libnuma1:amd64=2.0.12-1 +libogg0:amd64=1.3.2-1+b1 +libopenal-data=1:1.19.1-1 +libopenal1:amd64=1:1.19.1-1 +libopenexr23:amd64=2.2.1-4.1+deb10u1 +libopengl0:amd64=1.1.0-1 +libopenjp2-7:amd64=2.3.0-2+deb10u1 +libopenmpt0:amd64=0.4.3-1+deb10u1 +libopus0:amd64=1.3-1 +libp11-kit0:amd64=0.23.15-2+deb10u1 +libpam-modules:amd64=1.3.1-5 +libpam-modules-bin=1.3.1-5 +libpam-runtime=1.3.1-5 +libpam0g:amd64=1.3.1-5 +libpango-1.0-0:amd64=1.42.4-8~deb10u1 +libpangocairo-1.0-0:amd64=1.42.4-8~deb10u1 +libpangoft2-1.0-0:amd64=1.42.4-8~deb10u1 +libpaper-utils=1.1.28 +libpaper1:amd64=1.1.28 +libpcap0.8:amd64=1.8.1-6 +libpciaccess0:amd64=0.14-1 +libpcre16-3:amd64=2:8.39-12 +libpcre2-8-0:amd64=10.32-5 +libpcre3:amd64=2:8.39-12 +libpcre3-dev:amd64=2:8.39-12 +libpcre32-3:amd64=2:8.39-12 +libpcrecpp0v5:amd64=2:8.39-12 +libpcsclite1:amd64=1.8.24-1 +libperl4-corelibs-perl=0.004-1+deb10u1 +libperl5.28:amd64=5.28.1-6+deb10u1 +libpgm-5.2-0:amd64=5.2.122~dfsg-3 +libpipeline1:amd64=1.5.1-2 +libpixman-1-0:amd64=0.36.0-1 +libpng-dev:amd64=1.6.36-6 +libpng-tools=1.6.36-6 +libpng16-16:amd64=1.6.36-6 +libpoppler82:amd64=0.71.0-5 +libpopt0:amd64=1.16-12 +libpostproc55:amd64=7:4.1.6-1~deb10u1 +libprocps7:amd64=2:3.3.15-2 +libprocyon-java=0.5.32-5 +libprotobuf-lite17:amd64=3.6.1.3-2 +libprotobuf17:amd64=3.6.1.3-2 +libpsl5:amd64=0.20.2-2 +libpthread-stubs0-dev:amd64=0.4-1 +libpulse0:amd64=12.2-4+deb10u1 +libpython-stdlib:amd64=2.7.16-1 +libpython2-stdlib:amd64=2.7.16-1 +libpython2.7-minimal:amd64=2.7.16-2+deb10u1 +libpython2.7-stdlib:amd64=2.7.16-2+deb10u1 +libpython3-stdlib:amd64=3.7.3-1 +libpython3.7-minimal:amd64=3.7.3-2+deb10u2 +libpython3.7-stdlib:amd64=3.7.3-2+deb10u2 +libqt4-dbus:amd64=4:4.8.7+dfsg-18+deb10u1 +libqt4-declarative:amd64=4:4.8.7+dfsg-18+deb10u1 +libqt4-designer:amd64=4:4.8.7+dfsg-18+deb10u1 +libqt4-help:amd64=4:4.8.7+dfsg-18+deb10u1 +libqt4-network:amd64=4:4.8.7+dfsg-18+deb10u1 +libqt4-script:amd64=4:4.8.7+dfsg-18+deb10u1 +libqt4-scripttools:amd64=4:4.8.7+dfsg-18+deb10u1 +libqt4-sql:amd64=4:4.8.7+dfsg-18+deb10u1 +libqt4-sql-mysql:amd64=4:4.8.7+dfsg-18+deb10u1 +libqt4-svg:amd64=4:4.8.7+dfsg-18+deb10u1 +libqt4-test:amd64=4:4.8.7+dfsg-18+deb10u1 +libqt4-xml:amd64=4:4.8.7+dfsg-18+deb10u1 +libqt4-xmlpatterns:amd64=4:4.8.7+dfsg-18+deb10u1 +libqtassistantclient4:amd64=4.6.3-7+b1 +libqtcore4:amd64=4:4.8.7+dfsg-18+deb10u1 +libqtdbus4:amd64=4:4.8.7+dfsg-18+deb10u1 +libqtgui4:amd64=4:4.8.7+dfsg-18+deb10u1 +libquadmath0:amd64=8.3.0-6 +libraw1394-11:amd64=2.1.2-1+b1 +libreadline-dev:amd64=7.0-5 +libreadline7:amd64=7.0-5 +librpm8=4.14.2.1+dfsg1-1 +librpmbuild8=4.14.2.1+dfsg1-1 +librpmio8=4.14.2.1+dfsg1-1 +librpmsign8=4.14.2.1+dfsg1-1 +librsvg2-2:amd64=2.44.10-2.1 +librsvg2-common:amd64=2.44.10-2.1 +librtmp1:amd64=2.4+20151223.gitfa8646d.1-2 +librubberband2:amd64=1.8.1-7 +libsamplerate0:amd64=0.1.9-2 +libsasl2-2:amd64=2.1.27+dfsg-1+deb10u1 +libsasl2-modules:amd64=2.1.27+dfsg-1+deb10u1 +libsasl2-modules-db:amd64=2.1.27+dfsg-1+deb10u1 +libsaxonhe-java=9.9.0.2+dfsg-1 +libsdl2-2.0-0:amd64=2.0.9+dfsg1-1 +libseccomp2:amd64=2.3.3-4 +libselinux1:amd64=2.8-1+b1 +libsemanage-common=2.8-2 +libsemanage1:amd64=2.8-2 +libsensors-config=1:3.5.0-3 +libsensors5:amd64=1:3.5.0-3 +libsepol1:amd64=2.8-1 +libserd-0-0:amd64=0.28.0~dfsg0-1 +libshine3:amd64=3.1.1-2 +libsigsegv2:amd64=2.12-2 +libslang2:amd64=2.3.2-2 +libsm6:amd64=2:1.2.3-1 +libsmali-java=2.2.6-1 +libsmartcols1:amd64=2.33.1-0.1 +libsnappy1v5:amd64=1.1.7-1 +libsndfile1:amd64=1.0.28-6 +libsndio7.0:amd64=1.5.0-3 +libsodium23:amd64=1.0.17-1 +libsord-0-0:amd64=0.16.0~dfsg0-1+b1 +libsoxr0:amd64=0.1.2-3 +libspeex1:amd64=1.2~rc1.2-1+b2 +libsqlite3-0:amd64=3.27.2-3+deb10u1 +libsratom-0-0:amd64=0.6.0~dfsg0-1 +libss2:amd64=1.44.5-1+deb10u3 +libssh-gcrypt-4:amd64=0.8.7-1+deb10u1 +libssh2-1:amd64=1.8.0-2.1 +libssl-dev:amd64=1.1.1d-0+deb10u4 +libssl1.1:amd64=1.1.1d-0+deb10u4 +libstdc++-8-dev:amd64=8.3.0-6 +libstdc++6:amd64=8.3.0-6 +libstringtemplate-java=3.2.1-2 +libswresample3:amd64=7:4.1.6-1~deb10u1 +libswscale5:amd64=7:4.1.6-1~deb10u1 +libsystemd0:amd64=241-7~deb10u7 +libsz2:amd64=1.0.2-1 +libtasn1-6:amd64=4.13-3 +libtcl8.6:amd64=8.6.9+dfsg-2 +libtext-iconv-perl=1.7-5+b7 +libthai-data=0.1.28-2 +libthai0:amd64=0.1.28-2 +libtheora0:amd64=1.1.1+dfsg.1-15 +libtie-ixhash-perl=1.23-2 +libtiff5:amd64=4.1.0+git191117-2~deb10u1 +libtimedate-perl=2.3000-2+deb10u1 +libtinfo5:amd64=6.1+20181013-2+deb10u2 +libtinfo6:amd64=6.1+20181013-2+deb10u2 +libtk8.6:amd64=8.6.9-2 +libtry-tiny-perl=0.30-1 +libtsan0:amd64=8.3.0-6 +libtsk13=4.6.5-1+deb10u1 +libtwolame0:amd64=0.3.13-4 +libubsan1:amd64=8.3.0-6 +libudev1:amd64=241-7~deb10u7 +libunistring2:amd64=0.9.10-1 +liburi-perl=1.76-1 +libusb-1.0-0:amd64=2:1.0.22-2 +libuuid1:amd64=2.33.1-0.1 +libva-drm2:amd64=2.4.0-1 +libva-x11-2:amd64=2.4.0-1 +libva2:amd64=2.4.0-1 +libvdpau-va-gl1:amd64=0.4.2-1+b1 +libvdpau1:amd64=1.1.1-10 +libvidstab1.1:amd64=1.1.0-2 +libvorbis0a:amd64=1.3.6-2 +libvorbisenc2:amd64=1.3.6-2 +libvorbisfile3:amd64=1.3.6-2 +libvpx5:amd64=1.7.0-3+deb10u1 +libwavpack1:amd64=5.1.0-6 +libwayland-client0:amd64=1.16.0-1 +libwayland-cursor0:amd64=1.16.0-1 +libwayland-egl1:amd64=1.16.0-1 +libwayland-server0:amd64=1.16.0-1 +libwebp6:amd64=0.6.1-2 +libwebpdemux2:amd64=0.6.1-2 +libwebpmux3:amd64=0.6.1-2 +libwmf0.2-7:amd64=0.2.8.4-14 +libwrap0:amd64=7.6.q-28 +libwww-perl=6.36-2 +libwww-robotrules-perl=6.02-1 +libx11-6:amd64=2:1.6.7-1+deb10u1 +libx11-data=2:1.6.7-1+deb10u1 +libx11-dev:amd64=2:1.6.7-1+deb10u1 +libx11-protocol-perl=0.56-7 +libx11-xcb-dev:amd64=2:1.6.7-1+deb10u1 +libx11-xcb1:amd64=2:1.6.7-1+deb10u1 +libx264-155:amd64=2:0.155.2917+git0a84d98-2 +libx265-165:amd64=2.9-4 +libx32asan5=8.3.0-6 +libx32atomic1=8.3.0-6 +libx32gcc-8-dev=8.3.0-6 +libx32gcc1=1:8.3.0-6 +libx32gomp1=8.3.0-6 +libx32itm1=8.3.0-6 +libx32quadmath0=8.3.0-6 +libx32stdc++-8-dev=8.3.0-6 +libx32stdc++6=8.3.0-6 +libx32ubsan1=8.3.0-6 +libxau-dev:amd64=1:1.0.8-1+b2 +libxau6:amd64=1:1.0.8-1+b2 +libxaw7:amd64=2:1.0.13-1+b2 +libxcb-dri2-0:amd64=1.13.1-2 +libxcb-dri2-0-dev:amd64=1.13.1-2 +libxcb-dri3-0:amd64=1.13.1-2 +libxcb-dri3-dev:amd64=1.13.1-2 +libxcb-glx0:amd64=1.13.1-2 +libxcb-glx0-dev:amd64=1.13.1-2 +libxcb-present-dev:amd64=1.13.1-2 +libxcb-present0:amd64=1.13.1-2 +libxcb-randr0:amd64=1.13.1-2 +libxcb-randr0-dev:amd64=1.13.1-2 +libxcb-render0:amd64=1.13.1-2 +libxcb-render0-dev:amd64=1.13.1-2 +libxcb-shape0:amd64=1.13.1-2 +libxcb-shape0-dev:amd64=1.13.1-2 +libxcb-shm0:amd64=1.13.1-2 +libxcb-sync-dev:amd64=1.13.1-2 +libxcb-sync1:amd64=1.13.1-2 +libxcb-xfixes0:amd64=1.13.1-2 +libxcb-xfixes0-dev:amd64=1.13.1-2 +libxcb1:amd64=1.13.1-2 +libxcb1-dev:amd64=1.13.1-2 +libxcomposite1:amd64=1:0.4.4-2 +libxcursor1:amd64=1:1.1.15-2 +libxdamage-dev:amd64=1:1.1.4-3+b3 +libxdamage1:amd64=1:1.1.4-3+b3 +libxdmcp-dev:amd64=1:1.1.2-3 +libxdmcp6:amd64=1:1.1.2-3 +libxerces2-java=2.12.0-1 +libxext-dev:amd64=2:1.3.3-1+b2 +libxext6:amd64=2:1.3.3-1+b2 +libxfixes-dev:amd64=1:5.0.3-1 +libxfixes3:amd64=1:5.0.3-1 +libxft2:amd64=2.3.2-2 +libxi6:amd64=2:1.7.9-1 +libxinerama1:amd64=2:1.1.4-2 +libxkbcommon0:amd64=0.8.2-1 +libxml-commons-external-java=1.4.01-3 +libxml-commons-resolver1.1-java=1.2-9 +libxml-parser-perl=2.44-4 +libxml-twig-perl=1:3.50-1.1 +libxml-xpathengine-perl=0.14-1 +libxml2:amd64=2.9.4+dfsg1-7+deb10u1 +libxml2-utils=2.9.4+dfsg1-7+deb10u1 +libxmlbeans-java=3.0.2-1 +libxmlunit-java=1.6-1 +libxmu6:amd64=2:1.1.2-2+b3 +libxmuu1:amd64=2:1.1.2-2+b3 +libxom-java=1.2.10-1 +libxpm4:amd64=1:3.5.12-1 +libxpp3-java=1.1.4c-3 +libxrandr2:amd64=2:1.5.1-1 +libxrender1:amd64=1:0.9.10-1 +libxshmfence-dev:amd64=1.3-1 +libxshmfence1:amd64=1.3-1 +libxslt1.1:amd64=1.1.32-2.2~deb10u1 +libxss1:amd64=1:1.2.3-1 +libxt6:amd64=1:1.1.5-1+b3 +libxtst6:amd64=2:1.2.3-1 +libxv1:amd64=2:1.0.11-1 +libxvidcore4:amd64=2:1.3.5-1 +libxxf86dga1:amd64=2:1.1.4-1+b3 +libxxf86vm-dev:amd64=1:1.1.4-1+b2 +libxxf86vm1:amd64=1:1.1.4-1+b2 +libyaml-0-2:amd64=0.2.1-1 +libyaml-snake-java=1.23-1 +libzip4:amd64=1.5.1-4 +libzmq5:amd64=4.3.1-4+deb10u2 +libzstd1:amd64=1.3.8+dfsg-3+deb10u2 +libzvbi-common=0.2.35-16 +libzvbi0:amd64=0.2.35-16 +linux-libc-dev:amd64=4.19.171-2 +llvm=1:7.0-47 +llvm-7=1:7.0.1-8+deb10u2 +llvm-7-dev=1:7.0.1-8+deb10u2 +llvm-7-runtime=1:7.0.1-8+deb10u2 +llvm-runtime=1:7.0-47 +locales=2.28-10 +login=1:4.5-1.1 +lsb-base=10.2019051400 +lsb-release=10.2019051400 +m4=1.4.18-2 +make=4.2.1-1.2 +manpages=4.16-2 +manpages-dev=4.16-2 +mariadb-common=1:10.3.27-0+deb10u1 +mawk=1.3.3-17+b3 +mesa-common-dev:amd64=18.3.6-2+deb10u1 +mesa-va-drivers:amd64=18.3.6-2+deb10u1 +mesa-vdpau-drivers:amd64=18.3.6-2+deb10u1 +mime-support=3.62 +mono-4.0-gac=5.18.0.240+dfsg-3 +mono-gac=5.18.0.240+dfsg-3 +mono-runtime=5.18.0.240+dfsg-3 +mono-runtime-common=5.18.0.240+dfsg-3 +mono-runtime-sgen=5.18.0.240+dfsg-3 +mono-utils=5.18.0.240+dfsg-3 +mount=2.33.1-0.1 +mtd-utils=1:2.0.1-1 +mysql-common=5.8+1.0.5 +ncat=7.70+dfsg1-6+deb10u1 +ncompress=4.2.4.5-3 +ncurses-base=6.1+20181013-2+deb10u2 +ncurses-bin=6.1+20181013-2+deb10u2 +netbase=5.6 +netpbm=2:10.0-15.3+b2 +ocaml-base-nox=4.05.0-11 +ocaml-compiler-libs=4.05.0-11 +ocaml-interp=4.05.0-11 +ocaml-nox=4.05.0-11 +odt2txt=0.5-1+b2 +oggvideotools=0.9.1-5 +openjdk-11-jdk-headless:amd64=11.0.9.1+1-1~deb10u2 +openjdk-11-jre-headless:amd64=11.0.9.1+1-1~deb10u2 +openssh-client=1:7.9p1-10+deb10u2 +openssl=1.1.1d-0+deb10u4 +p7zip=16.02+dfsg-6 +p7zip-full=16.02+dfsg-6 +passwd=1:4.5-1.1 +patch=2.7.6-3+deb10u1 +perl=5.28.1-6+deb10u1 +perl-base=5.28.1-6+deb10u1 +perl-modules-5.28=5.28.1-6+deb10u1 +perl-openssl-defaults:amd64=3 +pgpdump=0.33-1 +pinentry-curses=1.1.0-2 +pkg-config=0.29-6 +poppler-data=0.4.9-2 +poppler-utils=0.71.0-5 +procps=2:3.3.15-2 +procyon-decompiler=0.5.32-5 +psmisc=23.2-1 +publicsuffix=20190415.1030-1 +python=2.7.16-1 +python-apt-common=1.8.4.3 +python-matplotlib-data=3.0.2-2 +python-minimal=2.7.16-1 +python-pkg-resources=40.8.0-1 +python-protobuf=3.6.1.3-2 +python-six=1.12.0-1 +python2=2.7.16-1 +python2-minimal=2.7.16-1 +python2.7=2.7.16-2+deb10u1 +python2.7-minimal=2.7.16-2+deb10u1 +python3=3.7.3-1 +python3-apt=1.8.4.3 +python3-argcomplete=1.8.1-1 +python3-binwalk=2.1.2~git20180830+dfsg1-1 +python3-chardet=3.0.4-3 +python3-crypto=2.6.1-9+b1 +python3-cycler=0.10.0-1 +python3-dateutil=2.7.3-3 +python3-debian=0.1.35 +python3-decorator=4.3.0-1.1 +python3-defusedxml=0.5.0-2 +python3-distro=1.3.0-1 +python3-distutils=3.7.3-1 +python3-editorconfig=0.12.1-1 +python3-git=2.1.11-1 +python3-gitdb=2.0.5-1 +python3-gnupg=0.4.4-1 +python3-jsbeautifier=1.6.4-7 +python3-jsondiff=1.1.1-2 +python3-kerberos=1.1.14-2 +python3-kiwisolver=1.0.1-2+b1 +python3-lib2to3=3.7.3-1 +python3-libarchive-c=2.8-0.3 +python3-magic=2:0.4.15-2 +python3-matplotlib=3.0.2-2 +python3-minimal=3.7.3-1 +python3-numpy=1:1.16.2-1 +python3-olefile=0.46-1 +python3-opengl=3.1.0+dfsg-2 +python3-pdfminer=20181108+dfsg-3 +python3-pil:amd64=5.4.1-2+deb10u2 +python3-pkg-resources=40.8.0-1 +python3-progressbar=2.5-1 +python3-protobuf=3.6.1.3-2 +python3-pyparsing=2.2.0+dfsg1-2 +python3-pypdf2=1.26.0-2 +python3-pyqt4=4.12.1+dfsg-2+b1 +python3-pyqtgraph=0.10.0-1 +python3-pyxattr=0.6.1-1 +python3-rpm=4.14.2.1+dfsg1-1 +python3-scipy=1.1.0-7 +python3-sip=4.19.14+dfsg-2 +python3-six=1.12.0-1 +python3-smmap=2.0.5-1 +python3-sortedcontainers=2.0.4-1 +python3-tk:amd64=3.7.3-1 +python3-tlsh=3.4.4+20151206-1.1 +python3-yaml=3.13-2 +python3.7=3.7.3-2+deb10u2 +python3.7-minimal=3.7.3-2+deb10u2 +qdbus=4:4.8.7+dfsg-18+deb10u1 +qt-at-spi:amd64=0.4.0-9 +qtchooser=66-2 +qtcore4-l10n=4:4.8.7+dfsg-18+deb10u1 +r-base-core=3.5.2-1 +r-base-dev=3.5.2-1 +r-cran-boot=1.3-20-2 +r-cran-class=7.3-15-1 +r-cran-cluster=2.0.7-1-1+b3 +r-cran-codetools=0.2-16-1 +r-cran-foreign=0.8.71-1 +r-cran-kernsmooth=2.23-15-3+b4 +r-cran-lattice=0.20-38-1 +r-cran-mass=7.3-51.1-1 +r-cran-matrix=1.2-15-1 +r-cran-mgcv=1.8-27-1 +r-cran-nlme=3.1.137-1+b3 +r-cran-nnet=7.3-12-2+b2 +r-cran-rpart=4.1-13-1+b1 +r-cran-spatial=7.3-11-2+b2 +r-cran-survival=2.43-3-1 +r-doc-html=3.5.2-1 +r-recommended=3.5.2-1 +readline-common=7.0-5 +repo=2.12-1~bpo10+1 +rpm-common=4.14.2.1+dfsg1-1 +rpm2cpio=4.14.2.1+dfsg1-1 +rsync=3.1.3-6 +schedtool=1.3.0-3 +sed=4.7-1 +sensible-utils=0.0.12 +shared-mime-info=1.10-1 +sleuthkit=4.6.5-1+deb10u1 +sng=1.1.0-1+b1 +sqlite3=3.27.2-3+deb10u1 +squashfs-tools=1:4.3-12 +sudo=1.8.27-1+deb10u3 +sysvinit-utils=2.93-8 +tar=1.30+dfsg-6 +tcpdump=4.9.3-1~deb10u2 +tk8.6-blt2.5=2.5.3+dfsg-4 +toilet=0.3-1.2 +toilet-fonts=0.3-1.2 +ttf-bitstream-vera=1.10-8 +tzdata=2021a-0+deb10u1 +u-boot-tools=2019.01+dfsg-7 +ucf=3.0038+nmu1 +unzip=6.0-23+deb10u1 +util-linux=2.33.1-0.1 +va-driver-all:amd64=2.4.0-1 +vdpau-driver-all:amd64=1.1.1-10 +vim=2:8.1.0875-5 +vim-common=2:8.1.0875-5 +vim-runtime=2:8.1.0875-5 +wabt=1.0.8-1 +wget=1.20.1-1.1 +x11-common=1:7.7+19 +x11-utils=7.7+4 +x11-xserver-utils=7.7+8 +x11proto-core-dev=2018.4-4 +x11proto-damage-dev=1:2018.4-4 +x11proto-dev=2018.4-4 +x11proto-fixes-dev=1:2018.4-4 +x11proto-input-dev=2018.4-4 +x11proto-xext-dev=2018.4-4 +x11proto-xf86vidmode-dev=2018.4-4 +xauth=1:1.0.10-1 +xdg-user-dirs=0.17-2 +xdg-utils=1.1.3-1+deb10u1 +xkb-data=2.26-2 +xmlbeans=3.0.2-1 +xorg-sgml-doctools=1:1.11-1 +xsltproc=1.1.32-2.2~deb10u1 +xtrans-dev=1.3.5-1 +xxd=2:8.1.0875-5 +xz-utils=5.2.4-1 +zip=3.0-11+b1 +zlib1g:amd64=1:1.2.11.dfsg-1 +zlib1g-dev:amd64=1:1.2.11.dfsg-1 +zstd=1.3.8+dfsg-3 diff --git a/config/container/packages.list b/config/container/packages.list index b184555..7377d6b 100644 --- a/config/container/packages.list +++ b/config/container/packages.list @@ -1,1128 +1,74 @@ -aapt=1:8.1.0+r23-3~18.10 -abootimg=0.6-1build1 -acl=2.2.52-3build1 -adb=1:8.1.0+r23-5~18.10 -adduser=3.117ubuntu1 -adwaita-icon-theme=3.30.0-0ubuntu1 -android-framework-res=1:8.1.0+r23-3~18.10 -android-libaapt:amd64=1:8.1.0+r23-3~18.10 -android-libadb=1:8.1.0+r23-5~18.10 -android-libandroidfw:amd64=1:8.1.0+r23-3~18.10 -android-libbacktrace=1:8.1.0+r23-5~18.10 -android-libbase=1:8.1.0+r23-5~18.10 -android-libboringssl=8.1.0+r23-2 -android-libcrypto-utils=1:8.1.0+r23-5~18.10 -android-libcutils=1:8.1.0+r23-5~18.10 -android-liblog=1:8.1.0+r23-5~18.10 -android-libunwind=8.1.0+r23-2 -android-libutils=1:8.1.0+r23-5~18.10 -android-libziparchive=1:8.1.0+r23-5~18.10 -android-sdk-platform-tools-common=27.0.0+10~18.04.2 -android-tools-adb=1:8.1.0+r23-5~18.10 -apktool=2.3.4-1 -apt=1.7.5 -apt-clone=0.4.1ubuntu2 -arj=3.10.22-17 -aspell=0.60.7~20110707-5 -aspell-en=2018.04.16-0-1 -at-spi2-core=2.30.0-2 -attr=1:2.4.47-2build1 -augeas-lenses=1.10.1-2 -base-files=10.1ubuntu7.1 -base-passwd=3.5.45 -bash=4.4.18-2ubuntu3 -bc=1.07.1-2 -binfmt-support=2.1.8-2 -binutils=2.31.1-6ubuntu1.2 -binutils-common:amd64=2.31.1-6ubuntu1.2 -binutils-multiarch=2.31.1-6ubuntu1.2 -binutils-x86-64-linux-gnu=2.31.1-6ubuntu1.2 -bison=2:3.0.4.dfsg-1ubuntu1 -blt=2.5.3+dfsg-4 -bsdmainutils=11.1.2ubuntu2 -bsdutils=1:2.32-0.1ubuntu2 -btrfs-progs=4.16.1-2ubuntu1 -bubblewrap=0.3.1-2 -build-essential=12.5ubuntu2 -busybox-initramfs=1:1.27.2-2ubuntu4.1 -busybox-static=1:1.27.2-2ubuntu4.1 -bzip2=1.0.6-9ubuntu0.18.10.1 -bzip2-doc=1.0.6-9ubuntu0.18.10.1 -ca-certificates=20180409 -ca-certificates-java=20180516ubuntu1 -ca-certificates-mono=4.6.2.7+dfsg-1ubuntu1 -caca-utils=0.99.beta19-2ubuntu0.18.10.1 -cgpt=0~R63-10032.B-3 -cli-common=0.9+nmu1 -colord=1.4.3-3 -colord-data=1.4.3-3 -console-setup=1.178ubuntu9.2 -console-setup-linux=1.178ubuntu9.2 -coreutils=8.28-1ubuntu2 -cpio=2.12+dfsg-6 -cpp=4:8.3.0-1ubuntu1.2 -cpp-8=8.3.0-6ubuntu1~18.10.1 -cpu-checker=0.7-0ubuntu7 -cramfsswap=1.4.1.1ubuntu1 -cryptsetup=2:2.0.4-2ubuntu2 -cryptsetup-bin=2:2.0.4-2ubuntu2 -cryptsetup-initramfs=2:2.0.4-2ubuntu2 -cryptsetup-run=2:2.0.4-2ubuntu2 -curl=7.61.0-1ubuntu2.4 -dash=0.5.8-2.10 -db-util=1:5.3.21~exp1ubuntu2 -db5.3-util=5.3.28+dfsg1-0.1ubuntu0.1 -dbus=1.12.10-1ubuntu2.1 -dbus-user-session=1.12.10-1ubuntu2.1 -dconf-gsettings-backend:amd64=0.30.0-1 -dconf-service=0.30.0-1 -debconf=1.5.69ubuntu1 -debianutils=4.8.6 -default-jre-headless=2:1.11-68ubuntu1 -device-tree-compiler=1.4.7-1 -dictionaries-common=1.28.0 -diffoscope=103 -diffutils=1:3.6-1 -dirmngr=2.2.8-3ubuntu1.1 -distro-info-data=0.38ubuntu0.4 -dmeventd=2:1.02.145-4.1ubuntu3.18.10.1 -dmidecode=3.1-2 -dmsetup=2:1.02.145-4.1ubuntu3.18.10.1 -docx2txt=1.4-1 -dosfstools=4.1-2 -dpkg=1.19.0.5ubuntu5 -dpkg-dev=1.19.0.5ubuntu5 -dpkg-repack=1.44 -e2fsprogs=1.44.4-2ubuntu0.2 -emacsen-common=3.0.4 -enchant=1.6.0-11.1 -enjarify=1:1.0.3-4 -evince=3.30.1-1ubuntu1.3 -evince-common=3.30.1-1ubuntu1.3 -exfat-fuse=1.2.8-1 -exfat-utils=1.2.8-1 -extlinux=3:6.04~git20171011.af7e95c3+dfsg1-4ubuntu1.18.10.2 -fakeroot=1.22-2ubuntu1 -fdisk=2.32-0.1ubuntu2 -file=1:5.34-2ubuntu0.1 -finalrd=3 -findutils=4.6.0+git+20180808-2 -flex=2.6.4-6.2 -fontconfig=2.13.0-5ubuntu3 -fontconfig-config=2.13.0-5ubuntu3 -fontforge-extras=0.3-4ubuntu1 -fonts-dejavu-core=2.37-1 -fonts-dejavu-extra=2.37-1 -fonts-droid-fallback=1:6.0.1r16-1.1 -fonts-lyx=2.3.0-2 -fonts-noto-mono=20171026-2 -fp-compiler-3.0.4:amd64=3.0.4+dfsg-20ubuntu1 -fp-units-rtl-3.0.4:amd64=3.0.4+dfsg-20ubuntu1 -fp-utils=3.0.4+dfsg-20ubuntu1 -fp-utils-3.0.4=3.0.4+dfsg-20ubuntu1 -fpc-source-3.0.4=3.0.4+dfsg-20ubuntu1 -freeglut3:amd64=2.8.1-3 -fuse=2.9.8-1ubuntu1 -g++=4:8.3.0-1ubuntu1.2 -g++-8=8.3.0-6ubuntu1~18.10.1 -g++-8-multilib=8.3.0-6ubuntu1~18.10.1 -g++-multilib=4:8.3.0-1ubuntu1.2 -gawk=1:4.1.4+dfsg-1build1 -gcc=4:8.3.0-1ubuntu1.2 -gcc-8=8.3.0-6ubuntu1~18.10.1 -gcc-8-base:amd64=8.3.0-6ubuntu1~18.10.1 -gcc-8-multilib=8.3.0-6ubuntu1~18.10.1 -gcc-multilib=4:8.3.0-1ubuntu1.2 -gdisk=1.0.3-1build1 -genisoimage=9:1.1.11-3ubuntu2 -gettext=0.19.8.1-8ubuntu0.1 -gettext-base=0.19.8.1-8ubuntu0.1 -gfortran=4:8.3.0-1ubuntu1.2 -gfortran-8=8.3.0-6ubuntu1~18.10.1 -ghc=8.2.2-6 -ghostscript=9.26~dfsg+0-0ubuntu0.18.10.9 -giflib-tools=5.1.4-3 -gir1.2-glib-2.0:amd64=1.58.0-1 -gir1.2-harfbuzz-0.0:amd64=1.8.8-2 -git=1:2.19.1-1ubuntu1.1 -git-man=1:2.19.1-1ubuntu1.1 -glib-networking:amd64=2.58.0-1 -glib-networking-common=2.58.0-1 -glib-networking-services=2.58.0-1 -gnome-desktop3-data=3.30.1-1ubuntu1.1 -gnumeric=1.12.43-1 -gnumeric-common=1.12.43-1 -gnumeric-doc=1.12.43-1 -gnupg=2.2.8-3ubuntu1.1 -gnupg-l10n=2.2.8-3ubuntu1.1 -gnupg-utils=2.2.8-3ubuntu1.1 -golang=2:1.10~4ubuntu1 -golang-1.10=1.10.4-2ubuntu1 -golang-1.10-doc=1.10.4-2ubuntu1 -golang-1.10-go=1.10.4-2ubuntu1 -golang-1.10-race-detector-runtime=0.0+svn285455-0ubuntu1 -golang-1.10-src=1.10.4-2ubuntu1 -golang-doc=2:1.10~4ubuntu1 -golang-go=2:1.10~4ubuntu1 -golang-race-detector-runtime=2:1.10~4ubuntu1 -golang-src=2:1.10~4ubuntu1 -gperf=3.1-1 -gpg=2.2.8-3ubuntu1.1 -gpg-agent=2.2.8-3ubuntu1.1 -gpg-wks-client=2.2.8-3ubuntu1.1 -gpg-wks-server=2.2.8-3ubuntu1.1 -gpgconf=2.2.8-3ubuntu1.1 -gpgsm=2.2.8-3ubuntu1.1 -gpgv=2.2.8-3ubuntu1.1 -grep=3.1-2ubuntu1 -groff-base=1.22.3-10 -gsettings-desktop-schemas=3.28.1-1ubuntu1 -gsfonts=1:8.11+urwcyr1.0.7~pre44-4.4 -gstreamer1.0-gl:amd64=1.14.4-1ubuntu1.1 -gstreamer1.0-plugins-base:amd64=1.14.4-1ubuntu1.1 -gstreamer1.0-plugins-good:amd64=1.14.4-1ubuntu1 -gstreamer1.0-pulseaudio:amd64=1.14.4-1ubuntu1 -gstreamer1.0-x:amd64=1.14.4-1ubuntu1.1 -gtk-update-icon-cache=3.24.4-0ubuntu1.1 -gzip=1.6-5ubuntu2 -hfsplus=1.0.4-15 -hicolor-icon-theme=0.17-2 -hostname=3.20 -htop=2.2.0-1 -humanity-icon-theme=0.6.15 -hunspell-en-us=1:2018.04.16-1 -ibverbs-providers:amd64=19.0-1ubuntu0.1 -icoutils=0.32.3-1 -icu-devtools=60.2-6ubuntu1 -imagemagick=8:6.9.10.8+dfsg-1ubuntu2.2 -imagemagick-6-common=8:6.9.10.8+dfsg-1ubuntu2.2 -imagemagick-6.q16=8:6.9.10.8+dfsg-1ubuntu2.2 -init-system-helpers=1.54 -initramfs-tools=0.131ubuntu15.2 -initramfs-tools-bin=0.131ubuntu15.2 -initramfs-tools-core=0.131ubuntu15.2 -iproute2=4.18.0-1ubuntu2 -ipxe-qemu=1.0.0+git-20180124.fbe8c52d-0ubuntu4.1 -ipxe-qemu-256k-compat-efi-roms=1.0.0+git-20150424.a25a16d-0ubuntu3 -isc-dhcp-client=4.3.5-3ubuntu9.1 -isc-dhcp-common=4.3.5-3ubuntu9.1 -iso-codes=3.79-1 -java-common=0.68ubuntu1 -javascript-common=11 -jsbeautifier=1.6.4-7 -junit=3.8.2-9 -kbd=2.0.4-2ubuntu1 -keyboard-configuration=1.178ubuntu9.2 -klibc-utils=2.0.4-9ubuntu2 -kmod=25-1ubuntu1.2 -krb5-locales=1.16-2ubuntu1.1 -ldmtool=0.2.4-1 -less=487-0.1build1 -lib32asan5=8.3.0-6ubuntu1~18.10.1 -lib32atomic1=8.3.0-6ubuntu1~18.10.1 -lib32gcc-8-dev=8.3.0-6ubuntu1~18.10.1 -lib32gcc1=1:8.3.0-6ubuntu1~18.10.1 -lib32gomp1=8.3.0-6ubuntu1~18.10.1 -lib32itm1=8.3.0-6ubuntu1~18.10.1 -lib32mpx2=8.3.0-6ubuntu1~18.10.1 -lib32ncurses-dev=6.1+20180210-4ubuntu1 -lib32ncurses6=6.1+20180210-4ubuntu1 -lib32ncursesw6=6.1+20180210-4ubuntu1 -lib32quadmath0=8.3.0-6ubuntu1~18.10.1 -lib32readline-dev=7.0-5 -lib32readline7=7.0-5 -lib32stdc++-8-dev=8.3.0-6ubuntu1~18.10.1 -lib32stdc++6=8.3.0-6ubuntu1~18.10.1 -lib32tinfo6=6.1+20180210-4ubuntu1 -lib32ubsan1=8.3.0-6ubuntu1~18.10.1 -lib32z1=1:1.2.11.dfsg-0ubuntu2 -lib32z1-dev=1:1.2.11.dfsg-0ubuntu2 -libaa1:amd64=1.4p5-44build3 -libacl1:amd64=2.2.52-3build1 -libafflib0v5=3.7.16-3 -libaio1:amd64=0.3.111-1 -libalgorithm-diff-perl=1.19.03-2 -libalgorithm-diff-xs-perl=0.04-5 -libalgorithm-merge-perl=0.08-3 -libantlr-java=2.7.7+dfsg-9.2build1 -libantlr3-runtime-java=3.5.2-9 -libapache-pom-java=18-1 -libapparmor1:amd64=2.12-4ubuntu8 -libapt-inst2.0:amd64=1.7.5 -libapt-pkg5.0:amd64=1.7.5 -libarchive-tools=3.2.2-5ubuntu0.2 -libarchive13:amd64=3.2.2-5ubuntu0.2 -libargon2-1:amd64=0~20171227-0.1 -libasan5:amd64=8.3.0-6ubuntu1~18.10.1 -libasn1-8-heimdal:amd64=7.5.0+dfsg-2 -libasound2:amd64=1.1.6-1ubuntu1.2 -libasound2-data=1.1.6-1ubuntu1.2 -libasound2-dev:amd64=1.1.6-1ubuntu1.2 -libaspell15:amd64=0.60.7~20110707-5 -libassuan0:amd64=2.5.1-2 -libasyncns0:amd64=0.8-6 -libatinject-jsr330-api-java=1.0+ds1-5 -libatk-bridge2.0-0:amd64=2.30.0-1 -libatk-wrapper-java=0.33.3-21 -libatk-wrapper-java-jni:amd64=0.33.3-21 -libatk1.0-0:amd64=2.30.0-1 -libatk1.0-data=2.30.0-1 -libatm1:amd64=1:2.5.1-2build1 -libatomic1:amd64=8.3.0-6ubuntu1~18.10.1 -libatspi2.0-0:amd64=2.30.0-2 -libattr1:amd64=1:2.4.47-2build1 -libaudio2:amd64=1.9.4-6 -libaudit-common=1:2.8.3-1ubuntu2 -libaudit1:amd64=1:2.8.3-1ubuntu2 -libaugeas0:amd64=1.10.1-2 -libauthen-sasl-perl=2.1600-1 -libavahi-client3:amd64=0.7-4ubuntu2.1 -libavahi-common-data:amd64=0.7-4ubuntu2.1 -libavahi-common3:amd64=0.7-4ubuntu2.1 -libavc1394-0:amd64=0.5.4-5 -libbfio1=20170123-4 -libbinutils:amd64=2.31.1-6ubuntu1.2 -libbison-dev:amd64=2:3.0.4.dfsg-1ubuntu1 -libblas-dev:amd64=3.8.0-1build1 -libblas3:amd64=3.8.0-1build1 -libblkid1:amd64=2.32-0.1ubuntu2 -libbluetooth3:amd64=5.50-0ubuntu1 -libbrlapi0.6:amd64=5.6-5ubuntu1 -libbrotli1:amd64=1.0.6-1 -libbsd-dev:amd64=0.9.1-1 -libbsd0:amd64=0.9.1-1 -libbz2-1.0:amd64=1.0.6-9ubuntu0.18.10.1 -libbz2-dev:amd64=1.0.6-9ubuntu0.18.10.1 -libc-bin=2.28-0ubuntu1 -libc-dev-bin=2.28-0ubuntu1 -libc6:amd64=2.28-0ubuntu1 -libc6-dev:amd64=2.28-0ubuntu1 -libc6-dev-i386=2.28-0ubuntu1 -libc6-dev-x32=2.28-0ubuntu1 -libc6-i386=2.28-0ubuntu1 -libc6-x32=2.28-0ubuntu1 -libcaca-dev=0.99.beta19-2ubuntu0.18.10.1 -libcaca0:amd64=0.99.beta19-2ubuntu0.18.10.1 -libcacard0:amd64=1:2.5.3-1 -libcairo-gobject2:amd64=1.15.12-1ubuntu0.1 -libcairo2:amd64=1.15.12-1ubuntu0.1 -libcap-ng0:amd64=0.7.9-1 -libcap2:amd64=1:2.25-1.2 -libcap2-bin=1:2.25-1.2 -libcc1-0:amd64=8.3.0-6ubuntu1~18.10.1 -libcdparanoia0:amd64=3.10.2+debian-13 -libcolamd2:amd64=1:5.3.0+dfsg-1 -libcolord2:amd64=1.4.3-3 -libcolorhug2:amd64=1.4.3-3 -libcom-err2:amd64=1.44.4-2ubuntu0.2 -libcommons-cli-java=1.4-1 -libcommons-io-java=2.6-2 -libcommons-lang3-java=3.8-1 -libcommons-parent-java=43-1 -libcroco3:amd64=0.6.12-2 -libcryptsetup12:amd64=2:2.0.4-2ubuntu2 -libcups2:amd64=2.2.8-5ubuntu1.4 -libcupsfilters1:amd64=1.21.3-1ubuntu0.1 -libcupsimage2:amd64=2.2.8-5ubuntu1.4 -libcurl3-gnutls:amd64=7.61.0-1ubuntu2.4 -libcurl4:amd64=7.61.0-1ubuntu2.4 -libdata-dump-perl=1.23-1 -libdate-manip-perl=6.73-1 -libdatrie1:amd64=0.2.12-1 -libdb5.3:amd64=5.3.28+dfsg1-0.1ubuntu0.1 -libdbus-1-3:amd64=1.12.10-1ubuntu2.1 -libdconf1:amd64=0.30.0-1 -libdebconfclient0:amd64=0.244ubuntu1 -libdevmapper-event1.02.1:amd64=2:1.02.145-4.1ubuntu3.18.10.1 -libdevmapper1.02.1:amd64=2:1.02.145-4.1ubuntu3.18.10.1 -libdjvulibre-text=3.5.27.1-9 -libdjvulibre21:amd64=3.5.27.1-9 -libdns-export1102=1:9.11.4+dfsg-3ubuntu5.4 -libdom4j-java=2.1.1-2 -libdpkg-perl=1.19.0.5ubuntu5 -libdrm-amdgpu1:amd64=2.4.95-1 -libdrm-common=2.4.95-1 -libdrm-dev:amd64=2.4.95-1 -libdrm-intel1:amd64=2.4.95-1 -libdrm-nouveau2:amd64=2.4.95-1 -libdrm-radeon1:amd64=2.4.95-1 -libdrm2:amd64=2.4.95-1 -libdv4:amd64=1.0.0-11 -libedit2:amd64=3.1-20180525-1 -libegl-mesa0:amd64=18.2.8-0ubuntu0~18.10.2 -libegl1:amd64=1.1.0-1 -libelf1:amd64=0.170-0.5.0ubuntu1.1 -libenchant1c2a:amd64=1.6.0-11.1 -libencode-locale-perl=1.05-1 -libepoxy0:amd64=1.5.3-0.1 -liberror-perl=0.17026-1 -libevdocument3-4:amd64=3.30.1-1ubuntu1.3 -libevview3-3:amd64=3.30.1-1ubuntu1.3 -libewf2=20140608-6.1build1 -libexif12:amd64=0.6.21-5 -libexpat1:amd64=2.2.6-1ubuntu0.18.10 -libext2fs2:amd64=1.44.4-2ubuntu0.2 -libfakeroot:amd64=1.22-2ubuntu1 -libfaketime:amd64=0.9.7-2.1 -libfdisk1:amd64=2.32-0.1ubuntu2 -libfdt1:amd64=1.4.7-1 -libffi-dev:amd64=3.2.1-8 -libffi6:amd64=3.2.1-8 -libfftw3-double3:amd64=3.3.8-2 -libfile-basedir-perl=0.08-1 -libfile-desktopentry-perl=0.22-1 -libfile-fcntllock-perl=0.22-3build2 -libfile-listing-perl=6.04-1 -libfile-mimeinfo-perl=0.29-1 -libfl-dev:amd64=2.6.4-6.2 -libfl2:amd64=2.6.4-6.2 -libflac8:amd64=1.3.2-3 -libfont-afm-perl=1.20-2 -libfontconfig1:amd64=2.13.0-5ubuntu3 -libfontenc1:amd64=1:1.1.3-1 -libfreetype6:amd64=2.8.1-2ubuntu2 -libfribidi0:amd64=1.0.5-3 -libfuse2:amd64=2.9.8-1ubuntu1 -libgail-common:amd64=2.24.32-3ubuntu1 -libgail18:amd64=2.24.32-3ubuntu1 -libgbm1:amd64=18.2.8-0ubuntu0~18.10.2 -libgcc-8-dev:amd64=8.3.0-6ubuntu1~18.10.1 -libgcc1:amd64=1:8.3.0-6ubuntu1~18.10.1 -libgcrypt20:amd64=1.8.3-1ubuntu1 -libgd3:amd64=2.2.5-4ubuntu1.1 -libgdbm-compat4:amd64=1.14.1-6 -libgdbm5:amd64=1.14.1-6 -libgdk-pixbuf2.0-0:amd64=2.38.0+dfsg-6 -libgdk-pixbuf2.0-bin=2.38.0+dfsg-6 -libgdk-pixbuf2.0-common=2.38.0+dfsg-6 -libgfortran-8-dev:amd64=8.3.0-6ubuntu1~18.10.1 -libgfortran5:amd64=8.3.0-6ubuntu1~18.10.1 -libgif7:amd64=5.1.4-3 -libgirepository-1.0-1:amd64=1.58.0-1 -libgl1:amd64=1.1.0-1 -libgl1-mesa-dev:amd64=18.2.8-0ubuntu0~18.10.2 -libgl1-mesa-dri:amd64=18.2.8-0ubuntu0~18.10.2 -libglapi-mesa:amd64=18.2.8-0ubuntu0~18.10.2 -libgles1:amd64=1.1.0-1 -libgles2:amd64=1.1.0-1 -libglib2.0-0:amd64=2.58.1-2ubuntu0.2 -libglib2.0-bin=2.58.1-2ubuntu0.2 -libglib2.0-data=2.58.1-2ubuntu0.2 -libglib2.0-dev:amd64=2.58.1-2ubuntu0.2 -libglib2.0-dev-bin=2.58.1-2ubuntu0.2 -libglu1-mesa:amd64=9.0.0-2.1build1 -libglu1-mesa-dev:amd64=9.0.0-2.1build1 -libglvnd-core-dev:amd64=1.1.0-1 -libglvnd-dev:amd64=1.1.0-1 -libglvnd0:amd64=1.1.0-1 -libglx-mesa0:amd64=18.2.8-0ubuntu0~18.10.2 -libglx0:amd64=1.1.0-1 -libgmp-dev:amd64=2:6.1.2+dfsg-3 -libgmp10:amd64=2:6.1.2+dfsg-3 -libgmpxx4ldbl:amd64=2:6.1.2+dfsg-3 -libgnome-desktop-3-17:amd64=3.30.1-1ubuntu1.1 -libgnutls30:amd64=3.6.4-2ubuntu1.2 -libgoffice-0.10-10=0.10.43-1 -libgoffice-0.10-10-common=0.10.43-1 -libgomp1:amd64=8.3.0-6ubuntu1~18.10.1 -libgpg-error0:amd64=1.32-1 -libgphoto2-6:amd64=2.5.19-1 -libgphoto2-l10n=2.5.19-1 -libgphoto2-port12:amd64=2.5.19-1 -libgpm2:amd64=1.20.7-5 -libgraphene-1.0-0:amd64=1.8.2-1 -libgraphite2-3:amd64=1.3.12-1 -libgraphite2-dev:amd64=1.3.12-1 -libgs9:amd64=9.26~dfsg+0-0ubuntu0.18.10.9 -libgs9-common=9.26~dfsg+0-0ubuntu0.18.10.9 -libgsf-1-114:amd64=1.14.44-1 -libgsf-1-common=1.14.44-1 -libgspell-1-1:amd64=1.6.1-1 -libgspell-1-common=1.6.1-1 -libgssapi-krb5-2:amd64=1.16-2ubuntu1.1 -libgssapi3-heimdal:amd64=7.5.0+dfsg-2 -libgstreamer-gl1.0-0:amd64=1.14.4-1ubuntu1.1 -libgstreamer-plugins-base1.0-0:amd64=1.14.4-1ubuntu1.1 -libgstreamer-plugins-good1.0-0:amd64=1.14.4-1ubuntu1 -libgstreamer1.0-0:amd64=1.14.4-1 -libgtk-3-0:amd64=3.24.4-0ubuntu1.1 -libgtk-3-bin=3.24.4-0ubuntu1.1 -libgtk-3-common=3.24.4-0ubuntu1.1 -libgtk2.0-0:amd64=2.24.32-3ubuntu1 -libgtk2.0-bin=2.24.32-3ubuntu1 -libgtk2.0-common=2.24.32-3ubuntu1 -libguava-java=19.0-1 -libgudev-1.0-0:amd64=1:232-2 -libguestfs-hfsplus:amd64=1:1.38.4-1ubuntu2.1 -libguestfs-reiserfs:amd64=1:1.38.4-1ubuntu2.1 -libguestfs-xfs:amd64=1:1.38.4-1ubuntu2.1 -libguestfs0:amd64=1:1.38.4-1ubuntu2.1 -libgusb2:amd64=0.3.0-0ubuntu1 -libgxps2:amd64=0.3.0-3 -libharfbuzz-dev:amd64=1.8.8-2 -libharfbuzz-gobject0:amd64=1.8.8-2 -libharfbuzz-icu0:amd64=1.8.8-2 -libharfbuzz0b:amd64=1.8.8-2 -libhcrypto4-heimdal:amd64=7.5.0+dfsg-2 -libheimbase1-heimdal:amd64=7.5.0+dfsg-2 -libheimntlm0-heimdal:amd64=7.5.0+dfsg-2 -libhfsp0=1.0.4-15 -libhivex0:amd64=1.3.15-1ubuntu1 -libhogweed4:amd64=3.4-1 -libhtml-form-perl=6.03-1 -libhtml-format-perl=2.12-1 -libhtml-parser-perl=3.72-3build1 -libhtml-tagset-perl=3.20-3 -libhtml-tree-perl=5.07-1 -libhttp-cookies-perl=6.04-1 -libhttp-daemon-perl=6.01-1 -libhttp-date-perl=6.02-1 -libhttp-message-perl=6.18-1 -libhttp-negotiate-perl=6.01-1 -libhunspell-1.6-0:amd64=1.6.2-1build1 -libhx509-5-heimdal:amd64=7.5.0+dfsg-2 -libhyphen0:amd64=2.8.8-5 -libibverbs1:amd64=19.0-1ubuntu0.1 -libice-dev:amd64=2:1.0.9-2 -libice6:amd64=2:1.0.9-2 -libicu-dev=60.2-6ubuntu1 -libicu-le-hb-dev:amd64=1.0.3+git161113-5 -libicu-le-hb0:amd64=1.0.3+git161113-5 -libicu4j-java=60.2-2 -libicu60:amd64=60.2-6ubuntu1 -libiculx60:amd64=60.2-6ubuntu1 -libid3tag0:amd64=0.15.1b-13 -libidn11:amd64=1.33-2.2ubuntu1.1 -libidn2-0:amd64=2.0.5-1 -libiec61883-0:amd64=1.2.0-2 -libieee1284-3:amd64=0.2.11-13 -libijs-0.35:amd64=0.35-13 -libilmbase23:amd64=2.2.1-2ubuntu1 -libimlib2:amd64=1.5.1-1 -libintellij-annotations-java=16.0.2-4 -libio-html-perl=1.001-1 -libio-socket-ssl-perl=2.060-3 -libio-stringy-perl=2.111-2 -libip4tc0:amd64=1.6.1-2ubuntu2 -libipc-system-simple-perl=1.25-4 -libisc-export169:amd64=1:9.11.4+dfsg-3ubuntu5.4 -libiscsi7:amd64=1.17.0-1.1 -libisl19:amd64=0.20-2 -libitm1:amd64=8.3.0-6ubuntu1~18.10.1 -libjack-jackd2-0:amd64=1.9.12~dfsg-2 -libjansson4:amd64=2.11-1 -libjavascriptcoregtk-4.0-18:amd64=2.24.2-0ubuntu0.18.10.1 -libjaxen-java=1.1.6-3 -libjaxp1.3-java=1.3.05-5 -libjbig0:amd64=2.1-3.1build1 -libjbig2dec0:amd64=0.15-1 -libjcommander-java=1.71-3 -libjdom1-java=1.1.3-2~18.04 -libjetbrains-annotations-java=16.0.2-4 -libjpeg-dev:amd64=8c-2ubuntu8 -libjpeg-turbo8:amd64=2.0.0-0ubuntu2 -libjpeg-turbo8-dev:amd64=2.0.0-0ubuntu2 -libjpeg8:amd64=8c-2ubuntu8 -libjpeg8-dev:amd64=8c-2ubuntu8 -libjs-jquery=3.2.1-1 -libjs-jquery-ui=1.12.1+dfsg-5 -libjson-c3:amd64=0.12.1-1.3 -libjson-glib-1.0-0:amd64=1.4.4-1 -libjson-glib-1.0-common=1.4.4-1 -libjsr305-java=0.1~+svn49-10 -libk5crypto3:amd64=1.16-2ubuntu1.1 -libkeyutils1:amd64=1.5.9-9.3 -libklibc=2.0.4-9ubuntu2 -libkmod2:amd64=25-1ubuntu1.2 -libkpathsea6:amd64=2018.20180824.48463-1ubuntu0.1 -libkrb5-26-heimdal:amd64=7.5.0+dfsg-2 -libkrb5-3:amd64=1.16-2ubuntu1.1 -libkrb5support0:amd64=1.16-2ubuntu1.1 -libksba8:amd64=1.3.5-2 -liblapack-dev:amd64=3.8.0-1build1 -liblapack3:amd64=3.8.0-1build1 -liblcms2-2:amd64=2.9-3 -libldap-2.4-2:amd64=2.4.46+dfsg-5ubuntu1.2 -libldap-common=2.4.46+dfsg-5ubuntu1.2 -libldm-1.0-0:amd64=0.2.4-1 -libllvm7:amd64=1:7-3 -liblocale-gettext-perl=1.07-3build2 -liblqr-1-0:amd64=0.4.2-2.1 -liblsan0:amd64=8.3.0-6ubuntu1~18.10.1 -libltdl7:amd64=2.4.6-4 -liblua5.2-0:amd64=5.2.4-1.1build1 -liblvm2app2.2:amd64=2.02.176-4.1ubuntu3.18.10.1 -liblvm2cmd2.02:amd64=2.02.176-4.1ubuntu3.18.10.1 -liblwp-mediatypes-perl=6.02-1 -liblwp-protocol-https-perl=6.07-2 -liblz4-1:amd64=1.8.2-1ubuntu1 -liblz4-tool=1.8.2-1ubuntu1 -liblzma-dev:amd64=5.2.2-1.3 -liblzma5:amd64=5.2.2-1.3 -liblzo2-2:amd64=2.10-0.1 -libmagic-mgc=1:5.34-2ubuntu0.1 -libmagic1:amd64=1:5.34-2ubuntu0.1 -libmagickcore-6.q16-6:amd64=8:6.9.10.8+dfsg-1ubuntu2.2 -libmagickcore-6.q16-6-extra:amd64=8:6.9.10.8+dfsg-1ubuntu2.2 -libmagickwand-6.q16-6:amd64=8:6.9.10.8+dfsg-1ubuntu2.2 -libmailtools-perl=2.18-1 -libmng2:amd64=2.0.2-0ubuntu3 -libmnl0:amd64=1.0.4-2 -libmono-corlib4.5-cil=4.6.2.7+dfsg-1ubuntu1 -libmono-i18n-west4.0-cil=4.6.2.7+dfsg-1ubuntu1 -libmono-i18n4.0-cil=4.6.2.7+dfsg-1ubuntu1 -libmono-security4.0-cil=4.6.2.7+dfsg-1ubuntu1 -libmono-system-configuration4.0-cil=4.6.2.7+dfsg-1ubuntu1 -libmono-system-security4.0-cil=4.6.2.7+dfsg-1ubuntu1 -libmono-system-xml4.0-cil=4.6.2.7+dfsg-1ubuntu1 -libmono-system4.0-cil=4.6.2.7+dfsg-1ubuntu1 -libmonoboehm-2.0-1=4.6.2.7+dfsg-1ubuntu1 -libmount1:amd64=2.32-0.1ubuntu2 -libmp3lame0:amd64=3.100-2build1 -libmpc3:amd64=1.1.0-1 -libmpdec2:amd64=2.4.2-2 -libmpfr6:amd64=4.0.1-1 -libmpg123-0:amd64=1.25.10-2 -libmpx2:amd64=8.3.0-6ubuntu1~18.10.1 -libmysqlclient20:amd64=5.7.26-0ubuntu0.18.10.1 -libnautilus-extension1a:amd64=1:3.26.4-0ubuntu7.2 -libncurses-dev:amd64=6.1+20180210-4ubuntu1 -libncurses5:amd64=6.1+20180210-4ubuntu1 -libncurses5-dev:amd64=6.1+20180210-4ubuntu1 -libncurses6:amd64=6.1+20180210-4ubuntu1 -libncursesw6:amd64=6.1+20180210-4ubuntu1 -libnet-dbus-perl=1.1.0-4build2 -libnet-http-perl=6.18-1 -libnet-smtp-ssl-perl=1.04-1 -libnet-ssleay-perl=1.85-2ubuntu2 -libnetpbm10=2:10.0-15.3build1 -libnettle6:amd64=3.4-1 -libnghttp2-14:amd64=1.32.1-1build1 -libnl-3-200:amd64=3.4.0-1 -libnl-route-3-200:amd64=3.4.0-1 -libnotify4:amd64=0.7.7-3 -libnpth0:amd64=1.6-1 -libnspr4:amd64=2:4.18-1ubuntu1 -libnss-systemd:amd64=239-7ubuntu10.14 -libnss3:amd64=2:3.36.1-1ubuntu1.2 -libntfs-3g88=1:2017.3.23-2ubuntu0.18.10.2 -libnuma1:amd64=2.0.11-2.2ubuntu0.1 -libogg0:amd64=1.3.2-1 -libopenexr23:amd64=2.2.1-4build1 -libopengl0:amd64=1.1.0-1 -libopus0:amd64=1.3~beta+20180518-1 -liborc-0.4-0:amd64=1:0.4.28-3 -libp11-kit0:amd64=0.23.14-2 -libpam-cap:amd64=1:2.25-1.2 -libpam-modules:amd64=1.1.8-3.6ubuntu3 -libpam-modules-bin=1.1.8-3.6ubuntu3 -libpam-runtime=1.1.8-3.6ubuntu3 -libpam-systemd:amd64=239-7ubuntu10.14 -libpam0g:amd64=1.1.8-3.6ubuntu3 -libpango-1.0-0:amd64=1.42.4-3ubuntu1 -libpangocairo-1.0-0:amd64=1.42.4-3ubuntu1 -libpangoft2-1.0-0:amd64=1.42.4-3ubuntu1 -libpaper-utils=1.1.24+nmu5ubuntu1 -libpaper1:amd64=1.1.24+nmu5ubuntu1 -libparted2:amd64=3.2-21ubuntu2 -libpcap0.8:amd64=1.8.1-6ubuntu1 -libpci3:amd64=1:3.5.2-1ubuntu2 -libpciaccess0:amd64=0.14-1 -libpcre16-3:amd64=2:8.39-12~18.10 -libpcre3:amd64=2:8.39-12~18.10 -libpcre3-dev:amd64=2:8.39-12~18.10 -libpcre32-3:amd64=2:8.39-12~18.10 -libpcrecpp0v5:amd64=2:8.39-12~18.10 -libpcsclite1:amd64=1.8.23-3 -libperl4-corelibs-perl=0.004-1 -libperl5.26:amd64=5.26.2-7ubuntu0.1 -libpipeline1:amd64=1.5.0-1 -libpixman-1-0:amd64=0.34.0-2 -libplymouth4:amd64=0.9.3-1ubuntu10.1 -libpng-dev:amd64=1.6.34-2ubuntu0.1 -libpng-tools=1.6.34-2ubuntu0.1 -libpng16-16:amd64=1.6.34-2ubuntu0.1 -libpolkit-agent-1-0:amd64=0.105-21ubuntu0.4 -libpolkit-backend-1-0:amd64=0.105-21ubuntu0.4 -libpolkit-gobject-1-0:amd64=0.105-21ubuntu0.4 -libpoppler-glib8:amd64=0.68.0-0ubuntu1.7 -libpoppler79:amd64=0.68.0-0ubuntu1.7 -libpopt0:amd64=1.16-11 -libprocps7:amd64=2:3.3.15-2ubuntu1 -libprocyon-java=0.5.32-5~18.04 -libprotobuf-lite10:amd64=3.0.0-9.1ubuntu3 -libproxy1v5:amd64=0.4.15-2 -libpsl5:amd64=0.20.2-1 -libpthread-stubs0-dev:amd64=0.3-4 -libpulse-dev:amd64=1:12.2-0ubuntu5 -libpulse-mainloop-glib0:amd64=1:12.2-0ubuntu5 -libpulse0:amd64=1:12.2-0ubuntu5 -libpython-stdlib:amd64=2.7.15-3 -libpython2-stdlib:amd64=2.7.15-3 -libpython2.7-minimal:amd64=2.7.16-2~18.10 -libpython2.7-stdlib:amd64=2.7.16-2~18.10 -libpython3-stdlib:amd64=3.6.7-1~18.10 -libpython3.6:amd64=3.6.8-1~18.10 -libpython3.6-minimal:amd64=3.6.8-1~18.10 -libpython3.6-stdlib:amd64=3.6.8-1~18.10 -libqt4-dbus:amd64=4:4.8.7+dfsg-7ubuntu1 -libqt4-declarative:amd64=4:4.8.7+dfsg-7ubuntu1 -libqt4-designer:amd64=4:4.8.7+dfsg-7ubuntu1 -libqt4-help:amd64=4:4.8.7+dfsg-7ubuntu1 -libqt4-network:amd64=4:4.8.7+dfsg-7ubuntu1 -libqt4-script:amd64=4:4.8.7+dfsg-7ubuntu1 -libqt4-scripttools:amd64=4:4.8.7+dfsg-7ubuntu1 -libqt4-sql:amd64=4:4.8.7+dfsg-7ubuntu1 -libqt4-sql-mysql:amd64=4:4.8.7+dfsg-7ubuntu1 -libqt4-svg:amd64=4:4.8.7+dfsg-7ubuntu1 -libqt4-test:amd64=4:4.8.7+dfsg-7ubuntu1 -libqt4-xml:amd64=4:4.8.7+dfsg-7ubuntu1 -libqt4-xmlpatterns:amd64=4:4.8.7+dfsg-7ubuntu1 -libqtassistantclient4:amd64=4.6.3-7build1 -libqtcore4:amd64=4:4.8.7+dfsg-7ubuntu1 -libqtdbus4:amd64=4:4.8.7+dfsg-7ubuntu1 -libqtgui4:amd64=4:4.8.7+dfsg-7ubuntu1 -libquadmath0:amd64=8.3.0-6ubuntu1~18.10.1 -librados2=13.2.4+dfsg1-0ubuntu0.18.10.2 -libraw1394-11:amd64=2.1.2-1 -librbd1=13.2.4+dfsg1-0ubuntu0.18.10.2 -librdmacm1:amd64=19.0-1ubuntu0.1 -libreadline-dev:amd64=7.0-5 -libreadline5:amd64=5.2+dfsg-3build2 -libreadline7:amd64=7.0-5 -librest-0.7-0:amd64=0.8.0-2 -libroken18-heimdal:amd64=7.5.0+dfsg-2 -librpm8=4.14.1+dfsg1-4 -librpmio8=4.14.1+dfsg1-4 -librsvg2-2:amd64=2.40.20-3 -librsvg2-common:amd64=2.40.20-3 -librtmp1:amd64=2.4+20151223.gitfa8646d.1-2 -libsamplerate0:amd64=0.1.9-2 -libsane-common=1.0.27-1 -libsane1:amd64=1.0.27-1 -libsasl2-2:amd64=2.1.27~101-g0780600+dfsg-3ubuntu2 -libsasl2-modules:amd64=2.1.27~101-g0780600+dfsg-3ubuntu2 -libsasl2-modules-db:amd64=2.1.27~101-g0780600+dfsg-3ubuntu2 -libsaxonhe-java=9.8.0.14+dfsg-1 -libsdl1.2-dev=1.2.15+dfsg2-2 -libsdl1.2debian:amd64=1.2.15+dfsg2-2 -libseccomp2:amd64=2.4.1-0ubuntu0.18.10.3 -libsecret-1-0:amd64=0.18.6-3 -libsecret-common=0.18.6-3 -libselinux1:amd64=2.8-1build1 -libsemanage-common=2.8-1build1 -libsemanage1:amd64=2.8-1build1 -libsensors4:amd64=1:3.4.0-4 -libsepol1:amd64=2.8-1 -libshout3:amd64=2.4.1-2build1 -libsigsegv2:amd64=2.12-2 -libslang2:amd64=2.3.2-1ubuntu1 -libslang2-dev:amd64=2.3.2-1ubuntu1 -libsm-dev:amd64=2:1.2.2-1 -libsm6:amd64=2:1.2.2-1 -libsmali-java=2.2.6-1~18.04 -libsmartcols1:amd64=2.32-0.1ubuntu2 -libsndfile1:amd64=1.0.28-4ubuntu0.18.10.1 -libsnmp-base=5.7.3+dfsg-1.8ubuntu3.18.10.1 -libsnmp30:amd64=5.7.3+dfsg-1.8ubuntu3.18.10.1 -libsoup-gnome2.4-1:amd64=2.64.1-1 -libsoup2.4-1:amd64=2.64.1-1 -libspectre1:amd64=0.2.8-1 -libspeex1:amd64=1.2~rc1.2-1ubuntu2 -libspice-server1:amd64=0.14.0-1ubuntu4.2 -libsqlite3-0:amd64=3.24.0-1ubuntu0.1 -libss2:amd64=1.44.4-2ubuntu0.2 -libssl-dev:amd64=1.1.1-1ubuntu2.2 -libssl1.0.0:amd64=1.0.2n-1ubuntu6.2 -libssl1.1:amd64=1.1.1-1ubuntu2.2 -libstdc++-8-dev:amd64=8.3.0-6ubuntu1~18.10.1 -libstdc++6:amd64=8.3.0-6ubuntu1~18.10.1 -libstringtemplate-java=3.2.1-2 -libsuitesparseconfig5:amd64=1:5.3.0+dfsg-1 -libsynctex2:amd64=2018.20180824.48463-1ubuntu0.1 -libsystemd0:amd64=239-7ubuntu10.14 -libtag1v5:amd64=1.11.1+dfsg.1-0.2build2 -libtag1v5-vanilla:amd64=1.11.1+dfsg.1-0.2build2 -libtasn1-6:amd64=4.13-3 -libtcl8.6:amd64=8.6.8+dfsg-4 -libtext-iconv-perl=1.7-5build6 -libthai-data=0.1.28-1 -libthai0:amd64=0.1.28-1 -libtheora0:amd64=1.1.1+dfsg.1-14 -libtie-ixhash-perl=1.23-2 -libtiff5:amd64=4.0.9-6ubuntu0.2 -libtimedate-perl=2.3000-2 -libtinfo-dev:amd64=6.1+20180210-4ubuntu1 -libtinfo5:amd64=6.1+20180210-4ubuntu1 -libtinfo6:amd64=6.1+20180210-4ubuntu1 -libtk8.6:amd64=8.6.8-4 -libtry-tiny-perl=0.30-1 -libtsan0:amd64=8.3.0-6ubuntu1~18.10.1 -libtsk13=4.6.2-1 -libtwolame0:amd64=0.3.13-4 -libubsan1:amd64=8.3.0-6ubuntu1~18.10.1 -libudev1:amd64=239-7ubuntu10.14 -libunistring2:amd64=0.9.10-1ubuntu1.18.10.1 -liburi-perl=1.74-1 -libusb-1.0-0:amd64=2:1.0.22-2 -libusbredirparser1:amd64=0.7.1-1 -libuuid1:amd64=2.32-0.1ubuntu2 -libv4l-0:amd64=1.14.2-1 -libv4lconvert0:amd64=1.14.2-1 -libvirt0:amd64=4.6.0-2ubuntu3.8 -libvisual-0.4-0:amd64=0.4.0-11 -libvorbis0a:amd64=1.3.6-1 -libvorbisenc2:amd64=1.3.6-1 -libvpx5:amd64=1.7.0-3 -libvte-2.91-0:amd64=0.54.1-1ubuntu1 -libvte-2.91-common=0.54.1-1ubuntu1 -libwavpack1:amd64=5.1.0-4ubuntu0.2 -libwayland-client0:amd64=1.16.0-1ubuntu1.1 -libwayland-cursor0:amd64=1.16.0-1ubuntu1.1 -libwayland-egl1:amd64=1.16.0-1ubuntu1.1 -libwayland-server0:amd64=1.16.0-1ubuntu1.1 -libwebkit2gtk-4.0-37:amd64=2.24.2-0ubuntu0.18.10.1 -libwebp6:amd64=0.6.1-2 -libwebpdemux2:amd64=0.6.1-2 -libwebpmux3:amd64=0.6.1-2 -libwind0-heimdal:amd64=7.5.0+dfsg-2 -libwmf0.2-7:amd64=0.2.8.4-12 -libwoff1:amd64=1.0.2-1build1 -libwrap0:amd64=7.6.q-27 -libwww-perl=6.35-2 -libwww-robotrules-perl=6.02-1 -libwxbase3.0-0v5:amd64=3.0.4+dfsg-4 -libwxbase3.0-dev=3.0.4+dfsg-4 -libwxgtk3.0-0v5:amd64=3.0.4+dfsg-4 -libwxgtk3.0-dev=3.0.4+dfsg-4 -libx11-6:amd64=2:1.6.7-1 -libx11-data=2:1.6.7-1 -libx11-dev:amd64=2:1.6.7-1 -libx11-protocol-perl=0.56-7 -libx11-xcb-dev:amd64=2:1.6.7-1 -libx11-xcb1:amd64=2:1.6.7-1 -libx32asan5=8.3.0-6ubuntu1~18.10.1 -libx32atomic1=8.3.0-6ubuntu1~18.10.1 -libx32gcc-8-dev=8.3.0-6ubuntu1~18.10.1 -libx32gcc1=1:8.3.0-6ubuntu1~18.10.1 -libx32gomp1=8.3.0-6ubuntu1~18.10.1 -libx32itm1=8.3.0-6ubuntu1~18.10.1 -libx32quadmath0=8.3.0-6ubuntu1~18.10.1 -libx32stdc++-8-dev=8.3.0-6ubuntu1~18.10.1 -libx32stdc++6=8.3.0-6ubuntu1~18.10.1 -libx32ubsan1=8.3.0-6ubuntu1~18.10.1 -libxau-dev:amd64=1:1.0.8-1 -libxau6:amd64=1:1.0.8-1 -libxaw7:amd64=2:1.0.13-1 -libxcb-dri2-0:amd64=1.13.1-1 -libxcb-dri2-0-dev:amd64=1.13.1-1 -libxcb-dri3-0:amd64=1.13.1-1 -libxcb-dri3-dev:amd64=1.13.1-1 -libxcb-glx0:amd64=1.13.1-1 -libxcb-glx0-dev:amd64=1.13.1-1 -libxcb-present-dev:amd64=1.13.1-1 -libxcb-present0:amd64=1.13.1-1 -libxcb-randr0:amd64=1.13.1-1 -libxcb-randr0-dev:amd64=1.13.1-1 -libxcb-render0:amd64=1.13.1-1 -libxcb-render0-dev:amd64=1.13.1-1 -libxcb-shape0:amd64=1.13.1-1 -libxcb-shape0-dev:amd64=1.13.1-1 -libxcb-shm0:amd64=1.13.1-1 -libxcb-sync-dev:amd64=1.13.1-1 -libxcb-sync1:amd64=1.13.1-1 -libxcb-xfixes0:amd64=1.13.1-1 -libxcb-xfixes0-dev:amd64=1.13.1-1 -libxcb1:amd64=1.13.1-1 -libxcb1-dev:amd64=1.13.1-1 -libxcomposite1:amd64=1:0.4.4-2 -libxcursor1:amd64=1:1.1.15-1 -libxdamage-dev:amd64=1:1.1.4-3 -libxdamage1:amd64=1:1.1.4-3 -libxdmcp-dev:amd64=1:1.1.2-3 -libxdmcp6:amd64=1:1.1.2-3 -libxen-4.9:amd64=4.9.2-0ubuntu2 -libxenstore3.0:amd64=4.9.2-0ubuntu2 -libxerces2-java=2.11.0-9 -libxext-dev:amd64=2:1.3.3-1 -libxext6:amd64=2:1.3.3-1 -libxfixes-dev:amd64=1:5.0.3-1 -libxfixes3:amd64=1:5.0.3-1 -libxft2:amd64=2.3.2-2 -libxi6:amd64=2:1.7.9-1 -libxinerama1:amd64=2:1.1.4-1 -libxkbcommon0:amd64=0.8.2-1 -libxml-commons-external-java=1.4.01-3 -libxml-commons-resolver1.1-java=1.2-9 -libxml-parser-perl=2.44-2build3 -libxml-twig-perl=1:3.50-1 -libxml-xpathengine-perl=0.14-1 -libxml2:amd64=2.9.4+dfsg1-7ubuntu1 -libxml2-utils=2.9.4+dfsg1-7ubuntu1 -libxmlbeans-java=3.0.2-1~18.04 -libxmlunit-java=1.6-1 -libxmu6:amd64=2:1.1.2-2 -libxmuu1:amd64=2:1.1.2-2 -libxom-java=1.2.10-1 -libxpm4:amd64=1:3.5.12-1 -libxpp3-java=1.1.4c-3 -libxrandr2:amd64=2:1.5.1-1 -libxrender1:amd64=1:0.9.10-1 -libxshmfence-dev:amd64=1.3-1 -libxshmfence1:amd64=1.3-1 -libxslt1.1:amd64=1.1.32-2ubuntu0.1 -libxss1:amd64=1:1.2.3-1 -libxt-dev:amd64=1:1.1.5-1 -libxt6:amd64=1:1.1.5-1 -libxtables12:amd64=1.6.1-2ubuntu2 -libxtst6:amd64=2:1.2.3-1 -libxv1:amd64=2:1.0.11-1 -libxxf86dga1:amd64=2:1.1.4-1 -libxxf86vm-dev:amd64=1:1.1.4-1 -libxxf86vm1:amd64=1:1.1.4-1 -libyajl2:amd64=2.1.0-2build1 -libyaml-0-2:amd64=0.2.1-1 -libyaml-snake-java=1.23-1~18.04 -libyara3:amd64=3.8.1-1 -libyelp0:amd64=3.30.0-1build1 -libzip4:amd64=1.1.2-1.1 -libzstd1:amd64=1.3.5+dfsg-1ubuntu1 -linux-base=4.5ubuntu1 -linux-libc-dev:amd64=4.18.0-25.26 -llvm=1:7.0-43ubuntu1 -llvm-7=1:7-3 -llvm-7-dev=1:7-3 -llvm-7-runtime=1:7-3 -llvm-runtime=1:7.0-43ubuntu1 -login=1:4.5-1ubuntu1 -lp-solve=5.5.0.15-4build1 -lsb-base=9.20170808ubuntu1 -lsb-release=9.20170808ubuntu1 -lsscsi=0.28-0.1 -lvm2=2.02.176-4.1ubuntu3.18.10.1 -lz4=1.8.2-1ubuntu1 -lzop=1.03-4 -m4=1.4.18-1ubuntu1 -make=4.2.1-1.2 -man-db=2.8.4-2 -manpages=4.16-1 -manpages-dev=4.16-1 -mawk=1.3.3-17ubuntu3 -mdadm=4.1~rc1-4ubuntu1.1 -mesa-common-dev:amd64=18.2.8-0ubuntu0~18.10.2 -mime-support=3.60ubuntu1 -mono-4.0-gac=4.6.2.7+dfsg-1ubuntu1 -mono-gac=4.6.2.7+dfsg-1ubuntu1 -mono-runtime=4.6.2.7+dfsg-1ubuntu1 -mono-runtime-common=4.6.2.7+dfsg-1ubuntu1 -mono-runtime-sgen=4.6.2.7+dfsg-1ubuntu1 -mono-utils=4.6.2.7+dfsg-1ubuntu1 -mount=2.32-0.1ubuntu2 -msr-tools=1.3-2build1 -mtd-utils=1:2.0.1-1ubuntu3 -mtools=4.0.18-2.1 -multiarch-support=2.28-0ubuntu1 -mysql-common=5.8+1.0.4 -ncompress=4.2.4.4-21 -ncurses-base=6.1+20180210-4ubuntu1 -ncurses-bin=6.1+20180210-4ubuntu1 -netbase=5.4 -netpbm=2:10.0-15.3build1 -networkd-dispatcher=1.7-0ubuntu8 -ninja-build=1.8.2-1 -notification-daemon=3.20.0-3 -ntfs-3g=1:2017.3.23-2ubuntu0.18.10.2 -odt2txt=0.5-1build2 -oggvideotools=0.9.1-4ubuntu1 -openjdk-11-jre-headless:amd64=11.0.3+7-1ubuntu2~18.10.1 -openjdk-8-jdk:amd64=8u212-b03-0ubuntu1.18.10.1 -openjdk-8-jdk-headless:amd64=8u212-b03-0ubuntu1.18.10.1 -openjdk-8-jre:amd64=8u212-b03-0ubuntu1.18.10.1 -openjdk-8-jre-headless:amd64=8u212-b03-0ubuntu1.18.10.1 -openssh-client=1:7.7p1-4ubuntu0.3 -openssl=1.1.1-1ubuntu2.2 -osinfo-db=0.20180929-1ubuntu1 -p7zip=16.02+dfsg-6 -p7zip-full=16.02+dfsg-6 -parted=3.2-21ubuntu2 -passwd=1:4.5-1ubuntu1 -patch=2.7.6-3 -perl=5.26.2-7ubuntu0.1 -perl-base=5.26.2-7ubuntu0.1 -perl-modules-5.26=5.26.2-7ubuntu0.1 -perl-openssl-defaults:amd64=3build1 -pgpdump=0.31-0.2 -pinentry-curses=1.1.0-1build2 -pkg-config=0.29.1-0ubuntu2 -plymouth=0.9.3-1ubuntu10.1 -plymouth-theme-ubuntu-text=0.9.3-1ubuntu10.1 -pngcrush=1.7.85-1build1 -policykit-1=0.105-21ubuntu0.4 -poppler-data=0.4.9-2 -poppler-utils=0.68.0-0ubuntu1.7 -procps=2:3.3.15-2ubuntu1 -procyon-decompiler=0.5.32-5~18.04 -psmisc=23.1-1ubuntu1.1 -publicsuffix=20180523.2326-2 -pxlib1=0.6.7-1 -python=2.7.15-3 -python-apt-common=1.7.1 -python-kerberos=1.1.14-1build1 -python-matplotlib-data=2.2.2-4build1 -python-minimal=2.7.15-3 -python-protobuf=3.0.0-9.1ubuntu3 -python-six=1.11.0-2 -python2=2.7.15-3 -python2-minimal=2.7.15-3 -python2.7=2.7.16-2~18.10 -python2.7-minimal=2.7.16-2~18.10 -python3=3.6.7-1~18.10 -python3-apt=1.7.1 -python3-argcomplete=1.8.1-1ubuntu1 -python3-binwalk=2.1.2~git20180830+dfsg1-1 -python3-chardet=3.0.4-1 -python3-cycler=0.10.0-1 -python3-dateutil=2.6.1-1 -python3-dbus=1.2.8-2build1 -python3-debian=0.1.33 -python3-decorator=4.3.0-1 -python3-defusedxml=0.5.0-1ubuntu1 -python3-distro=1.3.0-1 -python3-distutils=3.6.8-1~18.10 -python3-editorconfig=0.12.1-1 -python3-gi=3.30.1-1ubuntu1 -python3-git=2.1.11-1 -python3-gitdb=2.0.4-1 -python3-guestfs=1:1.38.4-1ubuntu2.1 -python3-jsbeautifier=1.6.4-7 -python3-jsondiff=1.1.1-2 -python3-kiwisolver=1.0.1-2build1 -python3-lib2to3=3.6.8-1~18.10 -python3-libarchive-c=2.1-3.1 -python3-magic=2:0.4.15-2 -python3-matplotlib=2.2.2-4build1 -python3-minimal=3.6.7-1~18.10 -python3-numpy=1:1.14.5-1ubuntu4 -python3-olefile=0.46-1 -python3-opengl=3.1.0+dfsg-2 -python3-pil:amd64=5.2.0-2 -python3-pkg-resources=40.2.0-1 -python3-progressbar=2.3-4 -python3-progressbar=2.3-4 -python3-protobuf=3.0.0-9.1ubuntu3 -python3-pyparsing=2.2.0+dfsg1-2 -python3-pyqt4=4.12.1+dfsg-2build1 -python3-pyqtgraph=0.10.0-1 -python3-pyxattr=0.6.0-2build3 -python3-scipy=1.1.0-1ubuntu1 -python3-sip=4.19.12+dfsg-1 -python3-six=1.11.0-2 -python3-smmap=2.0.4-1 -python3-tk:amd64=3.6.8-1~18.10 -python3-tlsh=3.4.4+20151206-1build4 -python3-tz=2018.5-1 -python3-yaml=3.12-1build3 -python3.6=3.6.8-1~18.10 -python3.6-minimal=3.6.8-1~18.10 -qdbus=4:4.8.7+dfsg-7ubuntu1 -qemu-block-extra:amd64=1:2.12+dfsg-3ubuntu8.9 -qemu-system-common=1:2.12+dfsg-3ubuntu8.9 -qemu-system-data=1:2.12+dfsg-3ubuntu8.9 -qemu-system-gui=1:2.12+dfsg-3ubuntu8.9 -qemu-system-x86=1:2.12+dfsg-3ubuntu8.9 -qemu-utils=1:2.12+dfsg-3ubuntu8.9 -qt-at-spi:amd64=0.4.0-8 -qtchooser=64-ga1b6736-5 -qtcore4-l10n=4:4.8.7+dfsg-7ubuntu1 -r-base-core=3.5.1-1build1 -r-base-dev=3.5.1-1build1 -r-cran-boot=1.3-20-2 -r-cran-class=7.3-14-2build2 -r-cran-cluster=2.0.7-1-1build1 -r-cran-codetools=0.2-15-2 -r-cran-foreign=0.8.71-1 -r-cran-kernsmooth=2.23-15-3build2 -r-cran-lattice=0.20-35-1build2 -r-cran-mass=7.3-50-1build1 -r-cran-matrix=1.2-14-1build1 -r-cran-mgcv=1.8-24-1 -r-cran-nlme=3.1.137-1build1 -r-cran-nnet=7.3-12-2build2 -r-cran-rpart=4.1-13-1build1 -r-cran-spatial=7.3-11-2build2 -r-cran-survival=2.42-6-1 -r-doc-html=3.5.1-1build1 -r-recommended=3.5.1-1build1 -readline-common=7.0-5 -reiserfsprogs=1:3.6.27-2ubuntu1 -repo=1.12.37-3ubuntu1 -rpm-common=4.14.1+dfsg1-4 -rpm2cpio=4.14.1+dfsg1-4 -rsync=3.1.2-2.2 -sane-utils=1.0.27-1 -schedtool=1.3.0-3 -scrub=2.6.1-1build1 -seabios=1.11.1-1ubuntu1 -sed=4.5-1 -sensible-utils=0.0.12 -sgabios=0.0~svn8-4 -shared-mime-info=1.10-1 -sharutils=1:4.15.2-3 -sleuthkit=4.6.2-1 -sng=1.1.0-1build1 -sqlite3=3.24.0-1ubuntu0.1 -squashfs-tools=1:4.3-6ubuntu2 -sudo=1.8.23-2ubuntu1 -supermin=5.1.19-3ubuntu1 -syslinux=3:6.04~git20171011.af7e95c3+dfsg1-4ubuntu1.18.10.2 -syslinux-common=3:6.04~git20171011.af7e95c3+dfsg1-4ubuntu1.18.10.2 -systemd=239-7ubuntu10.14 -systemd-sysv=239-7ubuntu10.14 -sysvinit-utils=2.88dsf-59.10ubuntu2 -tar=1.30+dfsg-2 -tcpdump=4.9.2-3 -tk8.6-blt2.5=2.5.3+dfsg-4 -toilet=0.3-1.2 -toilet-fonts=0.3-1.2 -ttf-bitstream-vera=1.10-8 -tzdata=2019b-0ubuntu0.18.10 -ubuntu-keyring=2018.09.18.1 -ubuntu-mono=16.10+18.10.20181005-0ubuntu1 -ucf=3.0038 -udev=239-7ubuntu10.14 -unzip=6.0-21ubuntu1 -update-inetd=4.47 -util-linux=2.32-0.1ubuntu2 -vim=2:8.0.1766-1ubuntu1.1 -vim-common=2:8.0.1766-1ubuntu1.1 -vim-runtime=2:8.0.1766-1ubuntu1.1 -wget=1.19.5-1ubuntu1.1 -wx-common=3.0.4+dfsg-4 -wx3.0-headers=3.0.4+dfsg-4 -x11-common=1:7.7+19ubuntu8 -x11-utils=7.7+4 -x11-xserver-utils=7.7+8 -x11proto-core-dev=2018.4-4 -x11proto-damage-dev=1:2018.4-4 -x11proto-dev=2018.4-4 -x11proto-fixes-dev=1:2018.4-4 -x11proto-xext-dev=2018.4-4 -x11proto-xf86vidmode-dev=2018.4-4 -xauth=1:1.0.10-1 -xdg-user-dirs=0.17-1ubuntu1 -xdg-utils=1.1.3-1ubuntu2 -xfsprogs=4.15.1-1ubuntu1 -xkb-data=2.23.1-1ubuntu1.18.10.1 -xmlbeans=3.0.2-1~18.04 -xorg-sgml-doctools=1:1.11-1 -xsltproc=1.1.32-2ubuntu0.1 -xtrans-dev=1.3.5-1 -xxd=2:8.0.1766-1ubuntu1.1 -xz-utils=5.2.2-1.3 -yasm=1.3.0-2build1 -yelp=3.30.0-1build1 -yelp-xsl=3.30.1-1 -zerofree=1.1.1-1 -zip=3.0-11build1 -zlib1g:amd64=1:1.2.11.dfsg-0ubuntu2 -zlib1g-dev:amd64=1:1.2.11.dfsg-0ubuntu2 +# https://source.android.com/setup/build/initializing#installing-required-packages-ubuntu-1804 +git +gnupg +flex +bison +build-essential +zip +curl +zlib1g-dev +gcc-multilib +g++-multilib +libc6-dev-i386 +lib32ncurses5-dev +x11proto-core-dev +libx11-dev +lib32z1-dev +libgl1-mesa-dev +libxml2-utils +xsltproc +unzip +fontconfig + +# https://source.android.com/setup/build/requirements#hardware-requirements +python + +# https://source.android.com/setup/develop +repo/buster-backports + +# Needed for aosp-build. +locales +procps +bc +dos2unix +sudo +wget +rsync +libfaketime +python3 +python3-git +python3-gnupg +python3-yaml +python3-defusedxml + +# Additional deps for kernel build, otherwise fails with /home/build/build/external/kernel/crosshatch/private/msm-google/scripts/sign-file.c:25:10: fatal error: 'openssl/opensslv.h' file not found +libssl-dev + +# https://grapheneos.org/build#building-grapheneos +# Additional Android Open Source Project build dependencies not provided by the source tree: +diffutils +libncurses5 +openssl + +# https://grapheneos.org/build#building-grapheneos +# Additional android-prepare-vendor (for Pixel phones) dependencies: +openjdk-11-jdk-headless +python +python-protobuf +python3-protobuf + +# Building helpers +htop +schedtool + +# Additional tools to replace Android prebuilds will be added as needed. +# ant: CLDR/ICU. +ant +# ninja-build +# squashfs-tools + +# Development +vim +ncat +bsdmainutils +diffoscope/buster-backports diff --git a/config/container/render_template b/config/container/render_template index ce6f75e..5841899 100755 --- a/config/container/render_template +++ b/config/container/render_template @@ -1,17 +1,23 @@ #!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# +# SPDX-FileCopyrightText: 2019-2020 Robin Schneider +# SPDX-License-Identifier: MIT -import os, argparse +import os +import argparse +import json import jinja2 args_parser = argparse.ArgumentParser() -args_parser.add_argument('template_files', nargs='+', help='Jinja2 template files to render.') -args = args_parser.parse_args() +args_parser.add_argument('template_file', help='Jinja2 template file to render.') +args_parser.add_argument('render_vars', help='JSON-encoded data to pass to the templating engine.') +cli_args = args_parser.parse_args() -render_vars = { - 'tags': [] -} - -environment = jinja2.Environment(loader=jinja2.FileSystemLoader(os.getcwd())) -for template_file in args.template_files: - print(environment.get_template(template_file).render(render_vars)) +render_vars = json.loads(cli_args.render_vars) +environment = jinja2.Environment( + loader=jinja2.FileSystemLoader(os.getcwd()), + trim_blocks=True, +) +print(environment.get_template(cli_args.template_file).render(render_vars)) diff --git a/config/container/sources.list b/config/container/sources.list index d5dffaa..7dfdce3 100644 --- a/config/container/sources.list +++ b/config/container/sources.list @@ -1,10 +1,4 @@ -deb http://old-releases.ubuntu.com/ubuntu/ cosmic main restricted -deb http://old-releases.ubuntu.com/ubuntu/ cosmic-updates main restricted -deb http://old-releases.ubuntu.com/ubuntu/ cosmic universe -deb http://old-releases.ubuntu.com/ubuntu/ cosmic-updates universe -deb http://old-releases.ubuntu.com/ubuntu/ cosmic multiverse -deb http://old-releases.ubuntu.com/ubuntu/ cosmic-updates multiverse -deb http://old-releases.ubuntu.com/ubuntu/ cosmic-backports main restricted universe multiverse -deb http://old-releases.ubuntu.com/ubuntu/ cosmic-security main restricted -deb http://old-releases.ubuntu.com/ubuntu/ cosmic-security universe -deb http://old-releases.ubuntu.com/ubuntu/ cosmic-security multiverse +deb http://snapshot.debian.org/archive/debian/20210206T101028Z buster main contrib +deb http://snapshot.debian.org/archive/debian-security/20210206T101028Z buster/updates main contrib +deb http://snapshot.debian.org/archive/debian/20210206T101028Z buster-updates main contrib +deb http://snapshot.debian.org/archive/debian/20210206T101028Z buster-backports main contrib diff --git a/config/manifests/blueline/base.xml b/config/manifests/blueline/base.xml index 5cdc9b5..61ce892 100644 --- a/config/manifests/blueline/base.xml +++ b/config/manifests/blueline/base.xml @@ -1,10 +1,15 @@ - - + + - + + + + + + @@ -13,752 +18,785 @@ - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config/manifests/blueline/kernel.xml b/config/manifests/blueline/kernel.xml index b02a8ee..c0d15b2 100644 --- a/config/manifests/blueline/kernel.xml +++ b/config/manifests/blueline/kernel.xml @@ -2,7 +2,7 @@ - + diff --git a/config/manifests/bonito/base.xml b/config/manifests/bonito/base.xml index 5339cb6..61ce892 100644 --- a/config/manifests/bonito/base.xml +++ b/config/manifests/bonito/base.xml @@ -1,10 +1,15 @@ - - + + - + + + + + + @@ -13,752 +18,785 @@ - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config/manifests/bonito/kernel.xml b/config/manifests/bonito/kernel.xml index b02a8ee..c0d15b2 100644 --- a/config/manifests/bonito/kernel.xml +++ b/config/manifests/bonito/kernel.xml @@ -2,7 +2,7 @@ - + diff --git a/config/manifests/crosshatch/base.xml b/config/manifests/crosshatch/base.xml index 5cdc9b5..61ce892 100644 --- a/config/manifests/crosshatch/base.xml +++ b/config/manifests/crosshatch/base.xml @@ -1,10 +1,15 @@ - - + + - + + + + + + @@ -13,752 +18,785 @@ - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config/manifests/crosshatch/kernel.xml b/config/manifests/crosshatch/kernel.xml index b02a8ee..c0d15b2 100644 --- a/config/manifests/crosshatch/kernel.xml +++ b/config/manifests/crosshatch/kernel.xml @@ -2,7 +2,7 @@ - + diff --git a/config/manifests/sargo/base.xml b/config/manifests/sargo/base.xml index 5339cb6..61ce892 100644 --- a/config/manifests/sargo/base.xml +++ b/config/manifests/sargo/base.xml @@ -1,10 +1,15 @@ - - + + - + + + + + + @@ -13,752 +18,785 @@ - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config/manifests/sargo/kernel.xml b/config/manifests/sargo/kernel.xml index b02a8ee..eb48f20 100644 --- a/config/manifests/sargo/kernel.xml +++ b/config/manifests/sargo/kernel.xml @@ -1,17 +1,17 @@ - + - - - + + + - - - - - - - - + + + + + + + + \ No newline at end of file diff --git a/config/manifests/taimen/base.xml b/config/manifests/taimen/base.xml index 5339cb6..0b6982a 100644 --- a/config/manifests/taimen/base.xml +++ b/config/manifests/taimen/base.xml @@ -1,10 +1,10 @@ - - + + - + @@ -13,752 +13,780 @@ - + - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config/manifests/taimen/kernel.xml b/config/manifests/taimen/kernel.xml index b4bada6..dc2fb61 100644 --- a/config/manifests/taimen/kernel.xml +++ b/config/manifests/taimen/kernel.xml @@ -2,7 +2,7 @@ - + diff --git a/config/manifests/walleye/base.xml b/config/manifests/walleye/base.xml index 5339cb6..0b6982a 100644 --- a/config/manifests/walleye/base.xml +++ b/config/manifests/walleye/base.xml @@ -1,10 +1,10 @@ - - + + - + @@ -13,752 +13,780 @@ - + - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config/manifests/walleye/kernel.xml b/config/manifests/walleye/kernel.xml index b4bada6..dc2fb61 100644 --- a/config/manifests/walleye/kernel.xml +++ b/config/manifests/walleye/kernel.xml @@ -2,7 +2,7 @@ - + diff --git a/config/openpgp_keys/aosp.asc b/config/openpgp_keys/aosp.asc new file mode 100644 index 0000000..f7260a4 --- /dev/null +++ b/config/openpgp_keys/aosp.asc @@ -0,0 +1,30 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.2.2 (GNU/Linux) + +mQGiBEnnWD4RBACt9/h4v9xnnGDou13y3dvOx6/t43LPPIxeJ8eX9WB+8LLuROSV +lFhpHawsVAcFlmi7f7jdSRF+OvtZL9ShPKdLfwBJMNkU66/TZmPewS4m782ndtw7 +8tR1cXb197Ob8kOfQB3A9yk2XZ4ei4ZC3i6wVdqHLRxABdncwu5hOF9KXwCgkxMD +u4PVgChaAJzTYJ1EG+UYBIUEAJmfearb0qRAN7dEoff0FeXsEaUA6U90sEoVks0Z +wNj96SA8BL+a1OoEUUfpMhiHyLuQSftxisJxTh+2QclzDviDyaTrkANjdYY7p2cq +/HMdOY7LJlHaqtXmZxXjjtw5Uc2QG8UY8aziU3IE9nTjSwCXeJnuyvoizl9/I1S5 +jU5SA/9WwIps4SC84ielIXiGWEqq6i6/sk4I9q1YemZF2XVVKnmI1F4iCMtNKsR4 +MGSa1gA8s4iQbsKNWPgp7M3a51JCVCu6l/8zTpA+uUGapw4tWCp4o0dpIvDPBEa9 +b/aF/ygcR8mh5hgUfpF9IpXdknOsbKCvM9lSSfRciETykZc4wrRCVGhlIEFuZHJv +aWQgT3BlbiBTb3VyY2UgUHJvamVjdCA8aW5pdGlhbC1jb250cmlidXRpb25AYW5k +cm9pZC5jb20+iGAEExECACAFAknnWD4CGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIX +gAAKCRDorT+BmrEOeNr+AJ42Xy6tEW7r3KzrJxnRX8mij9z8tgCdFfQYiHpYngkI +2t09Ed+9Bm4gmEO5Ag0ESedYRBAIAKVW1JcMBWvV/0Bo9WiByJ9WJ5swMN36/vAl +QN4mWRhfzDOk/Rosdb0csAO/l8Kz0gKQPOfObtyYjvI8JMC3rmi+LIvSUT9806Up +hisyEmmHv6U8gUb/xHLIanXGxwhYzjgeuAXVCsv+EvoPIHbY4L/KvP5x+oCJIDbk +C2b1TvVk9PryzmE4BPIQL/NtgR1oLWm/uWR9zRUFtBnE411aMAN3qnAHBBMZzKMX +LWBGWE0znfRrnczI5p49i2YZJAjyX1P2WzmScK49CV82dzLo71MnrF6fj+Udtb5+ +OgTg7Cow+8PRaTkJEW5Y2JIZpnRUq0CYxAmHYX79EMKHDSThf/8AAwUIAJPWsB/M +pK+KMs/s3r6nJrnYLTfdZhtmQXimpoDMJg1zxmL8UfNUKiQZ6esoAWtDgpqt7Y7s +KZ8laHRARonte394hidZzM5nb6hQvpPjt2OlPRsyqVxw4c/KsjADtAuKW9/d8phb +N8bTyOJo856qg4oOEzKG9eeF7oaZTYBy33BTL0408sEBxiMior6b8LrZrAhkqDjA +vUXRwm/fFKgpsOysxC6xi553CxBUCH2omNV6Ka1LNMwzSp9ILz8jEGqmUtkBszwo +G1S8fXgE0Lq3cdDM/GJ4QXP/p6LiwNF99faDMTV3+2SAOGvytOX6KjKVzKOSsfJQ +hN0DlsIw8hqJc0WISQQYEQIACQUCSedYRAIbDAAKCRDorT+BmrEOeCUOAJ9qmR0l +EXzeoxcdoafxqf6gZlJZlACgkWF7wi2YLW3Oa+jv2QSTlrx4KLM= +=Wi5D +-----END PGP PUBLIC KEY BLOCK----- diff --git a/config/openpgp_keys/daniel.micay.asc b/config/openpgp_keys/daniel.micay.asc new file mode 100644 index 0000000..c2b3c0b --- /dev/null +++ b/config/openpgp_keys/daniel.micay.asc @@ -0,0 +1,218 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +7km9zz7ZMF58awYWZo2f3B1i+ubfxObgpWH/2NqUWsosEEJT1Xuv95hH5qgX6Qkn +waf7S+C/Rc0siXwMsLXhHe1Isp7yGbJaLBymmObeXKtrm1MgMpkh/wU0drM48Skw +prpX37iP93BEq49cpDC6SYrX9WlencKBINfE5Ef83857K1HHaaWkMNZ4j1J2ymgw +kQB79UvB6ZEMIOU4KexSZ9xEtHaMzTbnlVg3okZbb+BFvhteW4jXwzurAkZW/Z+i +xXnBEZPbsXW0KURhbmllbCBNaWNheSA8ZGFuaWVsLm1pY2F5QGNvcHBlcmhlYWQu +Y28+iQI3BBMBCAAhBQJWAIPxAhsDBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJ +EPnnEuWa9fIqEf4P/3pxM3kMb86zDcML0FjqM64W1cokHX/8CNCp4OEa0q7PtOSR +jO/rXo0/2DTFiJBpb3TfkkivxN5yGPnonH/2TlS+TX3DxvNqCPf/pGVAen3dxxAk +jYox0E2v2ibm++zhuNUaq1Hi+H4E4kwO2N057WKrnE8KqYU7lWEVEuYnwj7NfqJc +rlPgV9zM0Th1lwcFXyxCF10NRyQSd6dn1ddXw7jVL418oyl2vx9VKmg+16VespDR +184Gxnnd90fwmcxcNADUOyP7vrKLPlE9YwzZvJBUe5mgVHsJnlljXEBHPou4b9fZ +/0xaTJv/OXvPGZIe+OQ/3oRjmjhDH0gMPusHi2nh0gwBt89mGgwyrINgygGgvdJd +eQf4kYLCyaYOc/BinxyLeQ/e82mq1cZDVYS7la08ihqeM6KaMlm6nrX0UGovREOW +OgfPI0vjji8I0aeZDm3JbGrSl+X1TbKy0tZACLoTF2fR31NWDhU/fIyPa4zbQVZ6 +MhrqPjTaw5Pug0+Rb1vQZlEjwjLrmGM9CJbdJ5NOVIXojmcHDi9JE+7p5Vu6eiaY +EOY/OiPWB8i5tLRaLLrAVy0cQ0YOa1+WOU1htGMSZyFLL+4Zfewb4sh3DJXYsETA +fQmbuBA6yeDGmTopVrnGGdKR9akSWu4xkAStZAxMA//FohiEo306liChwTI0iQKK +BDABCAB0FiEEZe7+AiEI4rcIy/z3+ecS5Zr18ioFAlttMnJWHSBJIG5vIGxvbmdl +ciBjb250cm9sIGRhbmllbC5taWNheUBjb3BwZXJoZWFkLmNvIHNpbmNlIEkgd2Fz +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 +exzNNqK6CZk3jgzEs/VCQCp0IBKc +=FUN5 +-----END PGP PUBLIC KEY BLOCK----- diff --git a/scripts/build b/scripts/build index 969b74d..d4e36a2 100755 --- a/scripts/build +++ b/scripts/build @@ -8,20 +8,18 @@ build_type="${BUILD_TYPE?}" build_id="${BUILD_ID?}" build_variant="${BUILD_VARIANT?}" external_dir="${EXTERNAL_DIR?}" -overlay_dir="${OVERLAY_DIR?}" patch_dir="${PATCH_DIR?}" build_id="${BUILD_ID?}" platform_patches="${PLATFORM_PATCHES?}" -key_dir="${KEY_DIR?}" -cores=$(nproc) -build_kernel="${BUILD_KERNEL?}" +public_key_dir="${PUBLIC_KEY_DIR?}" function apply_patches(){ cd "${base_dir}" local fdroid_org="packages/apps/F-DroidPrivilegedExtension/app/src/main/java/org" local fdroid_whitelist="${fdroid_org}/fdroid/fdroid/privileged/ClientWhitelist.java" + test -r "${public_key_dir}/platform.x509.pem" || { echo "${public_key_dir}/platform.x509.pem not readable" 1>&2; exit 1; } local platform_key_hash; platform_key_hash=$( \ - openssl x509 -in "${key_dir}/platform.x509.pem" -outform DER \ + openssl x509 -in "${public_key_dir}/platform.x509.pem" -outform DER \ | sha256sum | cut -c1-64; \ ) echo "Platform Key Hash: ${platform_key_hash}" @@ -35,33 +33,30 @@ function apply_patches(){ echo "Applying patch: $patch_dir/${patch}" patch -p1 --no-backup-if-mismatch < "${patch_dir}/${patch}" done - echo "export BUILD_ID=${build_id}" > "${base_dir}/build/core/build_id.mk" cd - } function build_external(){ - local vendor_dist="${external_dir}/vendor/out/${device}/${build_id,,}/vendor/" + local vendor_dist="${external_dir}/vendor/out/${device}/${build_id,,}/vendor" local vendor_dest="${base_dir}/vendor/" [ -d "${vendor_dist}" ] || build-vendor - sudo rm -rf "${vendor_dest}" - cp -R "${vendor_dist}." "${vendor_dest}" - - if [ "$build_kernel" == "true" ]; then - local kernel_dir="${external_dir}/kernel/${device}" - local kernel_dist="${kernel_dir}/dist/" - local kernel_dest="${base_dir}/device/google/${device}-kernel/" - mkdir -p "${kernel_dest}" - [ -d "$kernel_dist" ] || build-kernel - cp -R "${kernel_dist}." "${kernel_dest}" - fi + cp -R "${vendor_dist}/." "${vendor_dest}" + build-kernel } function build_platform(){ cd "$base_dir" + unset BUILD_ID choosecombo "${build_type}" "aosp_${device}" "${build_variant}" - (cd "$base_dir/external/icu/tools" && ./updateicudata.py) - (cd "$base_dir/external/icu/tools/srcgen" && ./generate_android_icu4j.sh) - (set -o xtrace; make -j "${cores}" target-files-package brillo_update_payload) + # Not reliable on Android 11?: + # (cd "$base_dir/external/icu/tools" && ./updatecldrdata.py && ./updateicudata.py) + # (cd "$base_dir/external/icu/tools/srcgen" && ./generate_android_icu4j.sh) + clear + if [ "$build_variant" == "user" ]; then + (set -o xtrace; m target-files-package brillo_update_payload otatools-package) + else + (set -o xtrace; m) + fi cd - } diff --git a/scripts/build-kernel b/scripts/build-kernel index f411b8c..338ac01 100755 --- a/scripts/build-kernel +++ b/scripts/build-kernel @@ -3,21 +3,35 @@ [ -f /.dockerenv ] || { echo "please run in supplied container"; exit 1; } set -e; eval "$(environment)" +base_dir="${BASE_DIR?}" external_dir="${EXTERNAL_DIR?}" device="${DEVICE?}" kernel_dir="${external_dir}/kernel/${device}" cores=$(nproc) +build_kernel="${BUILD_KERNEL?}" -# This seems like it -should- work but the AOSP kernel build system -# seems to ignore it and generate new keys anyway -# It is better for determinism and security to disable loadable module support -# anyway, which some patchsets choose to do. -#ln -vs \ -# "${key_dir}/kernel.pem" \ -# "${kernel_dir}/private/msm-google/certs/signing_key.pem" -cd "${kernel_dir}" -cat <<-EOF | bash - export OUT_DIR="${kernel_dir}/out" - export DIST_DIR="${kernel_dir}/dist" - bash "${kernel_dir}/build/build.sh" -j "${cores}" -EOF +if [ "$build_kernel" == "true" ]; then + kernel_dir="${external_dir}/kernel/${device}" + kernel_dist="${kernel_dir}/dist/" + kernel_dest="${base_dir}/device/google/${device}-kernel/" + mkdir -p "${kernel_dest}" + if [ -d "$kernel_dist" ]; then + exit 0 + fi + + # This seems like it -should- work but the AOSP kernel build system + # seems to ignore it and generate new keys anyway + # It is better for determinism and security to disable loadable module support + # anyway, which some patchsets choose to do. + #ln -vs \ + # "${key_dir}/kernel.pem" \ + # "${kernel_dir}/private/msm-google/certs/signing_key.pem" + cd "${kernel_dir}" + cat <<-EOF | bash + export OUT_DIR="${kernel_dir}/out" + export DIST_DIR="${kernel_dir}/dist" + bash "${kernel_dir}/build/build.sh" -j "${cores}" + EOF + + cp -R "${kernel_dist}." "${kernel_dest}" +fi diff --git a/scripts/build-vendor b/scripts/build-vendor index 4db8494..ef06d3f 100755 --- a/scripts/build-vendor +++ b/scripts/build-vendor @@ -22,7 +22,7 @@ ota_file="${device}-ota-${build_id}-${ota_crc}.zip" mkdir -p "${download_dir}" "${factory_dir}" "${vendor_out}" -# Fetch/extract proprietary blobs +# Fetch/extract proprietary blobs. if [ ! -f "${factory_dir}/${factory_file}" ]; then wget "${factory_url}/${ota_file}" -O "${download_dir}/${ota_file}" @@ -46,5 +46,5 @@ fi --buildID "${build_id}" \ --output "${vendor_out}" \ --timestamp "${build_datetime}" \ - --imgs "${factory_dir}/${factory_file}" \ - --ota "${factory_dir}/${ota_file}" + --imgs "${factory_dir}/${factory_file}" \ + --ota "${factory_dir}/${ota_file}" diff --git a/scripts/clean b/scripts/clean index 74f1fcd..a6f424c 100755 --- a/scripts/clean +++ b/scripts/clean @@ -2,13 +2,14 @@ [ -f /.dockerenv ] || { echo "please run in supplied container"; exit 1; } set -e; eval "$(environment)" +cores=$(nproc) external_dir="${EXTERNAL_DIR?}" base_dir="${BASE_DIR?}" [ -d "$base_dir" ] && { cd "$base_dir" [ -f ".repo/manifests/.git/HEAD" ] && { - repo forall -c 'git reset --hard ; git clean --force -dx'; + repo --no-pager forall --abort-on-errors -p --verbose --jobs "${cores}" -c 'git reset --hard ; git clean --force -dx'; } [ -f "Makefile" ] && make clean [ -d "${external_dir}/kernel" ] && { @@ -18,7 +19,7 @@ base_dir="${BASE_DIR?}" [ -f "$dir/.repo/manifests/.git/HEAD" ] && { cat <<-EOF | bash cd "$dir" || exit; - repo forall -c 'git reset --hard ; git clean --force -dx'; + repo --no-pager forall --abort-on-errors -p --verbose --jobs "${cores}" -c 'git reset --hard ; git clean --force -dx'; rm -rf dist EOF } diff --git a/scripts/config b/scripts/config index 03201ca..097cf10 100755 --- a/scripts/config +++ b/scripts/config @@ -4,6 +4,7 @@ import re import os.path import base64 import time +import logging import urllib.request @@ -15,6 +16,7 @@ import yaml from yaml.resolver import BaseResolver from git import cmd + class AndroidImagesParser(HTMLParser): def __init__(self, config): @@ -75,6 +77,12 @@ yaml.add_constructor(BaseResolver.DEFAULT_MAPPING_TAG, dict_constructor) if __name__ == "__main__": + logging.basicConfig( + format='{levelname}: {message}', + style='{', + level=logging.DEBUG, + ) + config_file=getenv('CONFIG_FILE') with open(config_file, encoding='utf-8') as data_file: config = yaml.load(data_file.read()) @@ -91,6 +99,7 @@ if __name__ == "__main__": if tag_filter in tag: all_tags.append(tag.replace("refs/tags/", "")) latest_tags = all_tags[-9:] + logging.debug("Latest tags: {}".format(latest_tags)) build_id_tags = {} build_id_git_url = "https://android.googlesource.com/platform/build/+/refs/tags/{}/core/build_id.mk?format=TEXT" @@ -103,7 +112,9 @@ if __name__ == "__main__": if build_id_filter in line: build_id = re.search(build_id_regex, line)[0] build_id_tags[build_id] = tag + logging.debug("BUILD_ID to tag mapping: {}".format(build_id_tags)) + logging.debug("Parsing Pixel images and ota HTML to find their BUILD_IDs.") parser = AndroidImagesParser(config) parser.images = {} image_url = "https://developers.google.com/android/images" @@ -111,6 +122,7 @@ if __name__ == "__main__": parser.feed(str(urllib.request.urlopen(urllib.request.Request(image_url, headers=accept_tos_header)).read())) parser.feed(str(urllib.request.urlopen(urllib.request.Request(ota_url, headers=accept_tos_header)).read())) + logging.debug("Map devices to their git tag.") for device in config['devices']: for values in parser.images[device].items(): config['devices'].setdefault(device,{})[values[0]] = values[1] @@ -119,9 +131,14 @@ if __name__ == "__main__": if factory_build in build_id_tags: config['devices'].setdefault(device, {})['platform_ref'] = build_id_tags[factory_build] else: - print("Unable to find latest build tag for factory build {} for device {}".format(factory_build, device)) + logging.warning("Unable to find latest build tag for factory build {} for device {}.".format(factory_build, device)) config['datetime'] = int(time.time()) + if 'remove_paths' in config['platform']: + config['platform']['remove_paths'] = sorted(config['platform']['remove_paths']) + if 'remove_groups' in config['platform']: + config['platform']['remove_groups'] = sorted(config['platform']['remove_groups']) + with open(config_file, 'w') as outfile: yaml.dump(config, outfile, default_flow_style=False) diff --git a/scripts/environment b/scripts/environment index ed46ab6..5e372b6 100755 --- a/scripts/environment +++ b/scripts/environment @@ -49,16 +49,13 @@ environment = { "KCONFIG_NOTIMESTAMP": 1, "RANDFILE": "{}/build/randfile.bin".format(cwd), "LC_ALL":"C", - "PS4": '+ $(date --rfc-3339=seconds) ', + # "PS4": '+ $(/bin/date --rfc-3339=seconds) ', } environment['BUILD_KERNEL'] = "true" if config.get('build_kernel') == False: environment['BUILD_KERNEL'] = "false" -if 'OTA_CHANNEL' in environ and len(environ['OTA_CHANNEL']) > 0: - environment['OTA_CHANNEL']=environ['OTA_CHANNEL'] - if 'DEVICE' in environ and len(environ['DEVICE']) > 0: device=environment['DEVICE']=environ['DEVICE'] variant=environment['BUILD_VARIANT'] @@ -67,12 +64,16 @@ if 'DEVICE' in environ and len(environ['DEVICE']) > 0: for key, value in device_config.items(): environment[key.upper()]=value.lower() if variant == "user" or variant == "userdebug": - key_dir = "{}/config/keys/{}".format(cwd, device) + key_dir = "{}/keys/{}".format(cwd, device) + environment["PUBLIC_KEY_DIR"] = '{}/config/public_keys/{}'.format(cwd, device) else: key_dir = "{}/build/target/product/security/".format(base_dir) + environment["PUBLIC_KEY_DIR"] = key_dir environment["KEY_DIR"] = key_dir environment["RELEASE_DIR"] = "{}/release/".format(cwd) - environment['BUILD_ID'] = device_config['build_id'] +else: + # Otherwise DEVICE will be '' as set by the Makefile with --env. + print("unset DEVICE") environment['ARCH'] = "arm64" environment['LANG'] = "C" @@ -84,7 +85,7 @@ environment['CROSS_COMPILE_ARM32'] = \ paths = [ '.repo/repo', - 'prebuilts/jdk/jdk8/linux-x86/bin', + 'prebuilts/jdk/jdk11/linux-x86/bin', 'build/tools/releasetools', 'development/tools', 'external/avb', diff --git a/scripts/fetch b/scripts/fetch index e7036f4..bddd0e5 100755 --- a/scripts/fetch +++ b/scripts/fetch @@ -1,29 +1,24 @@ #!/bin/bash [ -f /.dockerenv ] || { echo "please run in supplied container"; exit 1; } -set -e; eval "$(environment)" +eval "$(environment)" +set -o nounset -o pipefail -o errexit cores=$(nproc) device="${DEVICE?}" -manifest_dir="${MANIFEST_DIR?}/${device}" -manifest_repo="${MANIFEST_REPO?}/${device}" +device_manifest_repo="${MANIFEST_REPO?}/${device}" external_dir="${EXTERNAL_DIR?}" build_kernel="${BUILD_KERNEL?}" kernel_dir="${external_dir}/kernel/${device}" base_dir="${BASE_DIR?}" -sudo chown -R "$(id -u)":"$(id -g)" "$HOME/build" +# Still needed? Lets try by disabling. +# sudo chown -R "$(id -u)":"$(id -g)" "$HOME/build" -[[ -f ~/.gitconfig ]] || \ - printf "[color]\nui=auto\n[user]\nemail=aosp@example.org\nname=AOSP User" \ - > ~/.gitconfig +mkdir --parents "${base_dir}" "${device_manifest_repo}" -mkdir --parents "${base_dir}" "${manifest_dir}" - -rsync -P --archive --verbose "${manifest_repo}/" "${manifest_dir}/" - -export GIT_WORK_TREE="$manifest_dir" -export GIT_DIR="${manifest_dir}/.git" -[ -d "${manifest_dir}/.git" ] || git init +export GIT_WORK_TREE="$device_manifest_repo" +export GIT_DIR="${device_manifest_repo}/.git" +[ -d "${device_manifest_repo}/.git" ] || git init git add . git commit --all --message "automated cache commit" || : unset GIT_DIR GIT_WORK_TREE @@ -32,17 +27,26 @@ echo "Cloning platform..." cd "${base_dir}" rm .repo/manifests/ .repo/manifests.git/ -rf repo init \ - --no-clone-bundle \ - --manifest-url "${manifest_dir}" \ + --manifest-url "${device_manifest_repo}" \ --manifest-name base.xml -retry 3 repo sync \ + +# --fetch-submodules is normally not needed so do not disable it because some +# repos contain submodules that we don’t need. +repo sync \ + --verbose \ --current-branch \ - --no-tags \ --force-sync \ - --no-clone-bundle \ - --jobs "${cores}" -repo forall -c 'git reset --hard ; git clean --force -dx' + --no-tags \ + --optimized-fetch \ + --jobs "${cores}" \ + --retry-fetches 3 +repo --no-pager forall --abort-on-errors -p --verbose --jobs "${cores}" -c 'git reset --hard ; git clean --force -dx' + +repo --no-pager forall --abort-on-errors -p --verbose --jobs "${cores}" -c 'fetch-tag' +verify + +## TODO: Not needed for GrapheneOS. # Kernel if [ "${build_kernel}" == "true" ]; then echo "Cloning kernel..." @@ -51,13 +55,15 @@ if [ "${build_kernel}" == "true" ]; then rm .repo/manifests/ .repo/manifests.git/ -rf repo init \ --no-clone-bundle \ - --manifest-url "${manifest_dir}" \ + --manifest-url "${device_manifest_repo}" \ --manifest-name "kernel.xml" repo sync \ + --verbose \ --current-branch \ - --no-tags \ --force-sync \ - --no-clone-bundle \ - --jobs "${cores}" - repo forall -c 'git reset --hard ; git clean --force -dx' + --no-tags \ + --optimized-fetch \ + --jobs "${cores}" \ + --retry-fetches 3 + repo --no-pager forall --abort-on-errors -p --verbose --jobs "${cores}" -c 'git reset --hard ; git clean --force -dx' fi diff --git a/scripts/fetch-tag b/scripts/fetch-tag new file mode 100755 index 0000000..726f4ca --- /dev/null +++ b/scripts/fetch-tag @@ -0,0 +1,8 @@ +#!/bin/bash +[ -f /.dockerenv ] || { echo "please run in supplied container"; exit 1; } +set -o nounset -o pipefail -o errexit + +if [[ "$REPO_UPSTREAM" =~ refs/tags/ ]]; then + REPO_TAG="${REPO_UPSTREAM#refs/tags/}" + git fetch "$REPO_REMOTE" tag "$REPO_TAG" --no-tags +fi diff --git a/scripts/generate-metadata b/scripts/generate-metadata index 3837a4f..c0dbd80 100755 --- a/scripts/generate-metadata +++ b/scripts/generate-metadata @@ -1,38 +1,19 @@ #!/usr/bin/env python3 -# Original Source from: https://github.com/GrapheneOS/script - from argparse import ArgumentParser from os import path from zipfile import ZipFile -from enum import Enum - - -class Channels(Enum): - stable = "stable" - beta = "beta" - testing = "testing" - - def __str__(self): - return self.value - parser = ArgumentParser(description="Generate update server metadata") -parser.add_argument("--channel", type=Channels, choices=list(Channels), - default=Channels.testing, help="The channel the OTA should be released on.") parser.add_argument("zip") zip_path = parser.parse_args().zip -channel = parser.parse_args().channel with ZipFile(zip_path) as f: with f.open("META-INF/com/android/metadata") as metadata: data = dict(line[:-1].decode().split("=") for line in metadata) - my_path = path.join( - path.dirname(zip_path), - data["pre-device"] + "-" + str(channel) - ) - with open(my_path, "w") as output: - build_id = data["post-build"].split("/")[3] - incremental = data["post-build"].split("/")[4].split(":")[0] - print(incremental, data["post-timestamp"], build_id, file=output) + for channel in ("beta", "stable", "testing"): + with open(path.join(path.dirname(zip_path), data["pre-device"] + "-" + channel), "w") as output: + build_id = data["post-build"].split("/")[3] + incremental = data["post-build"].split("/")[4].split(":")[0] + print(incremental, data["post-timestamp"], build_id, channel, file=output) diff --git a/scripts/keys b/scripts/keys index f2586f4..dab1b8b 100755 --- a/scripts/keys +++ b/scripts/keys @@ -3,14 +3,18 @@ set -e; eval "$(environment)" readonly key_dir="${KEY_DIR?}" +readonly public_key_dir="${PUBLIC_KEY_DIR?}" readonly os_name="${OS_NAME?}" readonly rand_file="${RANDFILE?}" + +# TODO: Review the list of keys. Probably not all of them are needed anymore with Android 11. declare -a keys=( avb releasekey platform shared media + networkstack verity kernel com.android.conscrypt @@ -21,7 +25,7 @@ declare -a keys=( com.android.tzdata ) -mkdir -p "${key_dir}" +mkdir -p "${key_dir}" "$public_key_dir" if [ -f "${rand_file}" ]; then echo "Keeping seed: ${rand_file}" @@ -55,6 +59,7 @@ for key in "${keys[@]}"; do generate_verity_key -convert "${x509_file}" "${verity_file}" [ -f "${verity_file}.pub" ] || \ { echo "Generation failed for ${key}"; exit 1 ;}; + cp "${x509_file}" "$public_key_dir" ;; avb) avb_file="${key_dir}/avb_pkmd.bin" diff --git a/scripts/manifest b/scripts/manifest index 4f1b4e7..767ecff 100755 --- a/scripts/manifest +++ b/scripts/manifest @@ -1,17 +1,22 @@ #!/usr/bin/python3 -from tempfile import mkdtemp -from git import Git, Repo, cmd -import git -from xml.etree import ElementTree +from tempfile import mkdtemp, TemporaryDirectory +import defusedxml.ElementTree as ElementTree from xml.etree.ElementTree import Element -from xml.dom import minidom +from defusedxml import minidom from sys import argv, exit from os import environ, getcwd, getenv, makedirs from os.path import isfile, isdir +import os import re import time +import subprocess +import sys + import yaml +from git import Git, Repo, cmd +import git +from gnupg import GPG class AndroidManifest: @@ -20,6 +25,8 @@ class AndroidManifest: ref, name, repo='platform/manifest', + manifest_url=None, + manifest_pubkey=None, extra_remotes=[], extra_projects=[], remove_paths=[], @@ -29,10 +36,21 @@ class AndroidManifest: self.ref = ref self.name = name self.repo = repo + if manifest_url is None: + self.manifest_url = "{}/{}".format(self.default_fetch, self.repo) + else: + self.manifest_url = manifest_url + + self.resource_paths = [ + '/home/build', + '/opt/aosp-build', + ] + self.manifest_pubkey = manifest_pubkey + self.extra_remotes = extra_remotes self.extra_projects = extra_projects self.remove_paths = remove_paths - self.remove_groups = remove_groups + self.remove_groups = frozenset(remove_groups) for project in self.extra_projects: self.remove_paths.append(project['path']) self._fetch() @@ -43,16 +61,59 @@ class AndroidManifest: self._set_default_remote() self._lock() + def _search_file(self, file_sub_path): + for resource_path in self.resource_paths: + potential_file = os.path.join( + resource_path, + file_sub_path) + if os.path.isfile(potential_file): + return potential_file + raise IOError("File sub path {} not found.".format( + file_sub_path + )) + + def _verify_tag(self, manifest_repo): + if self.manifest_pubkey is None: + print("[{}] No manifest pubkey specified. Skipping verification of git tag signature.".format( + self.name, + )) + return + + pubkey_file = self._search_file(os.path.join( + 'config/openpgp_keys', + self.manifest_pubkey, + )) + + with TemporaryDirectory() as temp_gpg_home: + gpg = GPG(gnupghome=temp_gpg_home) + with open(pubkey_file, 'rb') as pubkey_fh: + import_result = gpg.import_keys(pubkey_fh.read()) + if len(import_result.results) == 0: + raise Exception("Did not import any keys.") + + manifest_repo.git.update_environment(GNUPGHOME=temp_gpg_home) + + # Not yet supported upstream and looks non-trivial for me to add it. + # https://github.com/gitpython-developers/GitPython/issues/611 + repo_ext_output = manifest_repo.git.execute( + ['git', 'verify-tag', + # '--raw', + self.ref], + with_extended_output=True, + ) + print(repo_ext_output[1] + repo_ext_output[2]) + def _fetch(self): - manifest_url = "%s/%s" % (self.default_fetch, self.repo) - print("[{}] Checking out: \"{}\" at \"{}\"".format( + manifest_repo = Repo.clone_from(self.manifest_url, mkdtemp(), branch=self.ref, depth=1) + print("[{}] Checked out: \"{}\" at \"{}\" ({})".format( self.name, - manifest_url, - self.ref + self.manifest_url, + self.ref, + manifest_repo.head.commit.hexsha )) - manifest_repo = Repo.clone_from(manifest_url, mkdtemp(), branch=self.ref, depth=1) - string = manifest_repo.git.show('HEAD:default.xml') - self.manifest = ElementTree.fromstring(string) + self._verify_tag(manifest_repo) + manifest_string = manifest_repo.git.show('HEAD:default.xml') + self.manifest = ElementTree.fromstring(manifest_string) def _extend(self): for remote in self.extra_remotes: @@ -85,24 +146,30 @@ class AndroidManifest: )) def _remove(self): - projects=self.manifest.findall(".//project") - for project in projects: - path=project.attrib['path'] + for project in self.manifest.findall(".//project"): + path=project.attrib.get('path', project.attrib['name']) if 'groups' in project.attrib: - groups = project.attrib['groups'].split(',') - if any(i in groups for i in self.remove_groups): - self.manifest.remove(project) - print("[{}] Removing Project: \"{}\"".format( + groups_string = project.attrib['groups'] + + ## from `repo` program source: manifest_xml.py + groups = [x for x in re.split(r'[,\s]+', groups_string) if x] + + group_intersections = self.remove_groups.intersection(groups) + if len(group_intersections): + print("[{}] Removing Project: \"{}\" (because of remove_groups {})".format( self.name, - path + path, + list(group_intersections), )) - if 'path' in project.attrib: - if project.attrib['path'] in self.remove_paths: self.manifest.remove(project) - print("[{}] Removing Project: \"{}\"".format( - self.name, - path - )) + for project in self.manifest.findall(".//project"): + path=project.attrib.get('path', project.attrib['name']) + if path in self.remove_paths: + print("[{}] Removing Project: \"{}\"".format( + self.name, + path, + )) + self.manifest.remove(project) def _set_remotes(self): self.remotes={} @@ -147,27 +214,31 @@ class AndroidManifest: def _lock(self): projects=self.manifest.findall(".//project") for project in projects: - print("[{}] Locking Project: \"{}\" (path \"{}\")".format( - self.name, - project.attrib['name'], - project.attrib['path'], - )) - if 'remote' in project.attrib: - remote = self.remotes[project.attrib['remote']] + remote = self.remotes[project.attrib.get('remote', self.default_remote)] + revision = project.attrib.get('revision', remote['revision']) + + # TODO: Analyse if this can be attacked by naming a branch like a + # commit hash for example. + if re.search(r'^[0-9a-f]{40}$', revision): + print("[{}] Reusing Locked Project: \"{}\"{}".format( + self.name, + project.attrib['name'], + " (path \"{}\")".format(project.attrib.get('path', '')), + )) else: - remote = self.remotes[self.default_remote] - if 'revision' in project.attrib: - revision = project.attrib['revision'] - elif 'revision' in remote: - revision = remote['revision'] - if 'refs' not in revision: - revision = "refs/heads/%s" % revision - project_repo_url="%s/%s.git" % ( - remote.get('fetch',self.remotes[self.default_remote]['fetch']), - project.attrib['name'] - ) - project.attrib['upstream'] = revision - project.attrib['revision'] = self._lsremote(project_repo_url, revision) + print("[{}] Locking Project: \"{}\"{}".format( + self.name, + project.attrib['name'], + " (path \"{}\")".format(project.attrib.get('path', '')), + )) + if 'refs' not in revision: + revision = "refs/heads/%s" % revision + project_repo_url="%s/%s.git" % ( + remote['fetch'], + project.attrib['name'] + ) + project.attrib['upstream'] = revision + project.attrib['revision'] = self._lsremote(project_repo_url, revision) def _lsremote(self, url, refs): remote_refs = {} @@ -180,6 +251,15 @@ class AndroidManifest: time.sleep(2**x) raise Exception("Repeatedly failed trying git ls-remote.") + def get_project_list(self): + project_paths = [] + for project in self.manifest.findall(".//project"): + project_paths.append(project.attrib.get('path', project.attrib['name'])) + + return { + 'project_paths': sorted(project_paths), + } + def pretty_print(self): rough_string = ElementTree.tostring(self.manifest, 'utf-8') reparsed = minidom.parseString(rough_string) @@ -189,8 +269,8 @@ if __name__ == "__main__": config_file=getenv('CONFIG_FILE') print("Config file: %s" % config_file) - with open(config_file, encoding='utf-8') as data_file: - config = yaml.load(data_file.read()) + with open(config_file, encoding='utf-8') as fh: + config = yaml.load(fh.read()) path=getenv('MANIFEST_DIR') @@ -201,25 +281,35 @@ if __name__ == "__main__": devices=[environ['DEVICE']] for device in devices: - makedirs('{}/{}'.format(path, device), exist_ok=True) - filename = '{}/{}/kernel.xml'.format(path, device) - kernel_manifest = AndroidManifest( - name="{}-kernel".format(device), - ref=config['devices'][device]['kernel_ref'], - repo="kernel/manifest" - ).pretty_print() - open(filename,'w').write(kernel_manifest) + device_manifest_repo = os.path.join(path, device) + + if 'kernel_ref' in config['devices'][device]: + kernel_manifest = AndroidManifest( + # Kernel manifest is currently not signed. + # git tags are pushed irregularly. + name="{}-kernel".format(device), + ref=config['devices'][device]['kernel_ref'], + repo="kernel/manifest", + ) + with open(os.path.join(device_manifest_repo, 'kernel.xml'),'w') as fh: + fh.write(kernel_manifest.pretty_print()) base_manifest = AndroidManifest( + manifest_url = config.get('platform',{}).get('manifest_url', None), + manifest_pubkey=config['devices'][device]['platform_pubkey'], ref=config['devices'][device]['platform_ref'], name="{}-base".format(device), extra_remotes = config.get('platform',{}).get('extra_remotes',[]), extra_projects = config.get('platform',{}).get('extra_projects',[]), remove_paths = config.get('platform',{}).get('remove_paths',[]), remove_groups = config.get('platform',{}).get('remove_groups',[]), - ).pretty_print() - open('{}/{}/base.xml'.format(path,device),'w').write(base_manifest) + ) + with open(os.path.join(device_manifest_repo, 'base.xml'),'w') as fh: + fh.write(base_manifest.pretty_print()) + with open(os.path.join(device_manifest_repo, 'base.yml'), 'w') as fh: + yaml.dump(base_manifest.get_project_list(), fh, default_flow_style=False) + - repo = Repo.init(path) - repo.index.add(['*']) - repo.index.commit("manifest commit") + repo = Repo.init(device_manifest_repo) + repo.index.add(['*']) + repo.index.commit("manifest commit") diff --git a/scripts/pin-packages b/scripts/pin-packages new file mode 100755 index 0000000..35ce683 --- /dev/null +++ b/scripts/pin-packages @@ -0,0 +1,5 @@ +#!/bin/bash +set -o nounset -o pipefail -o errexit +[ -f /.dockerenv ] || { echo "please run in supplied container"; exit 1; } + +dpkg -l | awk '{ if ($1 == "ii") print $2 "=" $3 }' diff --git a/scripts/release b/scripts/release index f3c9c12..e775f94 100755 --- a/scripts/release +++ b/scripts/release @@ -51,9 +51,7 @@ ota_from_target_files \ "${release_dir}/${device}-ota_update-${build_number}.zip" echo 'Generating OTA metadata' -ota_channel=${OTA_CHANNEL:-beta} generate-metadata \ - --channel "${ota_channel}" \ "${release_dir}/${device}-ota_update-${build_number}.zip" echo "Running img_from_target_files" diff --git a/scripts/retry b/scripts/retry index 3da7cae..f62ed26 100755 --- a/scripts/retry +++ b/scripts/retry @@ -14,10 +14,10 @@ until "$@"; do wait=$((2 ** count)) count=$((count + 1)) if [ "$count" -lt "$retries" ]; then - echo "Retry $count/$retries exited $exit, retrying in $wait seconds ..." + echo "Try $count/$retries terminated with exit code $exit, retrying in $wait seconds ..." sleep $wait else - echo "Retry $count/$retries exited $exit, no more retries left." + echo "Try $count/$retries terminated with exit code $exit, no more retries left." exit $exit fi done diff --git a/scripts/review b/scripts/review new file mode 100755 index 0000000..c4873c9 --- /dev/null +++ b/scripts/review @@ -0,0 +1,37 @@ +#!/bin/bash +[ -f /.dockerenv ] || { echo "please run in supplied container"; exit 1; } +set -e; eval "$(environment)" + +# See https://github.com/ypid/android-review for details. + +base_dir="${BASE_DIR?}" +cores=$(nproc) +device="${DEVICE?}" +review_dir="${CONFIG_DIR?}/review/GrapheneOS" +device_base_manifest_repo="${MANIFEST_REPO?}/${device}" +device_base_aosp_manifest_repo="${MANIFEST_REPO?}-aosp/${device}" + +rm -rf "$review_dir" + +cd "${base_dir}" +rm .repo/manifests/ .repo/manifests.git/ -rf +repo init \ + --no-clone-bundle \ + --manifest-url "${device_base_aosp_manifest_repo}" \ + --manifest-name base.xml + +repo --no-pager forall --ignore-missing --abort-on-errors -p --verbose --jobs "${cores}" -c 'review-do' "${review_dir}" + +rm .repo/manifests/ .repo/manifests.git/ -rf +repo init \ + --no-clone-bundle \ + --manifest-url "${device_base_manifest_repo}" \ + --manifest-name base.xml + +echo "The following repositories are not contained in the AOSP manifest nor in the above git log files. No git rebase is expected there so review by normal means." + +( +while read -r repo_path; do + echo "$repo_path $(git -C "$repo_path" rev-parse HEAD)" +done < <(diff "$device_base_aosp_manifest_repo/base.yml" "$device_base_manifest_repo/base.yml" | sed --quiet 's/^> - //p;') +) | tee "$review_dir/additional_repo_path.list" diff --git a/scripts/review-do b/scripts/review-do new file mode 100755 index 0000000..ee4be85 --- /dev/null +++ b/scripts/review-do @@ -0,0 +1,26 @@ +#!/bin/bash +[ -f /.dockerenv ] || { echo "please run in supplied container"; exit 1; } +set -o nounset -o pipefail -o errexit + +review_project_dir="$1/${REPO_PATH}" + +if git diff --quiet "${REPO_LREV}..HEAD"; then + # Ensure the output file is absent as there is no diff. + rm -f "${review_project_dir:?}/git.log" +else + mkdir --parents "$(dirname "${review_project_dir}")" + + # find "${review_project_dir}" -name '*.patch' -print0 -delete >/dev/null + # git format-patch --no-numbered --unified=10 --zero-commit --full-index --compact-summary --quiet --output-directory "${review_project_dir}" "${REPO_RREV}" + + # It seems that git (I tested up until 2.27.0) has no option to omit like --zero-index. + # So we set the pre- and post-image blob object names to `-` to avoid + # uninteresting diffs where only those hashes change. + # This regex depends on --full-index above. + # sed --regexp-extended --in-place 's/^index [0-9a-f]{40}\.\.[0-9a-f]{40}/index -..-/;' "${review_project_dir}"/*.patch + # Rather than doing that, better configure the editor to ignore uninteresting stuff. + # `git diff` now supports `--ignore-matching-lines`. + + git log --patch --unified=10 --reverse --full-index --compact-summary --decorate=short --date=format:'%a %Y-%m-%d %H:%M:%S%z' "${REPO_LREV}..HEAD" > "${review_project_dir}.log" + echo "Generated git log --patch file at ${review_project_dir}/git.log" +fi diff --git a/scripts/verify b/scripts/verify new file mode 100755 index 0000000..8fccf7c --- /dev/null +++ b/scripts/verify @@ -0,0 +1,39 @@ +#!/bin/bash +[ -f /.dockerenv ] || { echo "please run in supplied container"; exit 1; } +eval "$(environment)" +set -o nounset -o pipefail -o errexit +trap 'echo Encountered an unexpected error. Exiting with exit code $? in ${BASH_SOURCE-}:${LINENO-}. >&2' ERR + +base_dir="${BASE_DIR?}" +cores=$(nproc) +BASE_GNUPGHOME="$(mktemp -d)" +export BASE_GNUPGHOME + +find /opt/aosp-build/config/openpgp_keys/ /home/build/config/openpgp_keys/ -iname '*.asc' -print0 | while read -r -d $'\0' pubkey +do + pubkey_filename_no_suffix="$(basename "$pubkey")" + pubkey_filename_no_suffix="${pubkey_filename_no_suffix%.asc}" + + GNUPGHOME="${BASE_GNUPGHOME:?}/$pubkey_filename_no_suffix" + export GNUPGHOME + + rm -rf "$GNUPGHOME" # Ensure absent. + mkdir -p "$GNUPGHOME" + chmod 0700 "$GNUPGHOME" + gpg --import "$pubkey" + echo -e '5\ny\n' | gpg --command-fd 0 --edit-key '*' trust + pkill gpg-agent + + unset GNUPGHOME +done + +cd "${base_dir}" + +# Might be needed when the SHA1 commit hashes are already there locally and +# `repo sync` therefore "forgets" to download the corresponding git tag. +# shellcheck disable=SC2016 +# repo --no-pager forall --abort-on-errors -p --verbose --jobs "${cores}" -c bash -c ' +# git_tag="${REPO_UPSTREAM#refs/tags/}" +# git fetch "$REPO_REMOTE" tag "$git_tag" --no-tags' + +repo --no-pager forall --abort-on-errors -p --verbose --jobs "${cores}" -c 'verify-do' diff --git a/scripts/verify-do b/scripts/verify-do new file mode 100755 index 0000000..0f73590 --- /dev/null +++ b/scripts/verify-do @@ -0,0 +1,20 @@ +#!/bin/bash +[ -f /.dockerenv ] || { echo "please run in supplied container"; exit 1; } +set -o nounset -o pipefail -o errexit + +case $REPO_REMOTE in + grapheneos*) GNUPGHOME="$BASE_GNUPGHOME/daniel.micay" ;; + seedvault-app) echo "WARNING: Cannot verify repo path $REPO_PATH because of https://github.com/seedvault-app/seedvault/issues/188" 1>&2 + exit 0 ;; + *) GNUPGHOME="$BASE_GNUPGHOME/$REPO_REMOTE" ;; +esac + +export GNUPGHOME + +if [[ $REPO_UPSTREAM =~ refs/tags/.* ]]; then + git_tag="${REPO_UPSTREAM#refs/tags/}" + + git verify-tag "$git_tag" +else + echo "WARNING: Cannot verify repo path $REPO_PATH because the manifest specifies no git tag." 1>&2 +fi