From c0194fd54d18c405adc012d582808a48a345ce71 Mon Sep 17 00:00:00 2001 From: althafvly Date: Tue, 18 Jul 2023 10:24:12 +0530 Subject: [PATCH] setup gitlab ci for cromite builds --- .gitignore | 7 + .gitlab-ci.yml | 47 ++- Dockerfile | 49 +++ build.sh | 191 ++++++++++++ packages.txt | 785 +++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 1074 insertions(+), 5 deletions(-) create mode 100644 Dockerfile create mode 100755 build.sh create mode 100644 packages.txt diff --git a/.gitignore b/.gitignore index 0e2850620..b86518506 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,10 @@ /.vs /temp +src/ +apks/ +_gclient_src*/ +.ccache/ +.cipd/ +.gclient* +depot_tools/ diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 28436fdfb..34bf3d728 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,18 +2,55 @@ image: "registry.gitlab.e.foundation/e/os/docker-android-apps-cicd:latest" stages: - update-from-upstream - -before_script: - - apt update && apt-get install libncurses5 -y + - prepare + - build cache: key: ${CI_PROJECT_ID} +variables: + CONTAINER_IMAGE: registry.gitlab.e.foundation:5000/$CI_PROJECT_PATH + GIT_SUBMODULE_STRATEGY: recursive + +build-docker: + image: docker:19-git + stage: prepare + tags: + - generic_privileged + variables: + DOCKER_DRIVER: overlay2 + services: + - docker:19-dind + script: + - echo "$CI_JOB_TOKEN" | docker login registry.gitlab.e.foundation:5000 -u gitlab-ci-token --password-stdin + - docker pull $CONTAINER_IMAGE:latest || true + - docker build --cache-from $CONTAINER_IMAGE:latest --tag $CONTAINER_IMAGE:latest ${CI_PROJECT_DIR} + - docker push $CONTAINER_IMAGE:latest + +.build-cromite: + image: $CONTAINER_IMAGE + tags: + - build-browser + artifacts: + name: "$CI_JOB_NAME" + paths: + - apks/* + +build-cromite-arm64: + stage: build + extends: .build-cromite + script: + - $CI_PROJECT_DIR/build.sh -c -s -a arm64 + +build-cromite-x64: + stage: build + extends: .build-cromite + script: + - $CI_PROJECT_DIR/build.sh -c -s -a x64 + .update-from-upstream: image: registry.gitlab.e.foundation/e/tools/docker-tools:latest stage: update-from-upstream - rules: - - if: '$CI_PIPELINE_SOURCE == "schedule" && $CI_COMMIT_REF_NAME == $LOCAL_BRANCH' variables: CI_PROJECT_SSH_URL: git@gitlab.e.foundation:$CI_PROJECT_PATH GIT_STRATEGY: none diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..b06520889 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,49 @@ +FROM ubuntu:18.04 + +ENV CHROMIUM_DIR "/srv/chromium" +ENV DEBIAN_FRONTEND noninteractive + +# Enable foreign architectures support +RUN dpkg --print-architecture && \ + dpkg --print-foreign-architectures + +RUN dpkg --add-architecture i386 && \ + dpkg --print-foreign-architectures + +# Install required packages +COPY packages.txt /packages.txt + +RUN apt-get -qq update && \ + cat /packages.txt | xargs apt-get install -qqy + +RUN rm /packages.txt + +# Install and setup python 3.10 as default +RUN add-apt-repository -y ppa:deadsnakes/ppa + +RUN apt-get -qq update && \ + apt-get install -qqy --no-install-recommends \ + python3.8 lib32z1 lighttpd xvfb libncurses5:i386 libstdc++6:i386 zlib1g:i386 ccache + +RUN update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 2 +RUN update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1 +RUN update-alternatives --set python3 /usr/bin/python3.8 + +# Install chromium build dependencies +RUN curl -s https://raw.githubusercontent.com/chromium/chromium/main/build/install-build-deps.py \ + | python3 - --no-syms --lib32 --no-arm --no-chromeos-fonts --no-nacl --no-prompt + +RUN apt-get -f install + +# Setup locale +RUN localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 +ENV LANG en_US.UTF-8 + +RUN git config --global user.name "John Doe" +RUN git config --global user.email "johndoe@example.com" + +RUN mkdir ${CHROMIUM_DIR} + +WORKDIR ${CHROMIUM_DIR} + +ENTRYPOINT /bin/bash diff --git a/build.sh b/build.sh new file mode 100755 index 000000000..0a171268a --- /dev/null +++ b/build.sh @@ -0,0 +1,191 @@ +#!/bin/bash + +set -e + +chromium_dir="${chromium_dir:-/srv/chromium}" +root_dir=$(dirname "$(readlink -f "$0")") +if [ ! -d "$chromium_dir" ]; then + chromium_dir=$root_dir +fi +chromium_version=$(head -n 1 "${root_dir}/build/RELEASE") +chromium_code=$(echo "$chromium_version" | tr -d '.' | cut -c5-) +clean=0 +gsync=0 +history=1 +arch="" + +usage() { + echo "Usage:" + echo " $(basename $(readlink -nf $0)) [ options ]" + echo + echo " Options:" + echo " -a Build specified arch" + echo " -c Clean" + echo " -h Show this message" + echo " -s Sync without history" + echo + exit 1 +} + +build() { + echo ">> [$(date)] Head commit: $(git show -s --format=%s)" + apks="ChromePublic" + build_args="$(cat "${root_dir}"/build/bromite.gn_args) target_cpu=\"${1}\" " + add_args=( + "generate_linker_map=true" + "use_relative_vtables_abi=false" + "cc_wrapper=\"ccache\"" + ) + + # Add to build_args + for var in "${add_args[@]}"; do + build_args+=" $var" + done + + code=$chromium_code + if [ $1 '==' "arm" ]; then + code+=00 + elif [ $1 '==' "arm64" ]; then + code+=50 + elif [ $1 '==' "x86" ]; then + code+=10 + elif [ $1 '==' "x64" ]; then + code+=60 + fi + build_args+=' android_default_version_name="'$chromium_version'"' + build_args+=' android_default_version_code="'$code'"' + + if [ $clean -eq 1 ] && [ -d "out/$1" ]; then + rm -rf "out/$1" + fi + + echo ">> [$(date)] Building chromium $chromium_version for $1" + gn gen "out/$1" --args="$build_args" + ninja -C out/$1 chrome_public_apk + + for apk in $apks; do + if [ -f "out/${1}/apks/$apk.apk" ]; then + echo ">> [$(date)] Moving $apk for ${1} to output folder" + if [[ "$apk.apk" == ChromePublic.apk ]]; then + if [ "$1" = "x64" ]; then + mv "out/${1}/apks/ChromePublic.apk" "${root_dir}/apks/x86_64/ChromePublic.apk" + else + mv "out/${1}/apks/ChromePublic.apk" "${root_dir}/apks/${1}/ChromePublic.apk" + fi + fi + fi + done +} + +setup_ccache() { + echo ">> [$(date)] Settings up ccache" + export USE_CCACHE=1 + export CCACHE_EXEC=$(command -v ccache) + export PATH=$chromium_dir/src/third_party/llvm-build/Release+Asserts/bin:$PATH + export CCACHE_CPP2=yes + export CCACHE_SLOPPINESS=time_macros + export CCACHE_DIR=$chromium_dir/.ccache + ccache -M 200G +} + +patch() { + cd $chromium_dir/src + echo ">> [$(date)] Applying bromite patches" + + patches_list=$(cat "${root_dir}/build/bromite_patches_list.txt") + for file in $patches_list; do + git am -3 --ignore-whitespace "${root_dir}/build/patches/$file" + done +} + +sync() { + echo ">> [$(date)] Syncing chromium $chromium_version" + cd $chromium_dir + if [ $history -eq 1 ]; then + yes | gclient sync -D -R -r $chromium_version + else + yes | gclient sync --no-history -D -R -r $chromium_version + fi + patch +} + +init_repo(){ + echo ">> [$(date)] Init chromium $chromium_version" + cd $chromium_dir + rm -rf .gclient* + if [ $history -eq 1 ]; then + fetch android + else + fetch --no-history android + fi +} + +while getopts ":a:chr:s" opt; do + case $opt in + a) arch="$OPTARG" ;; + c) clean=1 ;; + h) usage ;; + s) gsync=1 && history=0 ;; + :) + echo "Option -$OPTARG requires an argument" + echo + usage + ;; + \?) + echo "Invalid option:-$OPTARG" + echo + usage + ;; + esac +done +shift $((OPTIND - 1)) + +# Add depot_tools to PATH +if [ ! -d "$chromium_dir/depot_tools" ]; then + git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git "$chromium_dir/depot_tools" +fi +export PATH="$chromium_dir/depot_tools:$PATH" + +if [ $clean -eq 1 ]; then + echo ">> [$(date)] Cleaning chromium source code" + if [ -d "$chromium_dir/src" ]; then + cd $chromium_dir/src + git reset --hard && git clean -xfdf + fi +fi + +if [ ! -d "$chromium_dir/src" ]; then + init_repo + sync +fi + +if [ $gsync -eq 1 ]; then + if [ -d "$chromium_dir/src/.git/rebase-apply" ]; then + rm -fr "$chromium_dir/src/.git/rebase-apply" + fi + find "$chromium_dir/src/.git" -name "*.lock" -delete + if [ ! -z $(find $chromium_dir/src/.git -name "*.lock") ]; then + rm -fr $chromium_dir/src + init_repo + fi + sync +fi + +mkdir -p "${root_dir}/apks/x86_64" "${root_dir}/apks/arm64" "${root_dir}/apks/x86" "${root_dir}/apks/arm" + +cd $chromium_dir/src +. build/android/envsetup.sh +setup_ccache + +if [ ! -z "$arch" ]; then + build $arch +else + build arm + build arm64 + build x86 + build x64 +fi + +if [ -d "${root_dir}/apks" ]; then + find "${root_dir}/apks" -empty -type d -delete +fi diff --git a/packages.txt b/packages.txt new file mode 100644 index 000000000..77fcfe67f --- /dev/null +++ b/packages.txt @@ -0,0 +1,785 @@ +adwaita-icon-theme +apache2 +apache2-bin +apache2-data +apache2-utils +at +at-spi2-core +autoconf +automake +autopoint +autotools-dev +binutils-aarch64-linux-gnu +binutils-arm-linux-gnueabihf +binutils-mips64el-linux-gnuabi64 +binutils-mipsel-linux-gnu +bison +bsdmainutils +build-essential +bzip2-doc +cdbs +comerr-dev +curl +dbus +dbus-x11 +dconf-gsettings-backend +dconf-service +dctrl-tools +debhelper +debugedit +devscripts +dh-autoreconf +dh-strip-nondeterminism +dh-translations +diffstat +dirmngr +dpkg-dev +dput +elfutils +fakeroot +flex +fontconfig +fontconfig-config +fonts-dejavu-core +fonts-lato +gdal-data +gettext +gettext-base +giblib1 +gir1.2-appindicator3-0.1 +gir1.2-atk-1.0 +gir1.2-atspi-2.0 +gir1.2-dbusmenu-glib-0.4 +gir1.2-freedesktop +gir1.2-gdkpixbuf-2.0 +gir1.2-glib-2.0 +gir1.2-gnomekeyring-1.0 +gir1.2-gtk-3.0 +gir1.2-harfbuzz-0.0 +gir1.2-pango-1.0 +git +git-svn +glib-networking +glib-networking-common +glib-networking-services +gnome-icon-theme +gnupg +gnupg-l10n +gnupg-utils +gperf +gpg +gpg-agent +gpg-wks-client +gpg-wks-server +gpgconf +gpgsm +groff-base +gsettings-desktop-schemas +gtk-update-icon-cache +hicolor-icon-theme +humanity-icon-theme +i965-va-driver +ibverbs-providers +icu-devtools +intltool +intltool-debian +iso-codes +javascript-common +jq +krb5-multidev +libaacs0 +libaec0 +libalgorithm-diff-perl +libalgorithm-diff-xs-perl +libalgorithm-merge-perl +libapache2-mod-php7.2 +libapparmor1 +libappindicator3-1 +libappindicator3-dev +libapr1 +libaprutil1 +libaprutil1-dbd-sqlite3 +libaprutil1-ldap +libapt-inst2.0 +libapt-pkg-perl +libarchive-cpio-perl +libarchive-zip-perl +libarchive13 +libargon2-0 +libarmadillo8 +libarpack2 +libasm1 +libasound2 +libasound2-data +libasound2-dev +libassuan0 +libasyncns0 +libatk-bridge2.0-0 +libatk-bridge2.0-dev +libatk1.0-0 +libatk1.0-data +libatk1.0-dev +libatspi2.0-0 +libatspi2.0-dev +libauthen-sasl-perl +libavahi-client3 +libavahi-common-data +libavahi-common3 +libavcodec57 +libavformat57 +libavutil55 +libb-hooks-endofscope-perl +libb-hooks-op-check-perl +libbdplus0 +libbison-dev +libblas3 +libbluetooth-dev +libbluetooth3 +libbluray2 +libbrlapi-dev +libbrlapi0.6 +libbz2-dev +libcairo-gobject2 +libcairo-script-interpreter2 +libcairo2 +libcairo2-dev +libcap-dev +libcap2 +libcgi-fast-perl +libcgi-pm-perl +libcharls1 +libchromaprint1 +libclass-accessor-perl +libclass-method-modifiers-perl +libclass-xsaccessor-perl +libclone-perl +libcolord2 +libcroco3 +libcrystalhd3 +libcups2 +libcups2-dev +libcupsfilters-dev +libcupsfilters1 +libcupsimage2 +libcupsimage2-dev +libcurl4-gnutls-dev +libdap25 +libdapclient6v5 +libdata-dump-perl +libdata-optlist-perl +libdatrie1 +libdbus-1-3 +libdbus-1-dev +libdbus-glib-1-2 +libdbus-glib-1-dev +libdbusmenu-glib-dev +libdbusmenu-glib4 +libdbusmenu-gtk3-4 +libdc1394-22 +libdconf1 +libdevel-callchecker-perl +libdevel-globaldestruction-perl +libdigest-hmac-perl +libdistro-info-perl +libdpkg-perl +libdrm-amdgpu1 +libdrm-common +libdrm-dev +libdrm-intel1 +libdrm-nouveau2 +libdrm-radeon1 +libdrm2 +libdw1 +libdynaloader-functions-perl +libegl-mesa0 +libegl1 +libegl1-mesa-dev +libelf-dev +libelf1 +libemail-valid-perl +libencode-locale-perl +libepoxy-dev +libepoxy0 +libepsilon1 +libexif12 +libexpat1-dev +libexporter-tiny-perl +libfabric1 +libfakeroot +libfcgi-perl +libffi-dev +libfile-basedir-perl +libfile-chdir-perl +libfile-fcntllock-perl +libfile-homedir-perl +libfile-listing-perl +libfile-stripnondeterminism-perl +libfile-which-perl +libfl-dev +libfl2 +libflac8 +libfm-extra4 +libfont-afm-perl +libfontconfig1 +libfontconfig1-dev +libfontenc1 +libfreetype6 +libfreetype6-dev +libfreexl1 +libfyba0 +libgail-common +libgail18 +libgbm-dev +libgbm1 +libgd3 +libgdal20 +libgdcm2.8 +libgdk-pixbuf2.0-0 +libgdk-pixbuf2.0-bin +libgdk-pixbuf2.0-common +libgdk-pixbuf2.0-dev +libgeos-3.6.2 +libgeos-c1v5 +libgeotiff2 +libgetopt-long-descriptive-perl +libgfortran4 +libgif7 +libgirepository-1.0-1 +libgit-wrapper-perl +libgl1 +libgl1-mesa-dev +libgl1-mesa-dri +libgl2ps1.4 +libglapi-mesa +libgles1 +libgles2 +libglib2.0-0 +libglib2.0-bin +libglib2.0-data +libglib2.0-dev +libglib2.0-dev-bin +libglu1-mesa +libglu1-mesa-dev +libglvnd-core-dev +libglvnd-dev +libglvnd0 +libglx-mesa0 +libglx0 +libgme0 +libgnome-keyring-common +libgnome-keyring-dev +libgnome-keyring0 +libgpgme11 +libgphoto2-6 +libgphoto2-l10n +libgphoto2-port12 +libgraphite2-3 +libgraphite2-dev +libgsm1 +libgssrpc4 +libgtk-3-0 +libgtk-3-bin +libgtk-3-common +libgtk-3-dev +libgtk2.0-0 +libgtk2.0-bin +libgtk2.0-common +libharfbuzz-dev +libharfbuzz-gobject0 +libharfbuzz-icu0 +libharfbuzz0b +libhdf4-0-alt +libhdf5-100 +libhdf5-openmpi-100 +libhtml-form-perl +libhtml-format-perl +libhtml-parser-perl +libhtml-tagset-perl +libhtml-tree-perl +libhttp-cookies-perl +libhttp-daemon-perl +libhttp-date-perl +libhttp-message-perl +libhttp-negotiate-perl +libhwloc-plugins +libhwloc5 +libibverbs1 +libice-dev +libice6 +libicu-dev +libicu-le-hb-dev +libicu-le-hb0 +libicu60 +libiculx60 +libid3tag0 +libilmbase12 +libimlib2 +libimport-into-perl +libindicator3-7 +libio-html-perl +libio-pty-perl +libio-socket-inet6-perl +libio-socket-ssl-perl +libio-string-perl +libio-stringy-perl +libipc-run-perl +libipc-system-simple-perl +libjbig-dev +libjbig0 +libjpeg-dev +libjpeg-turbo8 +libjpeg-turbo8-dev +libjpeg8 +libjpeg8-dev +libjq1 +libjs-jquery +libjs-sphinxdoc +libjs-underscore +libjson-c3 +libjson-glib-1.0-0 +libjson-glib-1.0-common +libjsoncpp1 +libkadm5clnt-mit11 +libkadm5srv-mit11 +libkdb5-9 +libkmlbase1 +libkmldom1 +libkmlengine1 +libkrb5-dev +libksba8 +liblapack3 +liblcms2-2 +liblept5 +liblist-compare-perl +liblist-moreutils-perl +libllvm7 +liblocale-gettext-perl +libltdl-dev +libltdl7 +liblua5.2-0 +liblwp-mediatypes-perl +liblwp-protocol-https-perl +liblzma-dev +liblzo2-2 +libmail-sendmail-perl +libmailtools-perl +libmenu-cache-bin +libmenu-cache3 +libminizip1 +libmodule-implementation-perl +libmodule-runtime-perl +libmoo-perl +libmp3lame0 +libmpg123-0 +libmysqlclient20 +libnamespace-clean-perl +libnet-dns-perl +libnet-domain-tld-perl +libnet-http-perl +libnet-ip-perl +libnet-smtp-ssl-perl +libnet-ssleay-perl +libnetcdf-c++4 +libnetcdf13 +libnl-3-200 +libnl-route-3-200 +libnpth0 +libnspr4 +libnspr4-dev +libnss3 +libnss3-dev +libnuma1 +libnumber-compare-perl +libnumber-range-perl +libobrender32v5 +libobt2v5 +libodbc1 +libogdi3.2 +libogg0 +libonig4 +libopencv-calib3d3.2 +libopencv-contrib3.2 +libopencv-core3.2 +libopencv-features2d3.2 +libopencv-flann3.2 +libopencv-highgui3.2 +libopencv-imgcodecs3.2 +libopencv-imgproc3.2 +libopencv-ml3.2 +libopencv-objdetect3.2 +libopencv-photo3.2 +libopencv-shape3.2 +libopencv-stitching3.2 +libopencv-superres3.2 +libopencv-video3.2 +libopencv-videoio3.2 +libopencv-videostab3.2 +libopencv-viz3.2 +libopenexr22 +libopengl0 +libopenjp2-7 +libopenmpi2 +libopenmpt0 +libopus0 +libpackage-stash-perl +libpackage-stash-xs-perl +libpam0g-dev +libpango-1.0-0 +libpango1.0-0 +libpango1.0-dev +libpangocairo-1.0-0 +libpangoft2-1.0-0 +libpangox-1.0-0 +libpangoxft-1.0-0 +libparams-classify-perl +libparams-util-perl +libparams-validate-perl +libparse-debianchangelog-perl +libpath-iterator-rule-perl +libpath-tiny-perl +libpci-dev +libpci3 +libpciaccess0 +libpcre16-3 +libpcre3-dev +libpcre32-3 +libpcrecpp0v5 +libperlio-gzip-perl +libpipeline1 +libpixman-1-0 +libpixman-1-dev +libpng-dev +libpng-tools +libpng16-16 +libpod-constants-perl +libpoppler73 +libpopt0 +libpq5 +libproj12 +libproxy1v5 +libpsm-infinipath1 +libpthread-stubs0-dev +libpulse-dev +libpulse-mainloop-glib0 +libpulse0 +libpython-dev +libpython2.7 +libpython2.7-dev +libqhull7 +libraw1394-11 +librdmacm1 +libregexp-pattern-license-perl +librest-0.7-0 +librole-tiny-perl +librpm8 +librpmbuild8 +librpmio8 +librpmsign8 +librsvg2-2 +librsvg2-common +libruby2.5 +libsctp-dev +libsctp1 +libsensors4 +libserf-1-1 +libshine3 +libsigsegv2 +libsm-dev +libsm6 +libsnappy1v5 +libsndfile1 +libsocket++1 +libsocket6-perl +libsodium23 +libsort-key-perl +libsort-versions-perl +libsoup-gnome2.4-1 +libsoup2.4-1 +libsoxr0 +libspatialite7 +libspeechd-dev +libspeechd2 +libspeex1 +libsqlite3-dev +libssh-gcrypt-4 +libssl-dev +libssl-doc +libstartup-notification0 +libstrictures-perl +libstring-copyright-perl +libstring-escape-perl +libsub-exporter-perl +libsub-exporter-progressive-perl +libsub-identify-perl +libsub-install-perl +libsub-name-perl +libsub-quote-perl +libsuperlu5 +libsvn-perl +libsvn1 +libswresample2 +libswscale4 +libsys-hostname-long-perl +libsz2 +libtbb2 +libtcl8.6 +libterm-readkey-perl +libtesseract4 +libtext-glob-perl +libtext-levenshtein-perl +libthai-data +libthai0 +libtheora0 +libtiff-dev +libtiff5 +libtiff5-dev +libtiffxx5 +libtimedate-perl +libtk8.6 +libtool +libtry-tiny-perl +libtwolame0 +libudev-dev +libunicode-utf8-perl +libunwind8 +liburi-perl +liburiparser1 +libusb-1.0-0 +libva-drm2 +libva-x11-2 +libva2 +libvariable-magic-perl +libvdpau1 +libvorbis0a +libvorbisenc2 +libvorbisfile3 +libvpx5 +libvtk6.3 +libwavpack1 +libwayland-bin +libwayland-client0 +libwayland-cursor0 +libwayland-dev +libwayland-egl1 +libwayland-egl1-mesa +libwayland-server0 +libwebp6 +libwebpmux3 +libwrap0 +libwww-perl +libwww-robotrules-perl +libx11-dev +libx11-doc +libx11-xcb-dev +libx11-xcb1 +libx264-152 +libx265-146 +libxau-dev +libxaw7 +libxcb-dri2-0 +libxcb-dri2-0-dev +libxcb-dri3-0 +libxcb-dri3-dev +libxcb-glx0 +libxcb-glx0-dev +libxcb-present-dev +libxcb-present0 +libxcb-randr0 +libxcb-randr0-dev +libxcb-render0 +libxcb-render0-dev +libxcb-shape0 +libxcb-shape0-dev +libxcb-shm0 +libxcb-shm0-dev +libxcb-sync-dev +libxcb-sync1 +libxcb-util1 +libxcb-xfixes0 +libxcb-xfixes0-dev +libxcb1-dev +libxcomposite-dev +libxcomposite1 +libxcursor-dev +libxcursor1 +libxdamage-dev +libxdamage1 +libxdmcp-dev +libxerces-c3.2 +libxext-dev +libxfixes-dev +libxfixes3 +libxft-dev +libxft2 +libxi-dev +libxi6 +libxinerama-dev +libxinerama1 +libxkbcommon-dev +libxkbcommon0 +libxml-libxml-perl +libxml-namespacesupport-perl +libxml-parser-perl +libxml-sax-base-perl +libxml-sax-expat-perl +libxml-sax-perl +libxml-simple-perl +libxml2 +libxml2-dev +libxmu6 +libxpm4 +libxrandr-dev +libxrandr2 +libxrender-dev +libxrender1 +libxshmfence-dev +libxshmfence1 +libxslt1-dev +libxslt1.1 +libxss-dev +libxss1 +libxt-dev +libxt6 +libxtst-dev +libxtst6 +libxv1 +libxvidcore4 +libxxf86dga1 +libxxf86vm-dev +libxxf86vm1 +libyaml-0-2 +libyaml-libyaml-perl +libyaml-perl +libzvbi-common +libzvbi0 +licensecheck +lintian +lsb-release +locales +lxmenu-data +g++-multilib +gcc-multilib +m4 +make +man-db +mesa-common-dev +mesa-va-drivers +mesa-vdpau-drivers +mysql-common +obconf +obsession +ocl-icd-libopencl1 +odbcinst +odbcinst1debian2 +openbox +openbox-menu +openmpi-bin +openmpi-common +p7zip +patchutils +perl-openssl-defaults +php-common +php7.2-cgi +php7.2-cli +php7.2-common +php7.2-json +php7.2-opcache +php7.2-readline +pinentry-curses +pkg-config +po-debconf +poppler-data +proj-bin +proj-data +psmisc +python +python-apt-common +python-asn1crypto +python-cffi-backend +python-cherrypy3 +python-crypto +python-cryptography +python-dev +python-enum34 +python-idna +python-ipaddress +python-numpy +python-opencv +python-openssl +python-pkg-resources +python-psutil +python-repoze.lru +python-routes +python-simplejson +python-six +python-webob +python-yaml +python2.7-dev +python3-apt +python3-certifi +python3-chardet +python3-debian +python3-distutils +python3-gpg +python3-idna +python3-lib2to3 +python3-magic +python3-pkg-resources +python3-requests +python3-scour +python3-six +python3-unidiff +python3-urllib3 +python3-xdg +rake +rpm +rpm-common +rpm2cpio +ruby +ruby-did-you-mean +ruby-minitest +ruby-net-telnet +ruby-power-assert +ruby-test-unit +ruby2.5 +rubygems-integration +scour +scrot +shared-mime-info +software-properties-common +ssl-cert +strace +sudo +subversion +t1utils +tzdata +ubuntu-mono +ucf +unzip +uuid-dev +va-driver-all +vdpau-driver-all +wayland-protocols +wdiff +wget +x11-common +x11-utils +x11proto-composite-dev +x11proto-core-dev +x11proto-damage-dev +x11proto-dev +x11proto-fixes-dev +x11proto-input-dev +x11proto-randr-dev +x11proto-record-dev +x11proto-scrnsaver-dev +x11proto-xext-dev +x11proto-xf86vidmode-dev +x11proto-xinerama-dev +xcompmgr +xdg-user-dirs +xkb-data +xorg-sgml-doctools +xtrans-dev +zip +zlib1g-dev -- GitLab