aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README32
-rw-r--r--autoware-ros-builder/Dockerfile133
-rwxr-xr-xautoware-ros-builder/build.sh (renamed from centos7-aarch64-openjdk/build.sh)2
-rwxr-xr-xautoware-ros-builder/entrypoint.sh19
-rw-r--r--bionic-amd64-android-lava/Dockerfile60
-rwxr-xr-xbionic-amd64-android-lava/build.sh5
-rw-r--r--bionic-amd64-ansible-base/Dockerfile19
-rwxr-xr-xbionic-amd64-ansible-base/build.sh21
-rw-r--r--bionic-amd64-ansible-base/obs-stg.list2
-rw-r--r--bionic-amd64-apache/Dockerfile9
-rwxr-xr-xbionic-amd64-apache/build.sh (renamed from fedora23-aarch64-openjdk/build.sh)2
-rw-r--r--bionic-amd64-art/Dockerfile55
-rwxr-xr-xbionic-amd64-art/build.sh21
-rw-r--r--bionic-amd64/Dockerfile (renamed from utopic-amd64/Dockerfile)57
-rwxr-xr-xbionic-amd64/build.sh21
-rw-r--r--bionic-arm64-armnn/Dockerfile21
-rwxr-xr-xbionic-arm64-armnn/build.sh21
-rw-r--r--bionic-arm64/Dockerfile69
-rwxr-xr-xbionic-arm64/build.sh21
-rw-r--r--bookworm-amd64/Dockerfile94
-rwxr-xr-xbookworm-amd64/build.sh (renamed from utopic-amd64/build.sh)9
l---------bookworm-arm64/build.sh1
-rw-r--r--bullseye-amd64-android-postprocess/Dockerfile24
-rwxr-xr-xbullseye-amd64-android-postprocess/build.sh7
-rw-r--r--bullseye-amd64-jenkins-master/Dockerfile42
-rwxr-xr-xbullseye-amd64-jenkins-master/build.sh (renamed from jessie-amd64-jenkins-master/build.sh)0
-rw-r--r--bullseye-amd64-jenkins-master/docker-compose.yml26
-rw-r--r--bullseye-amd64-jenkins-master/plugins.txt76
-rw-r--r--bullseye-amd64/Dockerfile91
-rwxr-xr-xbullseye-amd64/build.sh (renamed from xenial-arm64/build.sh)9
l---------bullseye-arm64/build.sh1
-rw-r--r--bullseye-arm64/dummy.txt0
-rw-r--r--bullseye-armhf/Dockerfile (renamed from jessie-armhf/Dockerfile)36
-rwxr-xr-xbullseye-armhf/build.sh (renamed from xenial-amd64-chromium/build.sh)9
-rw-r--r--buster-amd64-lkft/Dockerfile (renamed from jessie-arm64/Dockerfile)42
-rwxr-xr-xbuster-amd64-lkft/build.sh21
-rw-r--r--buster-amd64/Dockerfile99
-rwxr-xr-xbuster-amd64/build.sh27
l---------buster-arm64/build.sh1
-rw-r--r--buster-arm64/dummy.txt1
-rw-r--r--buster-armhf/Dockerfile (renamed from stretch-armhf/Dockerfile)28
-rwxr-xr-xbuster-armhf/build.sh27
-rw-r--r--centos7-aarch64-openjdk/Dockerfile32
-rw-r--r--centos7-aarch64/Dockerfile30
-rwxr-xr-xcentos7-aarch64/build.sh11
-rw-r--r--centos7-amd64/Dockerfile18
-rwxr-xr-xcentos7-amd64/build.sh18
-rw-r--r--centos7-arm64/Dockerfile18
-rwxr-xr-xcentos7-arm64/build.sh18
-rw-r--r--centos8-arm64/Dockerfile19
-rwxr-xr-xcentos8-arm64/build.sh18
-rw-r--r--ci-amd64-deployments/Dockerfile6
-rwxr-xr-xci-amd64-deployments/build.sh19
-rw-r--r--ci-amd64-deployments/requirements.txt2
-rw-r--r--ci-amd64-ledge/Dockerfile24
-rwxr-xr-xci-amd64-ledge/build.sh16
-rw-r--r--ci-amd64-llp-alpine/Dockerfile15
-rwxr-xr-xci-amd64-llp-alpine/build.sh2
-rwxr-xr-xci-amd64-llp-alpine/docker_run.sh17
-rwxr-xr-xci-amd64-llp-alpine/test_run.sh8
-rw-r--r--ci-amd64-serverless/Dockerfile17
-rw-r--r--ci-amd64-serverless/Pipfile24
-rw-r--r--ci-amd64-serverless/Pipfile.lock569
-rwxr-xr-xci-amd64-serverless/build.sh (renamed from trusty-amd64-art/build.sh)9
-rw-r--r--fedora23-aarch64-openjdk/Dockerfile30
-rw-r--r--fedora23-aarch64/Dockerfile17
-rwxr-xr-xfedora23-aarch64/build.sh11
-rw-r--r--focal-amd64-android-lava/Dockerfile60
-rwxr-xr-xfocal-amd64-android-lava/build.sh7
-rw-r--r--focal-amd64-tcwg-base/Dockerfile328
l---------focal-amd64-tcwg-base/build.sh (renamed from trusty-amd64-tcwg-base/build.sh)0
-rw-r--r--focal-amd64-tcwg-base/focal-amd64-tcwg-build/Dockerfile42
l---------focal-amd64-tcwg-base/focal-amd64-tcwg-build/build.sh (renamed from trusty-amd64-tcwg-base/trusty-amd64-tcwg-build/build.sh)0
-rw-r--r--focal-amd64-tcwg-base/focal-amd64-tcwg-dev/Dockerfile32
l---------focal-amd64-tcwg-base/focal-amd64-tcwg-dev/build.sh (renamed from trusty-amd64-tcwg-base/trusty-amd64-tcwg-dev/build.sh)0
-rw-r--r--focal-amd64-tcwg-base/focal-amd64-tcwg-dev/focal-amd64-tcwg-x2go/Dockerfile (renamed from xenial-amd64-tcwg-base/xenial-amd64-tcwg-dev/xenial-amd64-tcwg-x2go/Dockerfile)19
l---------focal-amd64-tcwg-base/focal-amd64-tcwg-dev/focal-amd64-tcwg-x2go/build.sh (renamed from xenial-amd64-tcwg-base/xenial-amd64-tcwg-dev/xenial-amd64-tcwg-x2go/build.sh)0
l---------focal-amd64-tcwg-base/focal-amd64-tcwg-dev/focal-amd64-tcwg-x2go/gerrit-branches (renamed from xenial-amd64-tcwg-base/xenial-amd64-tcwg-dev/xenial-amd64-tcwg-x2go/gerrit-branches)0
-rw-r--r--focal-amd64/Dockerfile (renamed from trusty-amd64-art/Dockerfile)70
-rwxr-xr-xfocal-amd64/build.sh21
-rw-r--r--focal-arm64-tcwg-base/Dockerfile309
l---------focal-arm64-tcwg-base/build.sh (renamed from trusty-arm64-tcwg-base/build.sh)0
-rw-r--r--focal-arm64-tcwg-base/focal-arm64-tcwg-build/Dockerfile32
l---------focal-arm64-tcwg-base/focal-arm64-tcwg-build/build.sh (renamed from trusty-arm64-tcwg-base/trusty-arm64-tcwg-build/build.sh)0
-rw-r--r--focal-arm64-tcwg-base/focal-arm64-tcwg-dev/Dockerfile32
l---------focal-arm64-tcwg-base/focal-arm64-tcwg-dev/build.sh (renamed from trusty-arm64-tcwg-base/trusty-arm64-tcwg-dev/build.sh)0
-rw-r--r--focal-arm64-tcwg-base/focal-arm64-tcwg-dev/focal-arm64-tcwg-x2go/Dockerfile33
l---------focal-arm64-tcwg-base/focal-arm64-tcwg-dev/focal-arm64-tcwg-x2go/build.sh1
l---------focal-arm64-tcwg-base/focal-arm64-tcwg-dev/focal-arm64-tcwg-x2go/gerrit-branches1
-rw-r--r--focal-arm64-tcwg-base/focal-arm64-tcwg-llvmbot/Dockerfile85
l---------focal-arm64-tcwg-base/focal-arm64-tcwg-llvmbot/build.sh (renamed from xenial-arm64-tcwg-base/xenial-arm64-tcwg-llvmbot/build.sh)0
-rw-r--r--focal-armhf-tcwg-base/Dockerfile315
l---------focal-armhf-tcwg-base/build.sh (renamed from trusty-armhf-tcwg-base/build.sh)0
-rw-r--r--focal-armhf-tcwg-base/focal-armhf-tcwg-build/Dockerfile32
l---------focal-armhf-tcwg-base/focal-armhf-tcwg-build/build.sh (renamed from trusty-armhf-tcwg-base/trusty-armhf-tcwg-build/build.sh)0
-rw-r--r--focal-armhf-tcwg-base/focal-armhf-tcwg-dev/Dockerfile32
l---------focal-armhf-tcwg-base/focal-armhf-tcwg-dev/build.sh (renamed from trusty-armhf-tcwg-base/trusty-armhf-tcwg-dev/build.sh)0
-rw-r--r--focal-armhf-tcwg-base/focal-armhf-tcwg-llvmbot/Dockerfile73
l---------focal-armhf-tcwg-base/focal-armhf-tcwg-llvmbot/build.sh (renamed from xenial-armhf-tcwg-base/xenial-armhf-tcwg-llvmbot/build.sh)0
-rw-r--r--jammy-amd64-tcwg-base/Dockerfile330
l---------jammy-amd64-tcwg-base/build.sh (renamed from trusty-i386-tcwg-base/build.sh)0
-rw-r--r--jammy-amd64-tcwg-base/jammy-amd64-tcwg-build/Dockerfile29
l---------jammy-amd64-tcwg-base/jammy-amd64-tcwg-build/build.sh (renamed from trusty-i386-tcwg-base/trusty-i386-tcwg-build/build.sh)0
-rw-r--r--jammy-amd64-tcwg-base/jammy-amd64-tcwg-dev/Dockerfile32
l---------jammy-amd64-tcwg-base/jammy-amd64-tcwg-dev/build.sh (renamed from xenial-amd64-tcwg-base/xenial-amd64-tcwg-dev/build.sh)0
-rw-r--r--jammy-amd64-tcwg-base/jammy-amd64-tcwg-dev/jammy-amd64-tcwg-x2go/Dockerfile33
l---------jammy-amd64-tcwg-base/jammy-amd64-tcwg-dev/jammy-amd64-tcwg-x2go/build.sh1
l---------jammy-amd64-tcwg-base/jammy-amd64-tcwg-dev/jammy-amd64-tcwg-x2go/gerrit-branches1
-rw-r--r--jammy-amd64-tcwg-base/jammy-amd64-tcwg-host/Dockerfile37
l---------jammy-amd64-tcwg-base/jammy-amd64-tcwg-host/build.sh1
-rw-r--r--jammy-amd64-tcwg-base/jammy-amd64-tcwg-lnt/Dockerfile12
l---------jammy-amd64-tcwg-base/jammy-amd64-tcwg-lnt/build.sh1
-rw-r--r--jammy-arm64-tcwg-base/Dockerfile311
l---------jammy-arm64-tcwg-base/build.sh (renamed from xenial-amd64-tcwg-base/build.sh)0
-rw-r--r--jammy-arm64-tcwg-base/jammy-arm64-tcwg-build/Dockerfile19
l---------jammy-arm64-tcwg-base/jammy-arm64-tcwg-build/build.sh (renamed from xenial-amd64-tcwg-base/xenial-amd64-tcwg-build/build.sh)0
-rw-r--r--jammy-arm64-tcwg-base/jammy-arm64-tcwg-dev/Dockerfile32
l---------jammy-arm64-tcwg-base/jammy-arm64-tcwg-dev/build.sh (renamed from xenial-arm64-tcwg-base/xenial-arm64-tcwg-dev/build.sh)0
-rw-r--r--jammy-arm64-tcwg-base/jammy-arm64-tcwg-dev/jammy-arm64-tcwg-x2go/Dockerfile33
l---------jammy-arm64-tcwg-base/jammy-arm64-tcwg-dev/jammy-arm64-tcwg-x2go/build.sh1
l---------jammy-arm64-tcwg-base/jammy-arm64-tcwg-dev/jammy-arm64-tcwg-x2go/gerrit-branches1
-rw-r--r--jammy-arm64-tcwg-base/jammy-arm64-tcwg-host/Dockerfile24
l---------jammy-arm64-tcwg-base/jammy-arm64-tcwg-host/build.sh1
-rw-r--r--jammy-arm64-tcwg-base/jammy-arm64-tcwg-llvmbot/Dockerfile85
l---------jammy-arm64-tcwg-base/jammy-arm64-tcwg-llvmbot/build.sh1
-rw-r--r--jammy-armhf-tcwg-base/Dockerfile321
l---------jammy-armhf-tcwg-base/build.sh (renamed from xenial-arm64-tcwg-base/build.sh)0
-rw-r--r--jammy-armhf-tcwg-base/jammy-armhf-tcwg-build/Dockerfile19
l---------jammy-armhf-tcwg-base/jammy-armhf-tcwg-build/build.sh (renamed from xenial-arm64-tcwg-base/xenial-arm64-tcwg-build/build.sh)0
-rw-r--r--jammy-armhf-tcwg-base/jammy-armhf-tcwg-dev/Dockerfile32
l---------jammy-armhf-tcwg-base/jammy-armhf-tcwg-dev/build.sh (renamed from xenial-armhf-tcwg-base/xenial-armhf-tcwg-dev/build.sh)0
-rw-r--r--jammy-armhf-tcwg-base/jammy-armhf-tcwg-host/Dockerfile24
l---------jammy-armhf-tcwg-base/jammy-armhf-tcwg-host/build.sh1
-rw-r--r--jammy-armhf-tcwg-base/jammy-armhf-tcwg-llvmbot/Dockerfile73
l---------jammy-armhf-tcwg-base/jammy-armhf-tcwg-llvmbot/build.sh1
-rw-r--r--jessie-amd64-jenkins-master/Dockerfile54
-rw-r--r--jessie-amd64-jenkins-master/plugins.txt69
-rwxr-xr-xjessie-amd64/build.sh23
-rwxr-xr-xjessie-arm64/build.sh23
-rwxr-xr-xjessie-armhf/build.sh23
-rw-r--r--jessie.list1
-rw-r--r--latest-amd64-tcwg-cimonitor/Dockerfile26
-rwxr-xr-xlatest-amd64-tcwg-cimonitor/build.sh23
-rw-r--r--latest-amd64-tcwg-llvmmonitor/Dockerfile5
-rw-r--r--latest-amd64-tcwg-llvmmonitor/gerrit-branches1
-rw-r--r--latest-arm64-tcwg-cmakeflangci/Dockerfile43
-rwxr-xr-xlatest-arm64-tcwg-cmakeflangci/build.sh23
-rw-r--r--latest-arm64-tcwg-cmakeflangci/flang_dashboard.cmake27
-rwxr-xr-xlava/dispatcher/build.sh44
-rwxr-xr-xlava/dispatcher/entrypoint.sh (renamed from lava/dispatcher/production/stretch-amd64/entrypoint.sh)18
-rw-r--r--lava/dispatcher/production/stretch-amd64/Dockerfile8
-rwxr-xr-xlava/dispatcher/production/stretch-amd64/build.sh19
-rw-r--r--lava/dispatcher/staging/stretch-amd64/Dockerfile46
-rw-r--r--linaro-overlay-buster.list2
-rw-r--r--reviewers.config3
-rw-r--r--stretch-amd64-lkft/Dockerfile (renamed from jessie-amd64/Dockerfile)38
-rwxr-xr-xstretch-amd64-lkft/build.sh21
-rw-r--r--stretch-amd64-obsworker/Dockerfile1
-rw-r--r--stretch-amd64-ota/Dockerfile19
-rwxr-xr-xstretch-amd64-ota/build.sh (renamed from stretch-armhf/build.sh)2
-rw-r--r--stretch-amd64/Dockerfile14
-rw-r--r--stretch-amd64/backports.list1
-rwxr-xr-xstretch-amd64/build.sh2
-rw-r--r--stretch-arm64-fai/Dockerfile2
-rw-r--r--stretch-arm64-obsworker/Dockerfile1
-rw-r--r--stretch-arm64-testdef/Dockerfile18
-rwxr-xr-xstretch-arm64-testdef/build.sh21
-rw-r--r--stretch-arm64/Dockerfile16
-rw-r--r--stretch-arm64/backports.list1
-rwxr-xr-xstretch-arm64/build.sh2
-rw-r--r--tcwg-base/Dockerfile.in409
-rwxr-xr-xtcwg-base/build-all.sh33
-rwxr-xr-xtcwg-base/build.sh30
-rwxr-xr-xtcwg-base/cpp-script.sh7
-rwxr-xr-xtcwg-base/generate-dockerfiles.sh12
-rw-r--r--tcwg-base/gerrit-branches2
-rw-r--r--tcwg-base/home-data/adhemerval.zanella/.screenrc86
-rw-r--r--tcwg-base/home-data/adhemerval.zanella/.ssh/authorized_keys1
-rw-r--r--tcwg-base/home-data/alex.bennee/.ssh/authorized_keys3
-rw-r--r--tcwg-base/home-data/alex.bennee/bootstrap.sh78
-rw-r--r--tcwg-base/home-data/anthony.roberts/.ssh/authorized_keys1
l---------tcwg-base/home-data/anthony.roberts/.ssh/config1
l---------tcwg-base/home-data/anthony.roberts/.ssh/config.d1
l---------tcwg-base/home-data/anthony.roberts/.ssh/known_hosts1
l---------tcwg-base/home-data/anthony.roberts/.ssh/ssh-tcwglab-nc.sh1
-rw-r--r--tcwg-base/home-data/antoine.moynault/.ssh/authorized_keys2
l---------tcwg-base/home-data/antoine.moynault/.ssh/config1
l---------tcwg-base/home-data/antoine.moynault/.ssh/config.d1
l---------tcwg-base/home-data/antoine.moynault/.ssh/known_hosts1
l---------tcwg-base/home-data/antoine.moynault/.ssh/ssh-tcwglab-nc.sh1
-rw-r--r--tcwg-base/home-data/carlos.seo/.screenrc4
-rw-r--r--tcwg-base/home-data/carlos.seo/.ssh/authorized_keys2
l---------tcwg-base/home-data/carlos.seo/.ssh/config1
l---------tcwg-base/home-data/carlos.seo/.ssh/config.d1
l---------tcwg-base/home-data/carlos.seo/.ssh/known_hosts1
l---------tcwg-base/home-data/carlos.seo/.ssh/ssh-tcwglab-nc.sh1
-rw-r--r--tcwg-base/home-data/carlos.seo/.vimrc18
-rw-r--r--tcwg-base/home-data/christophe.lyon/.gitconfig18
-rw-r--r--tcwg-base/home-data/christophe.lyon/.ssh/authorized_keys1
l---------tcwg-base/home-data/christophe.lyon/.ssh/config1
l---------tcwg-base/home-data/christophe.lyon/.ssh/config.d1
l---------tcwg-base/home-data/christophe.lyon/.ssh/known_hosts1
l---------tcwg-base/home-data/christophe.lyon/.ssh/ssh-tcwglab-nc.sh1
-rw-r--r--tcwg-base/home-data/david.spickett/.ssh/authorized_keys2
-rw-r--r--tcwg-base/home-data/david.spickett/.vimrc10
-rw-r--r--tcwg-base/home-data/everton.constantino/.ssh/authorized_keys1
l---------tcwg-base/home-data/everton.constantino/.ssh/config1
l---------tcwg-base/home-data/everton.constantino/.ssh/config.d1
l---------tcwg-base/home-data/everton.constantino/.ssh/known_hosts1
l---------tcwg-base/home-data/everton.constantino/.ssh/ssh-tcwglab-nc.sh1
-rw-r--r--tcwg-base/home-data/group10
-rw-r--r--tcwg-base/home-data/laurent.alfonsi/.ssh/authorized_keys1
l---------tcwg-base/home-data/laurent.alfonsi/.ssh/config1
l---------tcwg-base/home-data/laurent.alfonsi/.ssh/config.d1
l---------tcwg-base/home-data/laurent.alfonsi/.ssh/known_hosts1
l---------tcwg-base/home-data/laurent.alfonsi/.ssh/ssh-tcwglab-nc.sh1
-rw-r--r--tcwg-base/home-data/leandro.lupori/.ssh/authorized_keys2
l---------tcwg-base/home-data/leandro.lupori/.ssh/config1
l---------tcwg-base/home-data/leandro.lupori/.ssh/config.d1
l---------tcwg-base/home-data/leandro.lupori/.ssh/known_hosts1
l---------tcwg-base/home-data/leandro.lupori/.ssh/ssh-tcwglab-nc.sh1
-rw-r--r--tcwg-base/home-data/lina.iyer/.ssh/authorized_keys1
l---------tcwg-base/home-data/lina.iyer/.ssh/config1
l---------tcwg-base/home-data/lina.iyer/.ssh/config.d1
l---------tcwg-base/home-data/lina.iyer/.ssh/known_hosts1
l---------tcwg-base/home-data/lina.iyer/.ssh/ssh-tcwglab-nc-sh1
-rw-r--r--tcwg-base/home-data/maxim.kuvyrkov/.bashrc122
-rw-r--r--tcwg-base/home-data/maxim.kuvyrkov/.emacs110
-rw-r--r--tcwg-base/home-data/maxim.kuvyrkov/.gitconfig23
-rw-r--r--tcwg-base/home-data/maxim.kuvyrkov/.profile22
-rw-r--r--tcwg-base/home-data/maxim.kuvyrkov/.ssh/authorized_keys1
l---------tcwg-base/home-data/maxim.kuvyrkov/.ssh/config1
l---------tcwg-base/home-data/maxim.kuvyrkov/.ssh/config.d1
l---------tcwg-base/home-data/maxim.kuvyrkov/.ssh/known_hosts1
l---------tcwg-base/home-data/maxim.kuvyrkov/.ssh/ssh-tcwglab-nc.sh1
-rw-r--r--tcwg-base/home-data/maxim.kuvyrkov/share/emacs/site-lisp/yaml-mode.el439
-rw-r--r--tcwg-base/home-data/maxim.kuvyrkov/share/emacs/site-lisp/yaml-mode.elcbin0 -> 13479 bytes
-rw-r--r--tcwg-base/home-data/omair.javaid/.ssh/authorized_keys2
-rw-r--r--tcwg-base/home-data/passwd21
-rw-r--r--tcwg-base/home-data/pierrick.bouvier/.ssh/authorized_keys1
l---------tcwg-base/home-data/pierrick.bouvier/.ssh/config1
l---------tcwg-base/home-data/pierrick.bouvier/.ssh/config.d1
l---------tcwg-base/home-data/pierrick.bouvier/.ssh/known_hosts1
l---------tcwg-base/home-data/pierrick.bouvier/.ssh/ssh-tcwglab-nc-sh1
-rw-r--r--tcwg-base/home-data/richard.henderson/.gitconfig7
-rw-r--r--tcwg-base/home-data/richard.henderson/.ssh/authorized_keys1
-rw-r--r--tcwg-base/home-data/tcwg-benchmark/.gitconfig (renamed from tcwg-base/tcwg-build/tcwg-benchmark/.gitconfig)0
-rw-r--r--tcwg-base/home-data/tcwg-benchmark/.ssh/authorized_keys (renamed from tcwg-base/tcwg-build/tcwg-benchmark/.ssh/authorized_keys)1
l---------tcwg-base/home-data/tcwg-benchmark/.ssh/config1
l---------tcwg-base/home-data/tcwg-benchmark/.ssh/config.d1
l---------tcwg-base/home-data/tcwg-benchmark/.ssh/known_hosts1
l---------tcwg-base/home-data/tcwg-benchmark/.ssh/ssh-tcwglab-nc.sh1
-rw-r--r--tcwg-base/home-data/tcwg-build/.gitconfig3
-rw-r--r--tcwg-base/home-data/tcwg-build/.ssh/authorized_keys1
-rw-r--r--tcwg-base/home-data/tcwg-build/README65
-rw-r--r--tcwg-base/home-data/tcwg-buildbot/.ssh/.keep0
-rw-r--r--tcwg-base/home-data/tcwg-buildslave/.gitconfig (renamed from tcwg-base/tcwg-build/tcwg-buildslave/.gitconfig)0
-rw-r--r--tcwg-base/home-data/tcwg-buildslave/.jipdate.yml5
-rw-r--r--tcwg-base/home-data/tcwg-buildslave/.mailrc (renamed from tcwg-base/tcwg-build/tcwg-buildslave/.mailrc)0
-rw-r--r--tcwg-base/home-data/tcwg-buildslave/.ssh/authorized_keys (renamed from tcwg-base/tcwg-build/tcwg-buildslave/.ssh/authorized_keys)1
-rw-r--r--tcwg-base/home-data/tcwg-buildslave/.ssh/config2
-rw-r--r--tcwg-base/home-data/tcwg-buildslave/.ssh/config.d/01-tcwg.conf269
-rw-r--r--tcwg-base/home-data/tcwg-buildslave/.ssh/known_hosts96
-rwxr-xr-xtcwg-base/home-data/tcwg-buildslave/.ssh/known_hosts-regen.sh78
-rwxr-xr-xtcwg-base/home-data/tcwg-buildslave/.ssh/ssh-tcwglab-nc.sh9
-rw-r--r--tcwg-base/home-data/tcwg-ci-bot/.ssh/authorized_keys1
-rw-r--r--tcwg-base/home-data/thiago.bauermann/.ssh/authorized_keys1
l---------tcwg-base/home-data/thiago.bauermann/.ssh/config1
l---------tcwg-base/home-data/thiago.bauermann/.ssh/config.d1
l---------tcwg-base/home-data/thiago.bauermann/.ssh/known_hosts1
l---------tcwg-base/home-data/thiago.bauermann/.ssh/ssh-tcwglab-nc.sh1
-rwxr-xr-xtcwg-base/install-armhf-perf-workaround.sh21
-rwxr-xr-xtcwg-base/install-gcc-latest.sh14
-rwxr-xr-xtcwg-base/new-user.sh129
-rwxr-xr-xtcwg-base/nvidia-power-cycle.sh67
-rwxr-xr-xtcwg-base/nvidia-serial.sh47
-rw-r--r--tcwg-base/postfix-main.cf.in50
-rw-r--r--tcwg-base/postfix-sasl_password.in1
-rw-r--r--tcwg-base/tcwg-build/Dockerfile.in60
-rwxr-xr-xtcwg-base/tcwg-build/build.sh12
l---------tcwg-base/tcwg-build/gerrit-branches1
-rw-r--r--tcwg-base/tcwg-build/tcwg-benchmark/.ssh/config60
-rw-r--r--tcwg-base/tcwg-build/tcwg-benchmark/.ssh/known_hosts30
-rw-r--r--tcwg-base/tcwg-build/tcwg-buildslave/.ssh/config60
-rw-r--r--tcwg-base/tcwg-build/tcwg-buildslave/.ssh/known_hosts30
-rw-r--r--tcwg-base/tcwg-build/tcwg-test/Dockerfile.in7
l---------tcwg-base/tcwg-build/tcwg-test/build.sh1
l---------tcwg-base/tcwg-build/tcwg-test/gerrit-branches1
-rw-r--r--tcwg-base/tcwg-dev/Dockerfile.in43
-rwxr-xr-xtcwg-base/tcwg-dev/build.sh13
l---------tcwg-base/tcwg-dev/gerrit-branches1
-rwxr-xr-xtcwg-base/tcwg-dev/run.sh17
-rwxr-xr-xtcwg-base/tcwg-dev/run.sh.tmpl35
-rwxr-xr-xtcwg-base/tcwg-dev/start.sh122
-rwxr-xr-xtcwg-base/tcwg-dev/start.sh.tmpl42
-rw-r--r--tcwg-base/tcwg-dev/tcwg-x2go/Dockerfile.in10
-rwxr-xr-x[l---------]tcwg-base/tcwg-dev/tcwg-x2go/build.sh21
-rw-r--r--[l---------]tcwg-base/tcwg-dev/tcwg-x2go/gerrit-branches1
-rw-r--r--tcwg-base/tcwg-host/Dockerfile.in48
-rwxr-xr-xtcwg-base/tcwg-host/build.sh33
-rwxr-xr-xtcwg-base/tcwg-host/docker-stats3
-rwxr-xr-xtcwg-base/tcwg-host/docker-wrapper97
-rwxr-xr-xtcwg-base/tcwg-host/qc-reboot.sh35
-rwxr-xr-xtcwg-base/tcwg-host/run.sh159
-rwxr-xr-xtcwg-base/tcwg-host/run_on_bare_machine10
-rwxr-xr-xtcwg-base/tcwg-host/start.sh186
-rwxr-xr-xtcwg-base/tcwg-host/tcwg-build.sh24
-rw-r--r--tcwg-base/tcwg-llvmbot/Dockerfile.in94
-rwxr-xr-xtcwg-base/tcwg-llvmbot/build.sh23
-rw-r--r--tcwg-base/tcwg-llvmbot/gerrit-branches3
-rwxr-xr-xtcwg-base/tcwg-llvmbot/run.sh252
-rwxr-xr-xtcwg-base/tcwg-llvmbot/start.sh254
-rw-r--r--tcwg-base/tcwg-lnt/Dockerfile.in14
-rwxr-xr-xtcwg-base/tcwg-lnt/build.sh31
-rwxr-xr-xtcwg-base/tcwg-lnt/lnt.sh6
-rwxr-xr-xtcwg-base/tcwg-lnt/run.sh20
-rwxr-xr-xtcwg-base/tcwg-lnt/start.sh54
-rwxr-xr-xtcwg-base/tio-power-cycle.exp51
-rwxr-xr-xtcwg-base/validate-checksum.sh45
-rwxr-xr-xtcwg-base/validate-dockerfile.sh24
-rw-r--r--tensorflow-arm64-build/.gitignore1
-rw-r--r--tensorflow-arm64-build/Dockerfile70
-rw-r--r--tensorflow-arm64-build/apt.conf1
-rwxr-xr-xtensorflow-arm64-build/build.sh15
-rwxr-xr-xtensorflow-arm64-build/builder.devtoolset/build_devtoolset.sh157
-rwxr-xr-xtensorflow-arm64-build/builder.devtoolset/fixlinks_aarch64.sh28
-rw-r--r--tensorflow-arm64-build/builder.devtoolset/gcc9-fixups.patch270
-rwxr-xr-xtensorflow-arm64-build/builder.devtoolset/rpm-patch.sh28
-rw-r--r--tensorflow-arm64-build/builder.devtoolset/stringop_trunc.patch1204
-rw-r--r--tensorflow-arm64-build/builder.packages.txt35
-rwxr-xr-xtensorflow-arm64-build/builder.patchelf/build_patchelf.sh14
-rw-r--r--tensorflow-arm64-build/devel.bashrc26
-rw-r--r--tensorflow-arm64-build/devel.packages.txt44
-rw-r--r--tensorflow-arm64-build/devel.requirements.txt5
-rw-r--r--tensorflow-arm64-build/devel.usertools/aarch64.bazelrc86
-rw-r--r--tensorflow-arm64-build/devel.usertools/aarch64_clang.bazelrc100
-rw-r--r--tensorflow-arm64-build/devel.usertools/code_check_changed_files.bats76
-rw-r--r--tensorflow-arm64-build/devel.usertools/code_check_full.bats307
-rwxr-xr-xtensorflow-arm64-build/devel.usertools/get_test_list.sh24
-rwxr-xr-xtensorflow-arm64-build/devel.usertools/rename_and_verify_wheels.sh19
-rwxr-xr-xtensorflow-arm64-build/devel.usertools/repack_libtensorflow.sh64
-rwxr-xr-xtensorflow-arm64-build/devel.usertools/setup_venv_test.sh35
-rwxr-xr-xtensorflow-arm64-build/devel.usertools/squash_testlogs.py116
-rw-r--r--tensorflow-arm64-build/devel.usertools/test.requirements.txt6
-rw-r--r--tensorflow-arm64-build/devel.usertools/wheel_verification.bats73
-rw-r--r--tensorflow-arm64-build/ld.so.conf1
-rwxr-xr-xtensorflow-arm64-build/setup.packages.sh28
-rwxr-xr-xtensorflow-arm64-build/setup.python.sh60
-rwxr-xr-xtensorflow-arm64-build/setup.sources.sh45
-rw-r--r--trusty-amd64-tcwg-base/Dockerfile130
l---------trusty-amd64-tcwg-base/gerrit-branches1
-rw-r--r--trusty-amd64-tcwg-base/trusty-amd64-tcwg-build/Dockerfile18
l---------trusty-amd64-tcwg-base/trusty-amd64-tcwg-build/gerrit-branches1
-rw-r--r--trusty-amd64-tcwg-base/trusty-amd64-tcwg-dev/Dockerfile49
l---------trusty-amd64-tcwg-base/trusty-amd64-tcwg-dev/gerrit-branches1
-rw-r--r--trusty-arm64-tcwg-base/Dockerfile111
l---------trusty-arm64-tcwg-base/gerrit-branches1
-rw-r--r--trusty-arm64-tcwg-base/trusty-arm64-tcwg-build/Dockerfile18
l---------trusty-arm64-tcwg-base/trusty-arm64-tcwg-build/gerrit-branches1
-rw-r--r--trusty-arm64-tcwg-base/trusty-arm64-tcwg-build/trusty-arm64-tcwg-test/Dockerfile9
l---------trusty-arm64-tcwg-base/trusty-arm64-tcwg-build/trusty-arm64-tcwg-test/build.sh1
l---------trusty-arm64-tcwg-base/trusty-arm64-tcwg-build/trusty-arm64-tcwg-test/gerrit-branches1
-rw-r--r--trusty-arm64-tcwg-base/trusty-arm64-tcwg-dev/Dockerfile48
l---------trusty-arm64-tcwg-base/trusty-arm64-tcwg-dev/gerrit-branches1
-rw-r--r--trusty-armhf-tcwg-base/Dockerfile111
l---------trusty-armhf-tcwg-base/gerrit-branches1
-rw-r--r--trusty-armhf-tcwg-base/trusty-armhf-tcwg-build/Dockerfile18
l---------trusty-armhf-tcwg-base/trusty-armhf-tcwg-build/gerrit-branches1
-rw-r--r--trusty-armhf-tcwg-base/trusty-armhf-tcwg-build/trusty-armhf-tcwg-test/Dockerfile9
l---------trusty-armhf-tcwg-base/trusty-armhf-tcwg-build/trusty-armhf-tcwg-test/build.sh1
l---------trusty-armhf-tcwg-base/trusty-armhf-tcwg-build/trusty-armhf-tcwg-test/gerrit-branches1
-rw-r--r--trusty-armhf-tcwg-base/trusty-armhf-tcwg-dev/Dockerfile49
l---------trusty-armhf-tcwg-base/trusty-armhf-tcwg-dev/gerrit-branches1
-rw-r--r--trusty-i386-tcwg-base/Dockerfile130
l---------trusty-i386-tcwg-base/gerrit-branches1
-rw-r--r--trusty-i386-tcwg-base/trusty-i386-tcwg-build/Dockerfile18
l---------trusty-i386-tcwg-base/trusty-i386-tcwg-build/gerrit-branches1
-rw-r--r--utopic-amd64-art/Dockerfile8
-rwxr-xr-xutopic-amd64-art/build.sh2
-rw-r--r--xenial-amd64-chromium/Dockerfile60
-rw-r--r--xenial-amd64-tcwg-base/Dockerfile129
l---------xenial-amd64-tcwg-base/gerrit-branches1
-rw-r--r--xenial-amd64-tcwg-base/xenial-amd64-tcwg-build/Dockerfile18
l---------xenial-amd64-tcwg-base/xenial-amd64-tcwg-build/gerrit-branches1
-rw-r--r--xenial-amd64-tcwg-base/xenial-amd64-tcwg-dev/Dockerfile49
l---------xenial-amd64-tcwg-base/xenial-amd64-tcwg-dev/gerrit-branches1
-rw-r--r--xenial-amd64/Dockerfile5
-rwxr-xr-xxenial-amd64/build.sh2
-rw-r--r--xenial-arm64-gitlab/Dockerfile95
-rwxr-xr-xxenial-arm64-gitlab/build.sh8
-rw-r--r--xenial-arm64-tcwg-base/Dockerfile112
l---------xenial-arm64-tcwg-base/gerrit-branches1
-rw-r--r--xenial-arm64-tcwg-base/xenial-arm64-tcwg-build/Dockerfile18
l---------xenial-arm64-tcwg-base/xenial-arm64-tcwg-build/gerrit-branches1
-rw-r--r--xenial-arm64-tcwg-base/xenial-arm64-tcwg-build/xenial-arm64-tcwg-test/Dockerfile9
l---------xenial-arm64-tcwg-base/xenial-arm64-tcwg-build/xenial-arm64-tcwg-test/build.sh1
l---------xenial-arm64-tcwg-base/xenial-arm64-tcwg-build/xenial-arm64-tcwg-test/gerrit-branches1
-rw-r--r--xenial-arm64-tcwg-base/xenial-arm64-tcwg-dev/Dockerfile49
l---------xenial-arm64-tcwg-base/xenial-arm64-tcwg-dev/gerrit-branches1
-rw-r--r--xenial-arm64-tcwg-base/xenial-arm64-tcwg-llvmbot/Dockerfile48
l---------xenial-arm64-tcwg-base/xenial-arm64-tcwg-llvmbot/gerrit-branches1
-rw-r--r--xenial-arm64/Dockerfile65
-rw-r--r--xenial-armhf-tcwg-base/Dockerfile112
l---------xenial-armhf-tcwg-base/build.sh1
l---------xenial-armhf-tcwg-base/gerrit-branches1
-rw-r--r--xenial-armhf-tcwg-base/xenial-armhf-tcwg-build/Dockerfile18
l---------xenial-armhf-tcwg-base/xenial-armhf-tcwg-build/build.sh1
l---------xenial-armhf-tcwg-base/xenial-armhf-tcwg-build/gerrit-branches1
-rw-r--r--xenial-armhf-tcwg-base/xenial-armhf-tcwg-build/xenial-armhf-tcwg-test/Dockerfile9
l---------xenial-armhf-tcwg-base/xenial-armhf-tcwg-build/xenial-armhf-tcwg-test/build.sh1
l---------xenial-armhf-tcwg-base/xenial-armhf-tcwg-build/xenial-armhf-tcwg-test/gerrit-branches1
-rw-r--r--xenial-armhf-tcwg-base/xenial-armhf-tcwg-dev/Dockerfile49
l---------xenial-armhf-tcwg-base/xenial-armhf-tcwg-dev/gerrit-branches1
-rw-r--r--xenial-armhf-tcwg-base/xenial-armhf-tcwg-llvmbot/Dockerfile48
l---------xenial-armhf-tcwg-base/xenial-armhf-tcwg-llvmbot/gerrit-branches1
-rw-r--r--xenial-armhf/Dockerfile1
-rwxr-xr-xxenial-armhf/build.sh2
-rw-r--r--xenial-i386-tcwg-base/Dockerfile130
l---------xenial-i386-tcwg-base/build.sh1
l---------xenial-i386-tcwg-base/gerrit-branches1
-rw-r--r--xenial-i386-tcwg-base/xenial-i386-tcwg-build/Dockerfile18
l---------xenial-i386-tcwg-base/xenial-i386-tcwg-build/build.sh1
l---------xenial-i386-tcwg-base/xenial-i386-tcwg-build/gerrit-branches1
-rw-r--r--xenial-i386-tcwg-base/xenial-i386-tcwg-dev/Dockerfile49
l---------xenial-i386-tcwg-base/xenial-i386-tcwg-dev/build.sh1
l---------xenial-i386-tcwg-base/xenial-i386-tcwg-dev/gerrit-branches1
426 files changed, 12152 insertions, 2929 deletions
diff --git a/README b/README
index e1e5a6b7..ba2119c5 100644
--- a/README
+++ b/README
@@ -9,6 +9,38 @@ Contributing
If you want to contribute changes, you can send Gerrit merge requests at
https://review.linaro.org/#/q/project:ci/dockerfiles
+TCWG images
+-----------
+
+Docker images used by the TCWG team are generated slightly differently
+from the other ones. The source files describing the images contents
+are stored under tcwg-base, in nested directories where nesting shows
+images dependencies. For instance, tcwg-build type of images depend on
+tcwg-base.
+
+If you want to (re)build locally a TCWG image after updating its
+Dockerfile.in or its build.sh, go to the directory whose name fully
+describes the image. For instance
+xenial-arm64-tcwg-base/xenial-arm64-tcwg-build, and run ./build.sh
+from there to rebuild the xenial-arm64-tcwg-build image.
+
+TCWG's Dockerfiles in DISTRO-ARCH-tcwg-base/* directories are generated
+from Dockerfile.in templates in respective tcwg-base/* directories. Run
+tcwg-base/generate-dockerfiles.sh (without parameters) whenever you
+change any of Dockerfile.in templates -- this will update all affected
+Dockerfiles.
+
+Once Dockerfiles are regenerated, you should test your change locally
+by building the image. For this go to image's directory and run
+"./build.sh". "./build.sh" script uses name of current directory to
+determine distro version and other parameters, so it's important
+to run "./build.sh" from its own directory.
+
+Note that "./build.sh" will first re-build all images that current image
+is derived from. E.g., *-tcwg-dev image will first re-build respective
+*-tcwg-base image -- this can take a lot of time for the first run,
+but, once cache is populated, re-builds are very quick.
+
Maintainer(s)
-------------
diff --git a/autoware-ros-builder/Dockerfile b/autoware-ros-builder/Dockerfile
new file mode 100644
index 00000000..706e85e8
--- /dev/null
+++ b/autoware-ros-builder/Dockerfile
@@ -0,0 +1,133 @@
+FROM ubuntu:xenial
+
+ENV DEBIAN_FRONTEND=noninteractive
+
+ENV BASE_DEPS="\
+ build-essential \
+ curl \
+ python-catkin-pkg \
+ python-rosdep \
+ python-wstool \
+ python3-colcon-common-extensions \
+ ros-kinetic-catkin \
+"
+
+ENV ROSDEP_DEPS="\
+ freeglut3-dev \
+ gstreamer0.10-plugins-good \
+ libarmadillo-dev \
+ libcurl4-openssl-dev \
+ libeigen3-dev \
+ libgflags-dev \
+ libgl1-mesa-dev \
+ libglew-dev \
+ libglu1-mesa-dev \
+ libgoogle-glog-dev \
+ libnlopt-dev \
+ libopencv-dev \
+ libpcap0.8-dev \
+ libpcl-dev \
+ libqt5opengl5-dev \
+ libtinyxml-dev \
+ libx11-dev \
+ libxi-dev \
+ libxml2-dev \
+ libxmu-dev \
+ libyaml-cpp-dev \
+ python-flask \
+ python-serial \
+ qtbase5-dev \
+ ros-kinetic-angles \
+ ros-kinetic-automotive-platform-msgs \
+ ros-kinetic-camera-info-manager \
+ ros-kinetic-cmake-modules \
+ ros-kinetic-cv-bridge \
+ ros-kinetic-diagnostic-aggregator \
+ ros-kinetic-diagnostic-msgs \
+ ros-kinetic-diagnostic-updater \
+ ros-kinetic-dynamic-reconfigure \
+ ros-kinetic-eigen-conversions \
+ ros-kinetic-geometry-msgs \
+ ros-kinetic-gps-common \
+ ros-kinetic-grid-map-cv \
+ ros-kinetic-grid-map-msgs \
+ ros-kinetic-grid-map-ros \
+ ros-kinetic-grid-map-visualization \
+ ros-kinetic-gscam \
+ ros-kinetic-image-geometry \
+ ros-kinetic-image-transport \
+ ros-kinetic-imu-filter-madgwick \
+ ros-kinetic-imu-tools \
+ ros-kinetic-jsk-recognition-msgs \
+ ros-kinetic-jsk-recognition-utils \
+ ros-kinetic-jsk-rviz-plugins \
+ ros-kinetic-jsk-topic-tools \
+ ros-kinetic-message-filters \
+ ros-kinetic-message-generation \
+ ros-kinetic-message-runtime \
+ ros-kinetic-nav-msgs \
+ ros-kinetic-nlopt \
+ ros-kinetic-nmea-msgs \
+ ros-kinetic-nodelet \
+ ros-kinetic-pcl-conversions \
+ ros-kinetic-pcl-msgs \
+ ros-kinetic-pcl-ros \
+ ros-kinetic-pluginlib \
+ ros-kinetic-robot-state-publisher \
+ ros-kinetic-rosbag \
+ ros-kinetic-rosbridge-server \
+ ros-kinetic-rosconsole \
+ ros-kinetic-roscpp \
+ ros-kinetic-roslaunch \
+ ros-kinetic-roslib \
+ ros-kinetic-roslint \
+ ros-kinetic-rospy \
+ ros-kinetic-rostest \
+ ros-kinetic-rosunit \
+ ros-kinetic-rqt-plot \
+ ros-kinetic-rviz \
+ ros-kinetic-sensor-msgs \
+ ros-kinetic-sound-play \
+ ros-kinetic-std-msgs \
+ ros-kinetic-std-srvs \
+ ros-kinetic-stereo-msgs \
+ ros-kinetic-tf \
+ ros-kinetic-tf-conversions \
+ ros-kinetic-tf2 \
+ ros-kinetic-tf2-geometry-msgs \
+ ros-kinetic-tf2-ros \
+ ros-kinetic-visualization-msgs \
+ ros-kinetic-xacro \
+ v4l-utils \
+"
+
+ENV JENKINS_DEPS="\
+ default-jdk-headless \
+ openssh-server \
+ sudo \
+"
+
+RUN echo "deb http://packages.ros.org/ros/ubuntu xenial main" > /etc/apt/sources.list.d/ros-latest.list ;\
+ apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116 ;\
+ apt update -q=2 ;\
+ apt upgrade -q=2 ;\
+ apt install -q=2 -y --no-install-recommends ${BASE_DEPS} ${ROSDEP_DEPS} ${JENKINS_DEPS};\
+ # Install setuptools from PyPI. The version shipped in Ubuntu is too old.
+ curl -sLS https://bootstrap.pypa.io/get-pip.py -o /tmp/get-pip.py ;\
+ python3 /tmp/get-pip.py ;\
+ pip install --upgrade --no-cache-dir setuptools==40.8.0 ;\
+ # Install lcov from source.
+ git clone https://github.com/linux-test-project/lcov.git /tmp/lcov-1.14 ;\
+ cd /tmp/lcov-1.14 && git checkout v1.14 && make install ;\
+ # Setup buildslave user for Jenkins
+ useradd -m buildslave ;\
+ echo 'buildslave ALL = NOPASSWD: ALL' > /etc/sudoers.d/jenkins ;\
+ chmod 0440 /etc/sudoers.d/jenkins ;\
+ mkdir -p /var/run/sshd /home/buildslave/bin ;\
+ # Cleanup
+ apt clean ;\
+ rm -rf /var/lib/apt/lists/* /tmp/get-pip.py /tmp/lcov-1.14
+
+EXPOSE 22
+COPY entrypoint.sh /root/
+ENTRYPOINT ["/root/entrypoint.sh"]
diff --git a/centos7-aarch64-openjdk/build.sh b/autoware-ros-builder/build.sh
index 15e8f8a0..04f6cd0f 100755
--- a/centos7-aarch64-openjdk/build.sh
+++ b/autoware-ros-builder/build.sh
@@ -4,6 +4,6 @@ set -e
export LANG=C
-image=linaro/$(basename ${PWD})
+image=linaro/ci-ros-builder:kinetic
docker build --pull --tag=$image .
echo $image > .docker-tag
diff --git a/autoware-ros-builder/entrypoint.sh b/autoware-ros-builder/entrypoint.sh
new file mode 100755
index 00000000..b0849ca0
--- /dev/null
+++ b/autoware-ros-builder/entrypoint.sh
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+set -e
+
+export HOME=/home/buildslave
+
+[ -z "${JENKINS_SLAVE_SSH_PUBKEY}" ] || {
+ mkdir ${HOME}/.ssh
+ echo "${JENKINS_SLAVE_SSH_PUBKEY}" > ${HOME}/.ssh/authorized_keys
+ chown -R buildslave:buildslave ${HOME}/.ssh
+ chmod 0700 -R ${HOME}/.ssh
+}
+
+. /opt/ros/kinetic/setup.sh
+env | grep ROS_ >> /etc/environment
+env | grep PATH >> /etc/environment
+
+ssh-keygen -A
+exec /usr/sbin/sshd -D -e
diff --git a/bionic-amd64-android-lava/Dockerfile b/bionic-amd64-android-lava/Dockerfile
new file mode 100644
index 00000000..2a442c83
--- /dev/null
+++ b/bionic-amd64-android-lava/Dockerfile
@@ -0,0 +1,60 @@
+# Use the official image as a parent image.
+FROM ubuntu:18.04
+
+# Set the working directory.
+WORKDIR /linaro-android
+
+RUN apt-get update \
+ && apt-get install -y \
+ aapt \
+ apt-utils \
+ coreutils \
+ curl \
+ git \
+ lib32gcc1 \
+ lib32z1-dev \
+ libc6-dev-i386 \
+ libcurl4 \
+ openjdk-8-jdk-headless \
+ openjdk-11-jdk-headless \
+ protobuf-compiler \
+ psmisc \
+ python-dev \
+ python-lxml \
+ python-pexpect \
+ python-pexpect \
+ python-pip \
+ python-protobuf \
+ python-setuptools \
+ python-virtualenv \
+ sudo \
+ tar \
+ unzip \
+ usbutils \
+ wget \
+ xz-utils \
+ zip \
+ && apt-get clean \
+ && rm -rf \
+ /etc/apt/sources.list.d/*.key \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+
+# https://developer.android.com/studio/releases/platform-tools
+RUN curl -SL https://dl.google.com/android/repository/platform-tools_r28.0.0-linux.zip -o platform-tools_r28.0.0-linux.zip \
+ && unzip platform-tools_r28.0.0-linux.zip \
+ && rm -f /usr/bin/fastboot /usr/bin/adb \
+ && ln -s /linaro-android/platform-tools/fastboot /usr/bin/fastboot \
+ && ln -s /linaro-android/platform-tools/adb /usr/bin/adb \
+ && rm -f platform-tools_r28.0.0-linux.zip
+
+# According to the document here:
+# https://developer.android.com/studio/command-line/aapt2#download_aapt2
+# And here is the page link:
+# https://maven.google.com/web/index.html#com.android.tools.build:aapt2:8.1.0-alpha10-9603961
+RUN curl -SL "https://dl.google.com/android/maven2/com/android/tools/build/aapt2/8.1.0-alpha10-9603961/aapt2-8.1.0-alpha10-9603961-linux.jar" -o aapt2-8.1.0-alpha10-9603961-linux.jar \
+ && unzip aapt2-8.1.0-alpha10-9603961-linux.jar aapt2 \
+ && rm -f /usr/bin/aapt2 \
+ && ln -s /linaro-android/aapt2 /usr/bin/aapt2 \
+ && rm -f aapt2-8.1.0-alpha10-9603961-linux.jar
diff --git a/bionic-amd64-android-lava/build.sh b/bionic-amd64-android-lava/build.sh
new file mode 100755
index 00000000..cc2a6a3c
--- /dev/null
+++ b/bionic-amd64-android-lava/build.sh
@@ -0,0 +1,5 @@
+#!/bin/bash -ex
+
+image=linaro/lava-android-test:latest
+docker build --pull --tag ${image} -f Dockerfile .
+echo $image > .docker-tag
diff --git a/bionic-amd64-ansible-base/Dockerfile b/bionic-amd64-ansible-base/Dockerfile
new file mode 100644
index 00000000..3cc18c77
--- /dev/null
+++ b/bionic-amd64-ansible-base/Dockerfile
@@ -0,0 +1,19 @@
+# Install and sets up ansible image ready for docker use
+
+FROM ubuntu:18.04
+
+LABEL maintainer="Linaro Systems Team <systems@linaro.org>"
+
+ENV DEBIAN_FRONTEND=noninteractive
+
+RUN apt-get update && apt-get install -y --no-install-recommends gnupg software-properties-common
+COPY *.list *.key /etc/apt/sources.list.d/
+
+RUN apt-key add /etc/apt/sources.list.d/*.key \
+ && apt-add-repository -y ppa:ansible/ansible \
+ && apt-get update \
+ && apt-get install -y ansible vim bash openssh-server python-apt sudo cron
+
+RUN rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
+
+CMD /bin/sleep infinity
diff --git a/bionic-amd64-ansible-base/build.sh b/bionic-amd64-ansible-base/build.sh
new file mode 100755
index 00000000..272a8ac8
--- /dev/null
+++ b/bionic-amd64-ansible-base/build.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+set -e
+
+trap cleanup_exit INT TERM EXIT
+
+cleanup_exit()
+{
+ rm -f *.key
+}
+
+export LANG=C
+
+DISTRIBUTION=$(basename ${PWD} | cut -f1 -d '-')
+ARCHITECTURE=$(basename ${PWD} | cut -f2 -d '-')
+
+cp -a ../linaro-overlay-obs.key .
+
+image=linaro/ci-${ARCHITECTURE}-ubuntu-ansible:${DISTRIBUTION}
+docker build --pull --tag=$image .
+echo $image > .docker-tag
diff --git a/bionic-amd64-ansible-base/obs-stg.list b/bionic-amd64-ansible-base/obs-stg.list
new file mode 100644
index 00000000..70c74cbf
--- /dev/null
+++ b/bionic-amd64-ansible-base/obs-stg.list
@@ -0,0 +1,2 @@
+deb http://obs.linaro.org/STG/bionic ./
+
diff --git a/bionic-amd64-apache/Dockerfile b/bionic-amd64-apache/Dockerfile
new file mode 100644
index 00000000..77551f01
--- /dev/null
+++ b/bionic-amd64-apache/Dockerfile
@@ -0,0 +1,9 @@
+FROM ubuntu:bionic
+
+RUN apt-get update && apt-get dist-upgrade -y && apt-get install -y --no-install-recommends apache2 ca-certificates ssl-cert pwauth
+
+VOLUME /etc/apache/ /etc/ssl /etc/dehydrated /srv/certbot /var/log/apache
+EXPOSE 443
+CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND" ]
+
+
diff --git a/fedora23-aarch64-openjdk/build.sh b/bionic-amd64-apache/build.sh
index 15e8f8a0..44332d5e 100755
--- a/fedora23-aarch64-openjdk/build.sh
+++ b/bionic-amd64-apache/build.sh
@@ -4,6 +4,6 @@ set -e
export LANG=C
-image=linaro/$(basename ${PWD})
+image=linaro/apache:bionic
docker build --pull --tag=$image .
echo $image > .docker-tag
diff --git a/bionic-amd64-art/Dockerfile b/bionic-amd64-art/Dockerfile
new file mode 100644
index 00000000..2be93afb
--- /dev/null
+++ b/bionic-amd64-art/Dockerfile
@@ -0,0 +1,55 @@
+FROM ubuntu:bionic
+
+COPY setup-sshd /usr/sbin/setup-sshd
+
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y \
+ && echo y | unminimize \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y devscripts \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ bc \
+ bison \
+ ccache \
+ build-essential \
+ curl \
+ flex \
+ g++-multilib \
+ gcc-multilib \
+ git \
+ gnupg \
+ gperf \
+ lib32ncurses5-dev \
+ lib32z-dev \
+ libc6-dev-i386 \
+ libgl1-mesa-dev \
+ libx11-dev \
+ libxml2-utils \
+ openjdk-8-jdk \
+ openjdk-11-jdk \
+ openssh-server \
+ parallel \
+ python3-requests \
+ rsync \
+ unzip \
+ x11proto-core-dev \
+ xsltproc \
+ xz-utils \
+ zip \
+ zlib1g-dev && \
+ apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
+
+
+RUN useradd -m -G plugdev buildslave \
+ && echo 'buildslave ALL = NOPASSWD: ALL' > /etc/sudoers.d/jenkins \
+ && chmod 0440 /etc/sudoers.d/jenkins \
+ && mkdir -p /var/run/sshd /home/buildslave/bin \
+ && curl https://raw.githubusercontent.com/google/styleguide/gh-pages/cpplint/cpplint.py > /home/buildslave/bin/cpplint.py \
+ && curl https://storage.googleapis.com/git-repo-downloads/repo > /home/buildslave/bin/repo \
+ && chmod a+x /home/buildslave/bin/* \
+ && chown -R buildslave:buildslave /home/buildslave/bin
+
+ENV LC_ALL C.UTF-8
+
+EXPOSE 22
+ENTRYPOINT ["/usr/sbin/setup-sshd"]
+
diff --git a/bionic-amd64-art/build.sh b/bionic-amd64-art/build.sh
new file mode 100755
index 00000000..45869147
--- /dev/null
+++ b/bionic-amd64-art/build.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+set -e
+
+trap cleanup_exit INT TERM EXIT
+
+cleanup_exit()
+{
+ rm -f setup-sshd
+}
+
+export LANG=C
+
+DISTRIBUTION=$(basename ${PWD} | cut -f1 -d '-')
+ARCHITECTURE=$(basename ${PWD} | cut -f2 -d '-')
+
+cp -a ../setup-sshd .
+
+image=linaro/jenkins-${ARCHITECTURE}-art-ubuntu:${DISTRIBUTION}
+docker build --pull --tag=$image .
+echo $image > .docker-tag
diff --git a/utopic-amd64/Dockerfile b/bionic-amd64/Dockerfile
index 56589e53..1fe41f6e 100644
--- a/utopic-amd64/Dockerfile
+++ b/bionic-amd64/Dockerfile
@@ -1,14 +1,12 @@
-FROM ubuntu:utopic
-
-COPY *.list *.key /etc/apt/sources.list.d/
+FROM ubuntu:bionic
RUN dpkg --add-architecture i386 \
- && sed -i -e 's/archive.ubuntu.com\|security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list \
- && apt-key add /etc/apt/sources.list.d/*.key \
+ && apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends software-properties-common \
&& apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y devscripts \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --force-yes \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
abootimg \
acpica-tools \
android-tools-fsutils \
@@ -18,6 +16,9 @@ RUN dpkg --add-architecture i386 \
bison \
build-essential \
ccache \
+ clang \
+ clang-format \
+ clang-tidy \
curl \
debhelper \
debian-archive-keyring \
@@ -30,34 +31,47 @@ RUN dpkg --add-architecture i386 \
gcc-aarch64-linux-gnu \
gcc-arm-linux-gnueabihf \
gdisk \
+ genisoimage \
git \
+ gperf \
kernel-wedge \
kpartx \
lava-tool \
+ lcov \
+ less \
+ lib32ncurses5 \
libstdc++6:i386 \
libtool \
- linaro-image-tools \
+ libvirt-bin \
+ libxml2-utils \
lsb-release \
- openjdk-7-jdk \
+ make \
+ openjdk-11-jdk \
openssh-server \
+ python-cryptography \
+ python-mako \
+ python-networkx \
+ python-pip \
python-requests \
+ python-wheel \
+ python3-cryptography \
+ python3-pip \
+ python3-requests \
+ python3-wheel \
+ pxz \
qemu-user-static \
+ rsync \
+ scons \
sudo \
time \
u-boot-tools \
uuid-dev \
+ virtinst \
wget \
+ xml-twig-tools \
zip \
- zlib1g:i386 \
+ zlib1g-dev:i386 \
zsync \
- && wget -q \
- http://snapshot.debian.org/archive/debian/20160609T104519Z/pool/main/a/acpica-unix/acpica-tools_20160527-1_amd64.deb \
- http://de.archive.ubuntu.com/ubuntu/pool/main/m/make-dfsg/make_3.81-8.2ubuntu3_amd64.deb \
- http://mirrors.kernel.org/ubuntu/pool/universe/o/openjdk-8/openjdk-8-jre-headless_8u45-b14-1_amd64.deb \
- http://mirrors.kernel.org/ubuntu/pool/universe/o/openjdk-8/openjdk-8-jre_8u45-b14-1_amd64.deb \
- http://mirrors.kernel.org/ubuntu/pool/universe/o/openjdk-8/openjdk-8-jdk_8u45-b14-1_amd64.deb \
- && dpkg -i --force-all *.deb \
- && apt-mark hold make \
&& apt-get clean \
&& rm -rf \
/etc/apt/sources.list.d/*.key \
@@ -66,14 +80,19 @@ RUN dpkg --add-architecture i386 \
/var/tmp/* \
*.deb
-RUN useradd -m buildslave \
+RUN useradd -m -G plugdev buildslave \
&& echo 'buildslave ALL = NOPASSWD: ALL' > /etc/sudoers.d/jenkins \
- && chmod 440 /etc/sudoers.d/jenkins \
+ && chmod 0440 /etc/sudoers.d/jenkins \
&& mkdir -p /var/run/sshd /home/buildslave/bin \
&& curl https://raw.githubusercontent.com/google/styleguide/gh-pages/cpplint/cpplint.py > /home/buildslave/bin/cpplint.py \
&& curl https://storage.googleapis.com/git-repo-downloads/repo > /home/buildslave/bin/repo \
&& chmod a+x /home/buildslave/bin/* \
&& chown -R buildslave:buildslave /home/buildslave/bin
+RUN pip install jenkins-job-builder==2.10.0 \
+ && git clone --depth 1 https://git.linaro.org/infrastructure/jjb-linaro-plugin.git \
+ && cd jjb-linaro-plugin && python setup.py install && cd .. && rm -rf jjb-linaro-plugin
+
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
+
diff --git a/bionic-amd64/build.sh b/bionic-amd64/build.sh
new file mode 100755
index 00000000..28723188
--- /dev/null
+++ b/bionic-amd64/build.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+set -e
+
+trap cleanup_exit INT TERM EXIT
+
+cleanup_exit()
+{
+ rm -f setup-sshd
+}
+
+export LANG=C
+
+DISTRIBUTION=$(basename ${PWD} | cut -f1 -d '-')
+ARCHITECTURE=$(basename ${PWD} | cut -f2 -d '-')
+
+cp -a ../setup-sshd .
+
+image=linaro/jenkins-${ARCHITECTURE}-ubuntu:${DISTRIBUTION}
+docker build --pull --tag=$image .
+echo $image > .docker-tag
diff --git a/bionic-arm64-armnn/Dockerfile b/bionic-arm64-armnn/Dockerfile
new file mode 100644
index 00000000..b6befd19
--- /dev/null
+++ b/bionic-arm64-armnn/Dockerfile
@@ -0,0 +1,21 @@
+FROM linaro/jenkins-arm64-ubuntu:bionic
+
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ cmake \
+ autoconf \
+ automake \
+ libtool \
+ libpthread-stubs0-dev \
+ python3-pip \
+ virtualenv \
+ python3-dev \
+ libboost-dev \
+ python3-setuptools \
+ && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
+
+
+ENV LC_ALL C.UTF-8
+
+EXPOSE 22
+ENTRYPOINT ["/usr/sbin/setup-sshd"]
diff --git a/bionic-arm64-armnn/build.sh b/bionic-arm64-armnn/build.sh
new file mode 100755
index 00000000..e0307d2f
--- /dev/null
+++ b/bionic-arm64-armnn/build.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+set -e
+
+trap cleanup_exit INT TERM EXIT
+
+cleanup_exit()
+{
+ rm -f setup-sshd
+}
+
+export LANG=C
+
+DISTRIBUTION=$(basename ${PWD} | cut -f1 -d '-')
+ARCHITECTURE=$(basename ${PWD} | cut -f2 -d '-')
+
+cp -a ../setup-sshd .
+
+image=linaro/jenkins-${ARCHITECTURE}-ubuntu-armnn:${DISTRIBUTION}
+docker build --pull --tag=$image .
+echo $image > .docker-tag
diff --git a/bionic-arm64/Dockerfile b/bionic-arm64/Dockerfile
new file mode 100644
index 00000000..5edba70c
--- /dev/null
+++ b/bionic-arm64/Dockerfile
@@ -0,0 +1,69 @@
+FROM ubuntu:bionic
+
+COPY setup-sshd /usr/sbin/setup-sshd
+
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y \
+ && echo y | unminimize \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y devscripts \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ bc \
+ bison \
+ ccache \
+ build-essential \
+ clang-4.0 \
+ clang-format-4.0 \
+ clang-tidy-4.0 \
+ curl \
+ flex \
+ git \
+ gnupg \
+ gperf \
+ lava-tool \
+ libgl1-mesa-dev \
+ libx11-dev \
+ libxml2-utils \
+ openjdk-11-jdk \
+ openssh-server \
+ parallel \
+ python-cryptography \
+ python-mako \
+ python-networkx \
+ python-pip \
+ python-requests \
+ python-wheel \
+ python3-cryptography \
+ python3-pip \
+ python3-requests \
+ python3-wheel \
+ qemu-user-static \
+ rsync \
+ scons \
+ sudo \
+ unzip \
+ x11proto-core-dev \
+ xsltproc \
+ xz-utils \
+ wget \
+ zip \
+ zlib1g-dev && \
+ apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
+
+RUN useradd -m -G plugdev buildslave \
+ && echo 'buildslave ALL = NOPASSWD: ALL' > /etc/sudoers.d/jenkins \
+ && chmod 0440 /etc/sudoers.d/jenkins \
+ && mkdir -p /var/run/sshd /home/buildslave/bin \
+ && curl https://raw.githubusercontent.com/google/styleguide/gh-pages/cpplint/cpplint.py > /home/buildslave/bin/cpplint.py \
+ && curl https://storage.googleapis.com/git-repo-downloads/repo > /home/buildslave/bin/repo \
+ && chmod a+x /home/buildslave/bin/* \
+ && chown -R buildslave:buildslave /home/buildslave/bin
+
+RUN pip install jenkins-job-builder==2.10.0 \
+ && git clone --depth 1 https://git.linaro.org/infrastructure/jjb-linaro-plugin.git \
+ && cd jjb-linaro-plugin && python setup.py install && cd .. && rm -rf jjb-linaro-plugin
+
+ENV LC_ALL C.UTF-8
+
+EXPOSE 22
+ENTRYPOINT ["/usr/sbin/setup-sshd"]
+
diff --git a/bionic-arm64/build.sh b/bionic-arm64/build.sh
new file mode 100755
index 00000000..28723188
--- /dev/null
+++ b/bionic-arm64/build.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+set -e
+
+trap cleanup_exit INT TERM EXIT
+
+cleanup_exit()
+{
+ rm -f setup-sshd
+}
+
+export LANG=C
+
+DISTRIBUTION=$(basename ${PWD} | cut -f1 -d '-')
+ARCHITECTURE=$(basename ${PWD} | cut -f2 -d '-')
+
+cp -a ../setup-sshd .
+
+image=linaro/jenkins-${ARCHITECTURE}-ubuntu:${DISTRIBUTION}
+docker build --pull --tag=$image .
+echo $image > .docker-tag
diff --git a/bookworm-amd64/Dockerfile b/bookworm-amd64/Dockerfile
new file mode 100644
index 00000000..5ac338fa
--- /dev/null
+++ b/bookworm-amd64/Dockerfile
@@ -0,0 +1,94 @@
+FROM debian:bookworm-backports
+
+ARG SPHINX_DOCS_DEPS="python3-sphinx texlive texlive-latex-extra libalgorithm-diff-perl \
+ texlive-humanities texlive-fonts-recommended texlive-latex-recommended texlive-plain-generic \
+ latexmk"
+
+RUN echo 'locales locales/locales_to_be_generated multiselect C.UTF-8 UTF-8, en_US.UTF-8 UTF-8 ' | debconf-set-selections \
+ && echo 'locales locales/default_environment_locale select en_US.UTF-8' | debconf-set-selections \
+ && apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y devscripts locales \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ android-sdk-libsparse-utils \
+ abootimg \
+ acpica-tools \
+ ansible \
+ autoconf \
+ automake \
+ bc \
+ bison \
+ build-essential \
+ \
+ clang llvm llvm-dev lld \
+ \
+ ccache \
+ chrpath \
+ cpio \
+ curl \
+ debhelper \
+ debian-archive-keyring \
+ debian-keyring \
+ debootstrap \
+ device-tree-compiler \
+ dosfstools \
+ doxygen \
+ fakeroot \
+ flex \
+ gawk \
+ gdisk \
+ genisoimage \
+ git \
+ iasl \
+ kernel-wedge \
+ kpartx \
+ libcurl4-openssl-dev \
+ libssl-dev \
+ libtool \
+ lsb-release \
+ lvm2 \
+ mdadm \
+ mkbootimg \
+ mtools \
+ nasm \
+ openjdk-17-jdk \
+ openssh-server \
+ parted \
+ pigz \
+ python3-cryptography \
+ python3-jinja2 \
+ python3-kerberos \
+ python3-pip \
+ python3-requests \
+ python3-ruamel.yaml \
+ qemu-user-static \
+ sudo \
+ time \
+ u-boot-tools \
+ uuid-dev \
+ wget \
+ xz-utils \
+ zip \
+ zsync \
+ ${SPHINX_DOCS_DEPS} \
+ && if [ $(uname -m) = 'x86_64' ]; then \
+ DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ g++-multilib \
+ libc6-dev-i386; fi \
+ && apt-get clean \
+ && rm -rf \
+ /etc/apt/sources.list.d/*.key \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+
+RUN useradd -m buildslave \
+ && echo 'buildslave ALL = NOPASSWD: ALL' > /etc/sudoers.d/jenkins \
+ && chmod 440 /etc/sudoers.d/jenkins \
+ && mkdir -p /var/run/sshd \
+ && wget -q https://storage.googleapis.com/git-repo-downloads/repo -O /usr/bin/repo \
+ && chmod +x /usr/bin/repo
+
+
+EXPOSE 22
+CMD ["/usr/sbin/sshd", "-D"]
diff --git a/utopic-amd64/build.sh b/bookworm-amd64/build.sh
index 58fb2bf2..131c34ce 100755
--- a/utopic-amd64/build.sh
+++ b/bookworm-amd64/build.sh
@@ -14,9 +14,12 @@ export LANG=C
DISTRIBUTION=$(basename ${PWD} | cut -f1 -d '-')
ARCHITECTURE=$(basename ${PWD} | cut -f2 -d '-')
-cp -a ../linaro-*.list ../linaro-*.key .
-sed -e "s|@DISTRIBUTION@|${DISTRIBUTION}|" -i *.list
+image=linaro/jenkins-${ARCHITECTURE}-debian:${DISTRIBUTION}
+
+if [ ! -e Dockerfile ]
+then
+ cp ../${DISTRIBUTION}-amd64/Dockerfile .
+fi
-image=linaro/ci-${ARCHITECTURE}-ubuntu:${DISTRIBUTION}
docker build --pull --tag=$image .
echo $image > .docker-tag
diff --git a/bookworm-arm64/build.sh b/bookworm-arm64/build.sh
new file mode 120000
index 00000000..c2c65e26
--- /dev/null
+++ b/bookworm-arm64/build.sh
@@ -0,0 +1 @@
+../bookworm-amd64/build.sh \ No newline at end of file
diff --git a/bullseye-amd64-android-postprocess/Dockerfile b/bullseye-amd64-android-postprocess/Dockerfile
new file mode 100644
index 00000000..f4ec9e6b
--- /dev/null
+++ b/bullseye-amd64-android-postprocess/Dockerfile
@@ -0,0 +1,24 @@
+# Use the official image as a parent image.
+FROM linaro/kir:master
+
+# Set the working directory.
+WORKDIR /linaro-android
+
+RUN apt-get update \
+ && apt-get install -y \
+ bc \
+ jq \
+ rsync \
+ selinux-utils \
+ sudo \
+ time \
+ wget \
+ && apt-get clean \
+ && rm -rf \
+ /etc/apt/sources.list.d/*.key \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+
+ADD https://android-git.linaro.org/android-build-configs.git/plain/lkft/linaro-lkft-android-docker.sh?h=lkft /usr/bin/linaro-lkft-android.sh
+RUN chmod +x /usr/bin/linaro-lkft-android.sh
diff --git a/bullseye-amd64-android-postprocess/build.sh b/bullseye-amd64-android-postprocess/build.sh
new file mode 100755
index 00000000..4999c352
--- /dev/null
+++ b/bullseye-amd64-android-postprocess/build.sh
@@ -0,0 +1,7 @@
+#!/bin/bash -ex
+
+# definition of tag: baseDockerImageVersion:year.month.date-numberOfTheDay
+tag="bullseye-2024.03.13-01"
+image="linaro/lava-android-postprocess:${tag}"
+docker build --pull --tag "${image}" -f Dockerfile .
+echo $image > .docker-tag
diff --git a/bullseye-amd64-jenkins-master/Dockerfile b/bullseye-amd64-jenkins-master/Dockerfile
new file mode 100644
index 00000000..fc520442
--- /dev/null
+++ b/bullseye-amd64-jenkins-master/Dockerfile
@@ -0,0 +1,42 @@
+FROM jenkins/jenkins:2.440.2-lts-slim
+
+ENV JENKINS_JAVA_PARAMETERS="-server -XX:+AlwaysPreTouch -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/jenkins/heapdump.log -XX:+UseG1GC -XX:+UseStringDeduplication -XX:+ParallelRefProcEnabled -XX:+ExplicitGCInvokesConcurrent -XX:+UnlockDiagnosticVMOptions -XX:G1SummarizeRSetStatsPeriod=1 -XX:MaxMetaspaceExpansion=64M -Djenkins.model.Jenkins.logStartupPerformance=true"
+ENV JAVA_OPTS="$JENKINS_JAVA_PARAMETERS -Djava.awt.headless=true -Dhudson.slaves.WorkspaceList='_' -Dhudson.model.ParametersAction.keepUndefinedParameters=true -Dorg.jenkinsci.plugins.gitclient.Git.timeOut=30 -Dorg.eclipse.jetty.server.Request.maxFormContentSize=1000000"
+ENV JENKINS_OPTS="--sessionTimeout=1440 --sessionEviction=86400"
+ENV JAVA_MEM=${JAVA_MEM:-8}
+
+# Install jenkins job builder
+# Create plugins directory, symlinked on host machine
+USER root
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ wget \
+ gettext \
+ jq \
+ build-essential \
+ moreutils \
+ python3-paramiko \
+ python3-requests \
+ python3-setuptools \
+ python3-wheel \
+ sshpass \
+ virtualenv \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ && mkdir -p /var/jenkins_plugins \
+ && chown jenkins:jenkins /var/jenkins_plugins \
+ && ln -s /var/jenkins_home /var/lib/jenkins \
+ && mkdir -p /usr/share/groovy/lib \
+ && wget -q https://search.maven.org/remotecontent?filepath=org/codehaus/groovy/groovy-xmlrpc/0.8/groovy-xmlrpc-0.8.jar -O /usr/share/groovy/lib/groovy-xmlrpc-0.8.jar \
+ && wget -q https://storage.googleapis.com/git-repo-downloads/repo -O /usr/bin/repo\
+ && chmod +x /usr/bin/repo
+
+USER jenkins
+
+# Install jenkins plugins
+COPY plugins.txt .
+RUN jenkins-plugin-cli -f plugins.txt
+
+# Forward ports to host
+EXPOSE 2222
diff --git a/jessie-amd64-jenkins-master/build.sh b/bullseye-amd64-jenkins-master/build.sh
index 778d8360..778d8360 100755
--- a/jessie-amd64-jenkins-master/build.sh
+++ b/bullseye-amd64-jenkins-master/build.sh
diff --git a/bullseye-amd64-jenkins-master/docker-compose.yml b/bullseye-amd64-jenkins-master/docker-compose.yml
new file mode 100644
index 00000000..5d824567
--- /dev/null
+++ b/bullseye-amd64-jenkins-master/docker-compose.yml
@@ -0,0 +1,26 @@
+version: '3'
+services:
+ jenkins:
+ image: 'linaro/ci-x86_64-jenkins-master-debian:lts'
+ container_name: jenkins-master
+ logging:
+ driver: journald
+ ports:
+ - "2222:2222"
+ - "2233:2233"
+ - "8080:8080"
+ - "50000:50000"
+ volumes:
+ - "${JENKINS_HOST_PATH}:/var/jenkins_home:rw"
+ gerrit:
+ image: 'debian:buster'
+ container_name: gerrit
+ logging:
+ driver: journald
+ ports:
+ - "2222:2222"
+ - "2233:2233"
+ - "8080:8080"
+ - "50000:50000"
+ volumes:
+ - "${JENKINS_HOST_PATH}:/var/jenkins_home:rw"
diff --git a/bullseye-amd64-jenkins-master/plugins.txt b/bullseye-amd64-jenkins-master/plugins.txt
new file mode 100644
index 00000000..6afa2422
--- /dev/null
+++ b/bullseye-amd64-jenkins-master/plugins.txt
@@ -0,0 +1,76 @@
+ansicolor:1.0.4
+ant:497.v94e7d9fffa_b_9
+antisamy-markup-formatter:162.v0e6ec0fcfcf6
+apache-httpcomponents-client-5-api:5.3.1-1.0
+apache-httpcomponents-client-4-api
+aws-java-sdk:1.12.633-430.vf9a_e567a_244f
+basic-branch-build-strategies:81.v05e333931c7d
+bouncycastle-api:2.30.1.77-225.v26ea_c9455fd9
+build-blocker-plugin:1.7.9
+build-name-setter:2.4.1
+build-timeout:1.32
+command-launcher:107.v773860566e2e
+copyartifact:722.v0662a_9b_e22a_c
+docker-plugin:1.5
+docker-build-publish:1.4.0
+docker-workflow:572.v950f58993843
+docker-slaves:1.0.7
+dropdown-viewstabbar-plugin:1.7
+dynamic-axis:1.0.3
+ec2:1648.vf3d852e00486
+email-ext:2.104
+embeddable-build-status:467.v4a_954796e45d
+extended-read-permission:53.v6499940139e5
+external-monitor-job:215.v2e88e894db_f8
+ghprb:1.42.2
+gerrit-trigger:2.39.4
+git-parameter:0.9.19
+groovy-postbuild:228.vcdb_cf7265066
+heavy-job:1.1
+htmlpublisher:1.33
+ircbot:3.921.v40cc686b_9cf8
+jobConfigHistory:1229.v3039470161a_d
+ldap:711.vb_d1a_491714dc
+leastload:3.0.0
+log-parser:2.3.3
+matrix-project:822.824.v14451b_c0fd42
+matrix-combinations-parameter:1.3.3
+mercurial:1260.vdfb_723cdcc81
+metrics:4.2.21-449.v6960d7c54c69
+monitoring:1.95.0
+naginator:1.436.vb_e769dcb_cdf6
+nodelabelparameter:1.12.0
+openstack-cloud:2.65
+pam-auth:1.10
+parameterized-scheduler:255.v73827fcdf618
+postbuildscript:3.2.0-550.v88192b_d3e922
+pipeline-github:2.8-159.09e4403bc62f
+pipeline-utility-steps:2.16.1
+plot:2.1.12
+prometheus:2.5.1
+publish-over-ssh:1.25
+rebuild:330.v645b_7df10e2a_
+repo:1.16.0
+simple-theme-plugin:176.v39740c03a_a_f5
+slack:684.v833089650554
+ssh-agent:346.vda_a_c4f2c8e50
+ssh-slaves:2.948.vb_8050d697fec
+subversion:2.17.3
+throttle-concurrents:2.14
+timestamper:1.26
+translation:1.16
+urltrigger:1.02
+warnings-ng:10.7.0
+workflow-aggregator:596.v8c21c963d92d
+ws-cleanup:0.45
+xvfb:1.2
+yet-another-docker-plugin:0.2.0
+cloudbees-disk-usage-simple:203.v3f46a_7462b_1a_
+lockable-resources:1232.v512d6c434eb_d
+generic-webhook-trigger:2.0.0
+htmlpublisher:1.32
+jdk-tool:73.vddf737284550
+matrix-auth:3.2.1
+trilead-api:2.142.v748523a_76693
+multiple-scms:0.8
+jenkins-multijob-plugin:627.v7c23cef20a_6a
diff --git a/bullseye-amd64/Dockerfile b/bullseye-amd64/Dockerfile
new file mode 100644
index 00000000..a4928e98
--- /dev/null
+++ b/bullseye-amd64/Dockerfile
@@ -0,0 +1,91 @@
+FROM debian:bullseye-backports
+
+ARG SPHINX_DOCS_DEPS="python3-sphinx texlive texlive-latex-extra libalgorithm-diff-perl \
+ texlive-humanities texlive-fonts-recommended texlive-latex-recommended texlive-plain-generic \
+ latexmk"
+
+RUN echo 'locales locales/locales_to_be_generated multiselect C.UTF-8 UTF-8, en_US.UTF-8 UTF-8 ' | debconf-set-selections \
+ && echo 'locales locales/default_environment_locale select en_US.UTF-8' | debconf-set-selections \
+ && apt-get update \
+ ; DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends gnupg \
+ && apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y devscripts locales \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ abootimg \
+ acpica-tools \
+ ansible \
+ autoconf \
+ automake \
+ bc \
+ bison \
+ build-essential \
+ ccache \
+ chrpath \
+ cpio \
+ curl \
+ debhelper \
+ debian-archive-keyring \
+ debian-keyring \
+ debootstrap \
+ device-tree-compiler \
+ dosfstools \
+ doxygen \
+ fakeroot \
+ flex \
+ gawk \
+ gdisk \
+ genisoimage \
+ git \
+ img2simg \
+ kernel-wedge \
+ kpartx \
+ libcurl4-openssl-dev \
+ libssl-dev \
+ libtool \
+ lsb-release \
+ lvm2 \
+ mdadm \
+ mkbootimg \
+ mtools \
+ openjdk-11-jdk \
+ openssh-server \
+ parted \
+ pigz \
+ python3-cryptography \
+ python3-jinja2 \
+ python3-kerberos \
+ python3-pip \
+ python3-requests \
+ python3-ruamel.yaml \
+ qemu-user-static \
+ simg2img \
+ sudo \
+ time \
+ u-boot-tools \
+ uuid-dev \
+ wget \
+ xz-utils \
+ zip \
+ zsync \
+ ${SPHINX_DOCS_DEPS} \
+ && if [ $(uname -m) = 'x86_64' ]; then \
+ DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ g++-multilib \
+ libc6-dev-i386; fi \
+ && apt-get clean \
+ && rm -rf \
+ /etc/apt/sources.list.d/*.key \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+
+RUN useradd -m buildslave \
+ && echo 'buildslave ALL = NOPASSWD: ALL' > /etc/sudoers.d/jenkins \
+ && chmod 440 /etc/sudoers.d/jenkins \
+ && mkdir -p /var/run/sshd \
+ && wget -q https://storage.googleapis.com/git-repo-downloads/repo -O /usr/bin/repo \
+ && chmod +x /usr/bin/repo
+
+EXPOSE 22
+CMD ["/usr/sbin/sshd", "-D"]
diff --git a/xenial-arm64/build.sh b/bullseye-amd64/build.sh
index 1203ab3b..131c34ce 100755
--- a/xenial-arm64/build.sh
+++ b/bullseye-amd64/build.sh
@@ -14,9 +14,12 @@ export LANG=C
DISTRIBUTION=$(basename ${PWD} | cut -f1 -d '-')
ARCHITECTURE=$(basename ${PWD} | cut -f2 -d '-')
-cp -a ../linaro-overlay-repo.list ../linaro-overlay-repo.key .
-sed -e "s|@DISTRIBUTION@|${DISTRIBUTION}|" -i *.list
+image=linaro/jenkins-${ARCHITECTURE}-debian:${DISTRIBUTION}
+
+if [ ! -e Dockerfile ]
+then
+ cp ../${DISTRIBUTION}-amd64/Dockerfile .
+fi
-image=linaro/ci-${ARCHITECTURE}-ubuntu:${DISTRIBUTION}
docker build --pull --tag=$image .
echo $image > .docker-tag
diff --git a/bullseye-arm64/build.sh b/bullseye-arm64/build.sh
new file mode 120000
index 00000000..74c398cc
--- /dev/null
+++ b/bullseye-arm64/build.sh
@@ -0,0 +1 @@
+../bullseye-amd64/build.sh \ No newline at end of file
diff --git a/bullseye-arm64/dummy.txt b/bullseye-arm64/dummy.txt
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/bullseye-arm64/dummy.txt
diff --git a/jessie-armhf/Dockerfile b/bullseye-armhf/Dockerfile
index 029d38fb..d9e5e0f4 100644
--- a/jessie-armhf/Dockerfile
+++ b/bullseye-armhf/Dockerfile
@@ -1,52 +1,56 @@
-FROM linaro/base-armhf-debian:jessie
+FROM arm32v7/debian:bullseye
-COPY *.list *.key /etc/apt/sources.list.d/
-
-RUN apt-key add /etc/apt/sources.list.d/*.key \
- && echo 'locales locales/locales_to_be_generated multiselect C.UTF-8 UTF-8, en_US.UTF-8 UTF-8 ' | debconf-set-selections \
+RUN echo 'locales locales/locales_to_be_generated multiselect C.UTF-8 UTF-8, en_US.UTF-8 UTF-8 ' | debconf-set-selections \
&& echo 'locales locales/default_environment_locale select en_US.UTF-8' | debconf-set-selections \
- && apt-get update \
- && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y devscripts locales \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ && apt-get -q update \
+ && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -qy \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -qy devscripts locales \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -qy --no-install-recommends \
abootimg \
acpica-tools \
- android-tools-fsutils \
autoconf \
automake \
bc \
bison \
build-essential \
ccache \
+ cpio \
curl \
debhelper \
debian-archive-keyring \
debian-keyring \
+ debootstrap \
device-tree-compiler \
+ dosfstools \
doxygen \
fakeroot \
flex \
- gcc \
+ genisoimage \
gdisk \
git \
kernel-wedge \
kpartx \
- lava-tool \
libtool \
- linaro-image-tools \
+ libssl-dev \
lsb-release \
+ lvm2 \
+ mdadm \
+ mtools \
+ openjdk-11-jdk \
openssh-server \
- python-requests \
+ parted \
+ python3-cryptography \
+ python3-pip \
+ python3-requests \
qemu-user-static \
sudo \
time \
u-boot-tools \
uuid-dev \
wget \
+ xz-utils \
zip \
zsync \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends -t jessie-backports openjdk-8-jdk \
- && update-java-alternatives -s java-1.8.0-openjdk-armhf \
&& apt-get clean \
&& rm -rf \
/etc/apt/sources.list.d/*.key \
diff --git a/xenial-amd64-chromium/build.sh b/bullseye-armhf/build.sh
index 7b8d1454..131c34ce 100755
--- a/xenial-amd64-chromium/build.sh
+++ b/bullseye-armhf/build.sh
@@ -14,9 +14,12 @@ export LANG=C
DISTRIBUTION=$(basename ${PWD} | cut -f1 -d '-')
ARCHITECTURE=$(basename ${PWD} | cut -f2 -d '-')
-cp -a ../linaro-overlay-repo.list ../linaro-overlay-repo.key .
-sed -e "s|@DISTRIBUTION@|${DISTRIBUTION}|" -i *.list
+image=linaro/jenkins-${ARCHITECTURE}-debian:${DISTRIBUTION}
+
+if [ ! -e Dockerfile ]
+then
+ cp ../${DISTRIBUTION}-amd64/Dockerfile .
+fi
-image=linaro/ci-${ARCHITECTURE}-chromium-ubuntu:${DISTRIBUTION}
docker build --pull --tag=$image .
echo $image > .docker-tag
diff --git a/jessie-arm64/Dockerfile b/buster-amd64-lkft/Dockerfile
index 7081ee04..ddb07baa 100644
--- a/jessie-arm64/Dockerfile
+++ b/buster-amd64-lkft/Dockerfile
@@ -1,11 +1,14 @@
-FROM linaro/base-arm64-debian:jessie
+FROM debian:buster
COPY *.list *.key /etc/apt/sources.list.d/
-RUN apt-key add /etc/apt/sources.list.d/*.key \
+RUN dpkg --add-architecture i386 \
&& echo 'locales locales/locales_to_be_generated multiselect C.UTF-8 UTF-8, en_US.UTF-8 UTF-8 ' | debconf-set-selections \
&& echo 'locales locales/default_environment_locale select en_US.UTF-8' | debconf-set-selections \
&& apt-get update \
+ ; DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends gnupg \
+ && apt-key add /etc/apt/sources.list.d/*.key \
+ && apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y devscripts locales \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
@@ -18,37 +21,53 @@ RUN apt-key add /etc/apt/sources.list.d/*.key \
bison \
build-essential \
ccache \
+ chrpath \
+ coreutils \
+ cpio \
curl \
debhelper \
debian-archive-keyring \
debian-keyring \
device-tree-compiler \
+ diffstat \
doxygen \
fakeroot \
flex \
+ gawk \
gcc \
gdisk \
git \
kernel-wedge \
kpartx \
lava-tool \
+ libelf-dev \
+ libmagickwand-dev \
+ libmath-prime-util-perl \
+ libsdl1.2-dev \
+ libssl-dev \
+ libstdc++6:i386 \
libtool \
- libvirt-clients \
- linaro-image-tools \
lsb-release \
+ openjdk-11-jdk \
openssh-server \
+ pigz \
+ python-pip \
python-requests \
+ python3-requests \
qemu-user-static \
sudo \
+ texinfo \
time \
u-boot-tools \
uuid-dev \
- virtinst \
+ vim-tiny \
+ virtualenv \
wget \
+ whiptail \
+ xz-utils \
zip \
+ zlib1g:i386 \
zsync \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends -t jessie-backports openjdk-8-jdk \
- && update-java-alternatives -s java-1.8.0-openjdk-arm64 \
&& apt-get clean \
&& rm -rf \
/etc/apt/sources.list.d/*.key \
@@ -61,7 +80,14 @@ RUN useradd -m buildslave \
&& chmod 440 /etc/sudoers.d/jenkins \
&& mkdir -p /var/run/sshd
-VOLUME ["/var/lib/libvirt"]
+USER buildslave
+
+RUN pip install --user --force-reinstall jinja2-cli ruamel.yaml \
+ && mkdir -p /home/buildslave/bin \
+ && curl https://storage.googleapis.com/git-repo-downloads/repo > /home/buildslave/bin/repo \
+ && chmod a+x /home/buildslave/bin/repo
+
+USER root
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
diff --git a/buster-amd64-lkft/build.sh b/buster-amd64-lkft/build.sh
new file mode 100755
index 00000000..f8db251f
--- /dev/null
+++ b/buster-amd64-lkft/build.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+set -e
+
+trap cleanup_exit INT TERM EXIT
+
+cleanup_exit()
+{
+ rm -f *.list *.key
+}
+
+export LANG=C
+
+DISTRIBUTION=$(basename ${PWD} | cut -f1 -d '-')
+ARCHITECTURE=$(basename ${PWD} | cut -f2 -d '-')
+
+cp -a ../linaro-overlay-${DISTRIBUTION}.list ../linaro-overlay-obs.key .
+
+image=linaro/jenkins-${ARCHITECTURE}-debian-lkft:${DISTRIBUTION}
+docker build --pull --tag=$image .
+echo $image > .docker-tag
diff --git a/buster-amd64/Dockerfile b/buster-amd64/Dockerfile
new file mode 100644
index 00000000..42fd67b1
--- /dev/null
+++ b/buster-amd64/Dockerfile
@@ -0,0 +1,99 @@
+FROM debian:buster-backports
+
+COPY *.list *.key /etc/apt/sources.list.d/
+
+ARG SPHINX_DOCS_DEPS="python3-sphinx texlive texlive-latex-extra libalgorithm-diff-perl \
+ texlive-humanities texlive-generic-recommended texlive-generic-extra \
+ latexmk"
+
+RUN echo 'locales locales/locales_to_be_generated multiselect C.UTF-8 UTF-8, en_US.UTF-8 UTF-8 ' | debconf-set-selections \
+ && echo 'locales locales/default_environment_locale select en_US.UTF-8' | debconf-set-selections \
+ && apt-get update \
+ ; DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends gnupg \
+ && apt-key add /etc/apt/sources.list.d/*.key \
+ && apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y devscripts locales \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ abootimg \
+ acpica-tools \
+ android-tools-fsutils \
+ ansible/buster-backports \
+ autoconf \
+ automake \
+ bc \
+ bison \
+ build-essential \
+ ccache \
+ chrpath \
+ cpio \
+ curl \
+ debhelper \
+ debian-archive-keyring \
+ debian-keyring \
+ debootstrap \
+ device-tree-compiler \
+ dosfstools \
+ doxygen \
+ fakeroot \
+ flex \
+ gawk \
+ gdisk \
+ genisoimage \
+ git \
+ kernel-wedge \
+ kpartx \
+ lava-tool \
+ libcurl4-openssl-dev \
+ libssl-dev \
+ libtool \
+ liblz4-tool \
+ lsb-release \
+ lvm2 \
+ mdadm \
+ mtools \
+ openjdk-11-jdk \
+ openssh-server \
+ parted \
+ pigz \
+ python3-cryptography \
+ python3-jinja2 \
+ python3-kerberos \
+ python3-pip \
+ python3-requests \
+ python3-ruamel.yaml \
+ python3-setuptools \
+ qemu-user-static \
+ sudo \
+ time \
+ u-boot-tools \
+ uuid-dev \
+ wget \
+ xz-utils \
+ zip \
+ zstd \
+ zsync \
+ ${SPHINX_DOCS_DEPS} \
+ && if [ $(uname -m) = 'x86_64' ]; then \
+ DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ g++-multilib \
+ libc6-dev-i386; fi \
+ && pip3 install --no-cache-dir kas==2.6.2 \
+ && pip3 install --no-cache-dir pyrsistent==0.18.0 \
+ && apt-get clean \
+ && rm -rf \
+ /etc/apt/sources.list.d/*.key \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+
+RUN useradd -m buildslave \
+ && echo 'buildslave ALL = NOPASSWD: ALL' > /etc/sudoers.d/jenkins \
+ && chmod 440 /etc/sudoers.d/jenkins \
+ && mkdir -p /var/run/sshd \
+ && wget -q https://storage.googleapis.com/git-repo-downloads/repo -O /usr/bin/repo \
+ && chmod +x /usr/bin/repo
+
+
+EXPOSE 22
+CMD ["/usr/sbin/sshd", "-D"]
diff --git a/buster-amd64/build.sh b/buster-amd64/build.sh
new file mode 100755
index 00000000..36cb0d16
--- /dev/null
+++ b/buster-amd64/build.sh
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+set -e
+
+trap cleanup_exit INT TERM EXIT
+
+cleanup_exit()
+{
+ rm -f *.list *.key
+}
+
+export LANG=C
+
+DISTRIBUTION=$(basename ${PWD} | cut -f1 -d '-')
+ARCHITECTURE=$(basename ${PWD} | cut -f2 -d '-')
+
+cp -a ../linaro-overlay-${DISTRIBUTION}.list ../linaro-overlay-obs.key .
+
+image=linaro/jenkins-${ARCHITECTURE}-debian:${DISTRIBUTION}
+
+if [ ! -e Dockerfile ]
+then
+ cp ../${DISTRIBUTION}-amd64/Dockerfile .
+fi
+
+docker build --pull --tag=$image .
+echo $image > .docker-tag
diff --git a/buster-arm64/build.sh b/buster-arm64/build.sh
new file mode 120000
index 00000000..a8685bb2
--- /dev/null
+++ b/buster-arm64/build.sh
@@ -0,0 +1 @@
+../buster-amd64/build.sh \ No newline at end of file
diff --git a/buster-arm64/dummy.txt b/buster-arm64/dummy.txt
new file mode 100644
index 00000000..f43876b5
--- /dev/null
+++ b/buster-arm64/dummy.txt
@@ -0,0 +1 @@
+bump
diff --git a/stretch-armhf/Dockerfile b/buster-armhf/Dockerfile
index 15ce9904..c7ab5069 100644
--- a/stretch-armhf/Dockerfile
+++ b/buster-armhf/Dockerfile
@@ -1,13 +1,13 @@
-FROM linaro/base-armhf-debian:stretch
+FROM arm32v7/debian:buster
COPY *.list *.key /etc/apt/sources.list.d/
-RUN apt-get update \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends gnupg \
- && apt-key add /etc/apt/sources.list.d/*.key \
- && echo 'locales locales/locales_to_be_generated multiselect C.UTF-8 UTF-8, en_US.UTF-8 UTF-8 ' | debconf-set-selections \
+RUN echo 'locales locales/locales_to_be_generated multiselect C.UTF-8 UTF-8, en_US.UTF-8 UTF-8 ' | debconf-set-selections \
&& echo 'locales locales/default_environment_locale select en_US.UTF-8' | debconf-set-selections \
&& apt-get update \
+ ; DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends gnupg \
+ && apt-key add /etc/apt/sources.list.d/*.key \
+ && apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y devscripts locales \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
@@ -20,32 +20,42 @@ RUN apt-get update \
bison \
build-essential \
ccache \
+ cpio \
curl \
debhelper \
debian-archive-keyring \
debian-keyring \
+ debootstrap \
device-tree-compiler \
+ dosfstools \
doxygen \
fakeroot \
flex \
- gcc \
+ genisoimage \
gdisk \
git \
kernel-wedge \
kpartx \
lava-tool \
libtool \
- linaro-image-tools \
+ libssl-dev \
lsb-release \
- openjdk-8-jdk \
+ lvm2 \
+ mdadm \
+ mtools \
+ openjdk-11-jdk \
openssh-server \
- python-requests \
+ parted \
+ python3-cryptography \
+ python3-pip \
+ python3-requests \
qemu-user-static \
sudo \
time \
u-boot-tools \
uuid-dev \
wget \
+ xz-utils \
zip \
zsync \
&& apt-get clean \
diff --git a/buster-armhf/build.sh b/buster-armhf/build.sh
new file mode 100755
index 00000000..36cb0d16
--- /dev/null
+++ b/buster-armhf/build.sh
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+set -e
+
+trap cleanup_exit INT TERM EXIT
+
+cleanup_exit()
+{
+ rm -f *.list *.key
+}
+
+export LANG=C
+
+DISTRIBUTION=$(basename ${PWD} | cut -f1 -d '-')
+ARCHITECTURE=$(basename ${PWD} | cut -f2 -d '-')
+
+cp -a ../linaro-overlay-${DISTRIBUTION}.list ../linaro-overlay-obs.key .
+
+image=linaro/jenkins-${ARCHITECTURE}-debian:${DISTRIBUTION}
+
+if [ ! -e Dockerfile ]
+then
+ cp ../${DISTRIBUTION}-amd64/Dockerfile .
+fi
+
+docker build --pull --tag=$image .
+echo $image > .docker-tag
diff --git a/centos7-aarch64-openjdk/Dockerfile b/centos7-aarch64-openjdk/Dockerfile
deleted file mode 100644
index 8f72396c..00000000
--- a/centos7-aarch64-openjdk/Dockerfile
+++ /dev/null
@@ -1,32 +0,0 @@
-FROM quay.io/fathi_boudra/centos:7-aarch64
-
-RUN rpm --import http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-7 \
- && yum -y update \
- && yum --nogpgcheck --setopt=tsflags=nodocs -y install \
- alsa-lib-devel \
- ant \
- cups-devel \
- freetype-devel \
- gcc-c++ \
- git \
- java-1.8.0-openjdk \
- libX11-devel \
- libXext-devel \
- libXrender-devel \
- libXt-devel \
- libXtst-devel \
- mercurial \
- openssh-server \
- pkgconfig \
- xorg-x11-server-Xvfb \
- && rm -rf /var/cache/yum/*
-
-RUN useradd buildslave \
- && echo 'buildslave ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/jenkins \
- && echo 'Defaults:buildslave !requiretty' >> /etc/sudoers.d/jenkins \
- && chmod 0440 /etc/sudoers.d/jenkins \
- && mkdir -p /var/run/sshd \
- && /usr/sbin/sshd-keygen
-
-EXPOSE 22
-CMD ["/usr/sbin/sshd", "-D"]
diff --git a/centos7-aarch64/Dockerfile b/centos7-aarch64/Dockerfile
deleted file mode 100644
index f75a7d21..00000000
--- a/centos7-aarch64/Dockerfile
+++ /dev/null
@@ -1,30 +0,0 @@
-FROM linaro/base-aarch64-centos:7
-
-ENV container docker
-
-RUN rpm --import http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-7 \
- && yum -y update \
- && yum --nogpgcheck --setopt=tsflags=nodocs -y install \
- git \
- java-1.8.0-openjdk \
- make \
- openssh-server \
- python-requests \
- rpm-build \
- virt-install \
- wget \
- yum-utils \
- && yum clean all \
- && rm -rf /var/cache/yum/*
-
-RUN useradd buildslave \
- && echo 'buildslave ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/jenkins \
- && echo 'Defaults:buildslave !requiretty' >> /etc/sudoers.d/jenkins \
- && chmod 0440 /etc/sudoers.d/jenkins \
- && mkdir -p /var/run/sshd \
- && /usr/sbin/sshd-keygen
-
-VOLUME ["/var/lib/libvirt"]
-
-EXPOSE 22
-CMD ["/usr/sbin/sshd", "-D"]
diff --git a/centos7-aarch64/build.sh b/centos7-aarch64/build.sh
deleted file mode 100755
index 90000540..00000000
--- a/centos7-aarch64/build.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh
-
-set -e
-
-export LANG=C
-
-ARCHITECTURE=$(basename ${PWD} | cut -f2 -d '-')
-
-image=linaro/ci-${ARCHITECTURE}-centos:7
-docker build --pull --tag=$image .
-echo $image > .docker-tag
diff --git a/centos7-amd64/Dockerfile b/centos7-amd64/Dockerfile
new file mode 100644
index 00000000..3ad7ba4b
--- /dev/null
+++ b/centos7-amd64/Dockerfile
@@ -0,0 +1,18 @@
+FROM centos:7
+
+RUN yum install -y openssh-server openssh-clients sudo java-11-openjdk-devel wget python3-requests && \
+ yum groupinstall -y "Development Tools" && \
+ yum install -y ansible python36 && \
+ yum clean all
+
+RUN useradd -m buildslave \
+ && mkdir /home/buildslave/.ssh \
+ && chown buildslave:buildslave /home/buildslave/.ssh \
+ && chmod 700 /home/buildslave/.ssh \
+ && echo 'buildslave ALL = NOPASSWD: ALL' > /etc/sudoers.d/jenkins \
+ && chmod 0440 /etc/sudoers.d/jenkins \
+ && /usr/bin/ssh-keygen -A \
+ && rm -rf /run/nologin
+
+EXPOSE 22
+CMD ["/usr/sbin/sshd", "-D"]
diff --git a/centos7-amd64/build.sh b/centos7-amd64/build.sh
new file mode 100755
index 00000000..9b3c44e4
--- /dev/null
+++ b/centos7-amd64/build.sh
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+set -e
+
+trap cleanup_exit INT TERM EXIT
+
+cleanup_exit()
+{
+ rm -f setup-sshd
+}
+
+export LANG=C
+
+cp -a ../setup-sshd .
+
+image=linaro/jenkins-amd64-centos:7
+docker build --pull --tag=$image .
+echo $image > .docker-tag
diff --git a/centos7-arm64/Dockerfile b/centos7-arm64/Dockerfile
new file mode 100644
index 00000000..89e707ce
--- /dev/null
+++ b/centos7-arm64/Dockerfile
@@ -0,0 +1,18 @@
+FROM centos:7
+
+RUN yum install -y openssh-server openssh-clients java-11-openjdk-devel sudo wget python3-requests && \
+ yum groupinstall -y "Development Tools" && \
+ yum install -y ansible python36 && \
+ yum clean all
+
+RUN useradd -m buildslave \
+ && mkdir /home/buildslave/.ssh \
+ && chown buildslave:buildslave /home/buildslave/.ssh \
+ && chmod 700 /home/buildslave/.ssh \
+ && echo 'buildslave ALL = NOPASSWD: ALL' > /etc/sudoers.d/jenkins \
+ && chmod 0440 /etc/sudoers.d/jenkins \
+ && /usr/bin/ssh-keygen -A \
+ && rm -rf /run/nologin
+
+EXPOSE 22
+CMD ["/usr/sbin/sshd", "-D"]
diff --git a/centos7-arm64/build.sh b/centos7-arm64/build.sh
new file mode 100755
index 00000000..25f929a7
--- /dev/null
+++ b/centos7-arm64/build.sh
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+set -e
+
+trap cleanup_exit INT TERM EXIT
+
+cleanup_exit()
+{
+ rm -f setup-sshd
+}
+
+export LANG=C
+
+cp -a ../setup-sshd .
+
+image=linaro/jenkins-arm64-centos:7
+docker build --pull --tag=$image .
+echo $image > .docker-tag
diff --git a/centos8-arm64/Dockerfile b/centos8-arm64/Dockerfile
new file mode 100644
index 00000000..ab5ba069
--- /dev/null
+++ b/centos8-arm64/Dockerfile
@@ -0,0 +1,19 @@
+FROM centos:8
+
+RUN dnf install -y openssh-server openssh-clients sudo wget python3-requests centos-release-ansible-29 && \
+ dnf distrosync -y && \
+ dnf groupinstall -y "Development Tools" && \
+ dnf install -y ansible python36 && \
+ dnf clean all
+
+RUN useradd -m buildslave \
+ && mkdir /home/buildslave/.ssh \
+ && chown buildslave:buildslave /home/buildslave/.ssh \
+ && chmod 700 /home/buildslave/.ssh \
+ && echo 'buildslave ALL = NOPASSWD: ALL' > /etc/sudoers.d/jenkins \
+ && chmod 0440 /etc/sudoers.d/jenkins \
+ && /usr/bin/ssh-keygen -A \
+ && rm -rf /run/nologin
+
+EXPOSE 22
+CMD ["/usr/sbin/sshd", "-D"]
diff --git a/centos8-arm64/build.sh b/centos8-arm64/build.sh
new file mode 100755
index 00000000..9b64ffcb
--- /dev/null
+++ b/centos8-arm64/build.sh
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+set -e
+
+trap cleanup_exit INT TERM EXIT
+
+cleanup_exit()
+{
+ rm -f setup-sshd
+}
+
+export LANG=C
+
+cp -a ../setup-sshd .
+
+image=linaro/jenkins-arm64-centos:8
+docker build --pull --tag=$image .
+echo $image > .docker-tag
diff --git a/ci-amd64-deployments/Dockerfile b/ci-amd64-deployments/Dockerfile
new file mode 100644
index 00000000..e4a10327
--- /dev/null
+++ b/ci-amd64-deployments/Dockerfile
@@ -0,0 +1,6 @@
+FROM python:3.10-alpine as build
+COPY requirements.txt .
+RUN pip3 install -r requirements.txt
+
+FROM scratch
+COPY --from=build / /
diff --git a/ci-amd64-deployments/build.sh b/ci-amd64-deployments/build.sh
new file mode 100755
index 00000000..8641b5ef
--- /dev/null
+++ b/ci-amd64-deployments/build.sh
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+set -e
+
+trap cleanup_exit INT TERM EXIT
+
+cleanup_exit()
+{
+ rm -f setup-sshd
+}
+
+export LANG=C
+
+DISTRIBUTION=$(basename ${PWD} | cut -f1 -d '-')
+ARCHITECTURE=$(basename ${PWD} | cut -f2 -d '-')
+
+image=linaro/ci-amd64-deployments:stable
+docker build --pull --tag=$image .
+echo $image > .docker-tag
diff --git a/ci-amd64-deployments/requirements.txt b/ci-amd64-deployments/requirements.txt
new file mode 100644
index 00000000..15eeb5c5
--- /dev/null
+++ b/ci-amd64-deployments/requirements.txt
@@ -0,0 +1,2 @@
+requests
+prometheus-client
diff --git a/ci-amd64-ledge/Dockerfile b/ci-amd64-ledge/Dockerfile
new file mode 100644
index 00000000..2f0724d8
--- /dev/null
+++ b/ci-amd64-ledge/Dockerfile
@@ -0,0 +1,24 @@
+FROM debian:bookworm
+
+ENV DEBIAN_FRONTEND=noninteractive
+
+ENV PKGS="\
+ git \
+ ca-certificates \
+ qemu-system-arm \
+ qemu-system-x86 \
+ qemu-system-gui- \
+ swtpm \
+"
+
+RUN set -e ;\
+ apt-get update -q=2 ;\
+ apt-get full-upgrade -q=2 --yes ;\
+ apt-get install -q=2 --yes --no-install-recommends ${PKGS} ;\
+ # Build QEMU
+ git clone -b v2 https://gitlab.com/terceiro/qemu-swtpm.git /tmp/qemu-swtpm ;\
+ cd /tmp/qemu-swtpm ;\
+ ./install.sh ;\
+ # Cleanup
+ apt clean ;\
+ rm -rf /var/lib/apt/lists/* /tmp/*
diff --git a/ci-amd64-ledge/build.sh b/ci-amd64-ledge/build.sh
new file mode 100755
index 00000000..196562f8
--- /dev/null
+++ b/ci-amd64-ledge/build.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+set -e
+
+trap cleanup_exit INT TERM EXIT
+
+cleanup_exit()
+{
+ rm -f setup-sshd
+}
+
+export LANG=C
+
+image=linaro/ci-amd64-ledge:stable
+docker build --pull --tag=$image .
+echo $image > .docker-tag
diff --git a/ci-amd64-llp-alpine/Dockerfile b/ci-amd64-llp-alpine/Dockerfile
index ee804cdf..9bebc7da 100644
--- a/ci-amd64-llp-alpine/Dockerfile
+++ b/ci-amd64-llp-alpine/Dockerfile
@@ -1,4 +1,4 @@
-FROM alpine
+FROM alpine:3.10
ARG APP_VERSION=?
ENV APP_VERSION=$APP_VERSION
@@ -12,12 +12,13 @@ RUN mkdir -p $APPDIR
WORKDIR $APPDIR
-RUN apk --update --no-cache add python2 py2-pip mysql-client git py-gunicorn sqlite && \
- apk --no-cache add gcc g++ python2-dev musl-dev libffi-dev postgresql-dev && \
- git clone https://git.linaro.org/infrastructure/linaro-license-protection.git/ $APPDIR && \
- pip2 install --upgrade pip setuptools six && \
- pip2 install -U -r $APPDIR/requirements.txt && \
- apk del gcc g++ python3-dev musl-dev libffi-dev
+RUN apk update && \
+ apk --no-cache add python2 py2-pip mysql-client git py2-gunicorn py2-gevent sqlite && \
+ apk --no-cache add gcc g++ python2-dev musl-dev libffi-dev postgresql-dev && \
+ git clone https://git.linaro.org/infrastructure/linaro-license-protection.git/ $APPDIR && \
+ pip2 install --upgrade pip setuptools six && \
+ pip2 install -U -r $APPDIR/requirements.txt && \
+ apk del gcc g++ python3-dev musl-dev libffi-dev
EXPOSE $PORT
diff --git a/ci-amd64-llp-alpine/build.sh b/ci-amd64-llp-alpine/build.sh
index d95f74fa..be06e09f 100755
--- a/ci-amd64-llp-alpine/build.sh
+++ b/ci-amd64-llp-alpine/build.sh
@@ -5,5 +5,5 @@ set -e
export LANG=C
image=linaro/ci-amd64-llp-alpine:latest
-docker build --pull --tag=$image .
+docker build --no-cache --pull --tag=$image .
echo $image > .docker-tag
diff --git a/ci-amd64-llp-alpine/docker_run.sh b/ci-amd64-llp-alpine/docker_run.sh
index 52c27ae1..08e1b32f 100755
--- a/ci-amd64-llp-alpine/docker_run.sh
+++ b/ci-amd64-llp-alpine/docker_run.sh
@@ -12,15 +12,14 @@ if [ -z "$DJANGO_DEBUG" ] ; then
echo "$html_header" >> /srv/header_override.html
fi
- if [ ! -z "$DJANGO_MIGRATE" ]; then
- python $APPDIR/manage.py migrate --noinput
- fi
- if [ ! -z "$DJANGO_COLLECTSTATIC" ]; then
- python $APPDIR/manage.py collectstatic --noinput
- fi
+ exec /usr/bin/gunicorn --timeout 180 -w4 -k gevent -b 0.0.0.0:$PORT $LLP_APP
+fi
- exec /usr/bin/gunicorn -w4 -b 0.0.0.0:$PORT $LLP_APP
+if [ ! -z "$DJANGO_MIGRATE" ]; then
+ python $APPDIR/manage.py migrate --noinput --settings=$DJANGO_SETTINGS_MODULE
+fi
+if [ ! -z "$DJANGO_COLLECTSTATIC" ]; then
+ python $APPDIR/manage.py collectstatic --noinput --settings=$DJANGO_SETTINGS_MODULE
fi
-python $APPDIR/manage.py migrate --noinput --settings=settings
-exec python $APPDIR/manage.py runserver 0.0.0.0:8080 --settings=settings
+exec python $APPDIR/manage.py runserver 0.0.0.0:8080 --settings=$DJANGO_SETTINGS_MODULE
diff --git a/ci-amd64-llp-alpine/test_run.sh b/ci-amd64-llp-alpine/test_run.sh
new file mode 100755
index 00000000..fd2767d7
--- /dev/null
+++ b/ci-amd64-llp-alpine/test_run.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+REPO=/tmp/test-llp-root
+
+mkdir -p $REPO/test-llp.linaro.org
+test \! -d $REPO/linaro-license-protection && (cd $REPO; git clone https://git.linaro.org/infrastructure/linaro-license-protection.git)
+
+docker run --name test-llp --rm -p 8080:8080 -v $REPO/test-llp.linaro.org:/srv -v $REPO/linaro-license-protection:/srv/linaro-license-protection linaro/ci-amd64-llp-alpine
diff --git a/ci-amd64-serverless/Dockerfile b/ci-amd64-serverless/Dockerfile
new file mode 100644
index 00000000..92fe30f9
--- /dev/null
+++ b/ci-amd64-serverless/Dockerfile
@@ -0,0 +1,17 @@
+FROM python:3.7-buster
+
+WORKDIR /usr/src/ci-serverless
+
+COPY Pipfile* ./
+
+RUN pip install pipenv awscli && \
+ pipenv install --deploy --system --dev && \
+ aws configure set default.region us-east-1
+
+RUN curl -o terraform.zip https://releases.hashicorp.com/terraform/0.12.24/terraform_0.12.24_linux_amd64.zip && \
+ unzip terraform.zip && \
+ mv terraform /bin/ && \
+ rm terraform.zip
+
+ENV LC_ALL C.UTF-8
+
diff --git a/ci-amd64-serverless/Pipfile b/ci-amd64-serverless/Pipfile
new file mode 100644
index 00000000..f04ce802
--- /dev/null
+++ b/ci-amd64-serverless/Pipfile
@@ -0,0 +1,24 @@
+[[source]]
+name = "pypi"
+url = "https://pypi.org/simple"
+verify_ssl = true
+
+[dev-packages]
+black = "*"
+flake8 = "*"
+flake8-coding = "*"
+pytest = "*"
+pytest-cov = "*"
+
+[packages]
+zappa = "*"
+flask-restful = "*"
+flask-api = "*"
+requests = "*"
+blinker = "*"
+
+[requires]
+python_version = "3.7"
+
+[pipenv]
+allow_prereleases = true
diff --git a/ci-amd64-serverless/Pipfile.lock b/ci-amd64-serverless/Pipfile.lock
new file mode 100644
index 00000000..f540745e
--- /dev/null
+++ b/ci-amd64-serverless/Pipfile.lock
@@ -0,0 +1,569 @@
+{
+ "_meta": {
+ "hash": {
+ "sha256": "cd8e1efea7d3ea0ab51a08d9f00f966f5391a12f08654b65e7c58c64d781086c"
+ },
+ "pipfile-spec": 6,
+ "requires": {
+ "python_version": "3.7"
+ },
+ "sources": [
+ {
+ "name": "pypi",
+ "url": "https://pypi.org/simple",
+ "verify_ssl": true
+ }
+ ]
+ },
+ "default": {
+ "aniso8601": {
+ "hashes": [
+ "sha256:529dcb1f5f26ee0df6c0a1ee84b7b27197c3c50fc3a6321d66c544689237d072",
+ "sha256:c033f63d028b9a58e3ab0c2c7d0532ab4bfa7452bfc788fbfe3ddabd327b181a"
+ ],
+ "version": "==8.0.0"
+ },
+ "argcomplete": {
+ "hashes": [
+ "sha256:5ae7b601be17bf38a749ec06aa07fb04e7b6b5fc17906948dc1866e7facf3740",
+ "sha256:890bdd1fcbb973ed73db241763e78b6d958580e588c2910b508c770a59ef37d7"
+ ],
+ "version": "==1.11.1"
+ },
+ "blinker": {
+ "hashes": [
+ "sha256:471aee25f3992bd325afa3772f1063dbdbbca947a041b8b89466dc00d606f8b6"
+ ],
+ "index": "pypi",
+ "version": "==1.4"
+ },
+ "boto3": {
+ "hashes": [
+ "sha256:bd005143eadea91dcba536caffcdd19d9a4dbefa7f59ddd503ef0ef2e5079c36",
+ "sha256:c205c9d69beb43f1dee6f8c30029a418afe1f82fc52a254d9f3b5ab24ee5dd00"
+ ],
+ "version": "==1.12.42"
+ },
+ "botocore": {
+ "hashes": [
+ "sha256:1b7730de543a751c2491f1510688f3c34a8b9669998d8b88f8facf6c3be3c790",
+ "sha256:2ce77c2b11253b64a3d7ec0aa696c064d6ed83c32e6288fc2d59f485f8119828"
+ ],
+ "version": "==1.15.42"
+ },
+ "certifi": {
+ "hashes": [
+ "sha256:1d987a998c75633c40847cc966fcf5904906c920a7f17ef374f5aa4282abd304",
+ "sha256:51fcb31174be6e6664c5f69e3e1691a2d72a1a12e90f872cbdb1567eb47b6519"
+ ],
+ "version": "==2020.4.5.1"
+ },
+ "cfn-flip": {
+ "hashes": [
+ "sha256:2bed32a1f4dca26dc64178d52511fd4ef778b5ccbcf32559cac884ace75bde6a"
+ ],
+ "version": "==1.2.3"
+ },
+ "chardet": {
+ "hashes": [
+ "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae",
+ "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"
+ ],
+ "version": "==3.0.4"
+ },
+ "click": {
+ "hashes": [
+ "sha256:8a18b4ea89d8820c5d0c7da8a64b2c324b4dabb695804dbfea19b9be9d88c0cc",
+ "sha256:e345d143d80bf5ee7534056164e5e112ea5e22716bbb1ce727941f4c8b471b9a"
+ ],
+ "version": "==7.1.1"
+ },
+ "docutils": {
+ "hashes": [
+ "sha256:6c4f696463b79f1fb8ba0c594b63840ebd41f059e92b31957c46b74a4599b6d0",
+ "sha256:9e4d7ecfc600058e07ba661411a2b7de2fd0fafa17d1a7f7361cd47b1175c827",
+ "sha256:a2aeea129088da402665e92e0b25b04b073c04b2dce4ab65caaa38b7ce2e1a99"
+ ],
+ "version": "==0.15.2"
+ },
+ "durationpy": {
+ "hashes": [
+ "sha256:5ef9416b527b50d722f34655becfb75e49228eb82f87b855ed1911b3314b5408"
+ ],
+ "version": "==0.5"
+ },
+ "flask": {
+ "hashes": [
+ "sha256:4efa1ae2d7c9865af48986de8aeb8504bf32c7f3d6fdc9353d34b21f4b127060",
+ "sha256:8a4fdd8936eba2512e9c85df320a37e694c93945b33ef33c89946a340a238557"
+ ],
+ "version": "==1.1.2"
+ },
+ "flask-api": {
+ "hashes": [
+ "sha256:3d4cfb2ff214af9957f61455f660b5cfa181d6112e56cda526011bbe7af2a09e",
+ "sha256:6986642e5b25b7def710ca9489ed2b88c94006bfc06eca01c78da7cf447e66e5"
+ ],
+ "index": "pypi",
+ "version": "==2.0"
+ },
+ "flask-restful": {
+ "hashes": [
+ "sha256:5ea9a5991abf2cb69b4aac19793faac6c032300505b325687d7c305ffaa76915",
+ "sha256:d891118b951921f1cec80cabb4db98ea6058a35e6404788f9e70d5b243813ec2"
+ ],
+ "index": "pypi",
+ "version": "==0.3.8"
+ },
+ "future": {
+ "hashes": [
+ "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d"
+ ],
+ "version": "==0.18.2"
+ },
+ "hjson": {
+ "hashes": [
+ "sha256:1d1727faa6aaef2973921877125a3ab7c5f6d34b93233179d01770f41fab51f9"
+ ],
+ "version": "==3.0.1"
+ },
+ "idna": {
+ "hashes": [
+ "sha256:7588d1c14ae4c77d74036e8c22ff447b26d0fde8f007354fd48a7814db15b7cb",
+ "sha256:a068a21ceac8a4d63dbfd964670474107f541babbd2250d61922f029858365fa"
+ ],
+ "version": "==2.9"
+ },
+ "itsdangerous": {
+ "hashes": [
+ "sha256:321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19",
+ "sha256:b12271b2047cb23eeb98c8b5622e2e5c5e9abd9784a153e9d8ef9cb4dd09d749"
+ ],
+ "version": "==1.1.0"
+ },
+ "jinja2": {
+ "hashes": [
+ "sha256:c10142f819c2d22bdcd17548c46fa9b77cf4fda45097854c689666bf425e7484",
+ "sha256:c922560ac46888d47384de1dbdc3daaa2ea993af4b26a436dec31fa2c19ec668"
+ ],
+ "version": "==3.0.0a1"
+ },
+ "jmespath": {
+ "hashes": [
+ "sha256:695cb76fa78a10663425d5b73ddc5714eb711157e52704d69be03b1a02ba4fec",
+ "sha256:cca55c8d153173e21baa59983015ad0daf603f9cb799904ff057bfb8ff8dc2d9"
+ ],
+ "version": "==0.9.5"
+ },
+ "kappa": {
+ "hashes": [
+ "sha256:4b5b372872f25d619e427e04282551048dc975a107385b076b3ffc6406a15833",
+ "sha256:4d6b7b3accce4a0aaaac92b36237a6304f0f2fffbbe3caea3f7c9f52d12c9989"
+ ],
+ "version": "==0.6.0"
+ },
+ "markupsafe": {
+ "hashes": [
+ "sha256:06358015a4dee8ee23ae426bf885616ab3963622defd829eb45b44e3dee3515f",
+ "sha256:0b0c4fc852c5f02c6277ef3b33d23fcbe89b1b227460423e3335374da046b6db",
+ "sha256:267677fc42afed5094fc5ea1c4236bbe4b6a00fe4b08e93451e65ae9048139c7",
+ "sha256:303cb70893e2c345588fb5d5b86e0ca369f9bb56942f03064c5e3e75fa7a238a",
+ "sha256:3c9b624a0d9ed5a5093ac4edc4e823e6b125441e60ef35d36e6f4a6fdacd5054",
+ "sha256:42033e14cae1f6c86fc0c3e90d04d08ce73ac8e46ba420a0d22d545c2abd4977",
+ "sha256:4e4a99b6af7bdc0856b50020c095848ec050356a001e1f751510aef6ab14d0e0",
+ "sha256:4eb07faad54bb07427d848f31030a65a49ebb0cec0b30674f91cf1ddd456bfe4",
+ "sha256:63a7161cd8c2bc563feeda45df62f42c860dd0675e2b8da2667f25bb3c95eaba",
+ "sha256:68e0fd039b68d2945b4beb947d4023ca7f8e95b708031c345762efba214ea761",
+ "sha256:8092a63397025c2f655acd42784b2a1528339b90b987beb9253f22e8cdbb36c3",
+ "sha256:841218860683c0f2223e24756843d84cc49cccdae6765e04962607754a52d3e0",
+ "sha256:94076b2314bd2f6cfae508ad65b4d493e3a58a50112b7a2cbb6287bdbc404ae8",
+ "sha256:9d22aff1c5322e402adfb3ce40839a5056c353e711c033798cf4f02eb9f5124d",
+ "sha256:b0e4584f62b3e5f5c1a7bcefd2b52f236505e6ef032cc508caa4f4c8dc8d3af1",
+ "sha256:b1163ffc1384d242964426a8164da12dbcdbc0de18ea36e2c34b898ed38c3b45",
+ "sha256:beac28ed60c8e838301226a7a85841d0af2068eba2dcb1a58c2d32d6c05e440e",
+ "sha256:c29f096ce79c03054a1101d6e5fe6bf04b0bb489165d5e0e9653fb4fe8048ee1",
+ "sha256:c58779966d53e5f14ba393d64e2402a7926601d1ac8adeb4e83893def79d0428",
+ "sha256:cfe14b37908eaf7d5506302987228bff69e1b8e7071ccd4e70fd0283b1b47f0b",
+ "sha256:e834249c45aa9837d0753351cdca61a4b8b383cc9ad0ff2325c97ff7b69e72a6",
+ "sha256:eed1b234c4499811ee85bcefa22ef5e466e75d132502226ed29740d593316c1f"
+ ],
+ "version": "==2.0.0a1"
+ },
+ "pip-tools": {
+ "hashes": [
+ "sha256:2045d0414e9db71c036443efa229ff1b76dfe47a3cb022d6154a1c9e207f0867",
+ "sha256:4fdc317a331de8affe481509d7efea7e72fc5cca6c9f6cacbe778617680961fe"
+ ],
+ "version": "==5.0.0"
+ },
+ "placebo": {
+ "hashes": [
+ "sha256:03157f8527bbc2965b71b88f4a139ef8038618b346787f20d63e3c5da541b047"
+ ],
+ "version": "==0.9.0"
+ },
+ "python-dateutil": {
+ "hashes": [
+ "sha256:891c38b2a02f5bb1be3e4793866c8df49c7d19baabf9c1bad62547e0b4866aca",
+ "sha256:95511bae634d69bc7329ba55e646499a842bc4ec342ad54a8cdb65645a0aad3c"
+ ],
+ "version": "==2.6.1"
+ },
+ "python-slugify": {
+ "hashes": [
+ "sha256:a8fc3433821140e8f409a9831d13ae5deccd0b033d4744d94b31fea141bdd84c"
+ ],
+ "version": "==4.0.0"
+ },
+ "pytz": {
+ "hashes": [
+ "sha256:1c557d7d0e871de1f5ccd5833f60fb2550652da6be2693c1e02300743d21500d",
+ "sha256:b02c06db6cf09c12dd25137e563b31700d3b80fcc4ad23abb7a315f2789819be"
+ ],
+ "version": "==2019.3"
+ },
+ "pyyaml": {
+ "hashes": [
+ "sha256:06a0d7ba600ce0b2d2fe2e78453a470b5a6e000a985dd4a4e54e436cc36b0e97",
+ "sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76",
+ "sha256:4f4b913ca1a7319b33cfb1369e91e50354d6f07a135f3b901aca02aa95940bd2",
+ "sha256:69f00dca373f240f842b2931fb2c7e14ddbacd1397d57157a9b005a6a9942648",
+ "sha256:73f099454b799e05e5ab51423c7bcf361c58d3206fa7b0d555426b1f4d9a3eaf",
+ "sha256:74809a57b329d6cc0fdccee6318f44b9b8649961fa73144a98735b0aaf029f1f",
+ "sha256:7739fc0fa8205b3ee8808aea45e968bc90082c10aef6ea95e855e10abf4a37b2",
+ "sha256:95f71d2af0ff4227885f7a6605c37fd53d3a106fcab511b8860ecca9fcf400ee",
+ "sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d",
+ "sha256:cc8955cfbfc7a115fa81d85284ee61147059a753344bc51098f3ccd69b0d7e0c",
+ "sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a"
+ ],
+ "version": "==5.3.1"
+ },
+ "requests": {
+ "hashes": [
+ "sha256:43999036bfa82904b6af1d99e4882b560e5e2c68e5c4b0aa03b655f3d7d73fee",
+ "sha256:b3f43d496c6daba4493e7c431722aeb7dbc6288f52a6e04e7b6023b0247817e6"
+ ],
+ "index": "pypi",
+ "version": "==2.23.0"
+ },
+ "s3transfer": {
+ "hashes": [
+ "sha256:2482b4259524933a022d59da830f51bd746db62f047d6eb213f2f8855dcb8a13",
+ "sha256:921a37e2aefc64145e7b73d50c71bb4f26f46e4c9f414dc648c6245ff92cf7db"
+ ],
+ "version": "==0.3.3"
+ },
+ "six": {
+ "hashes": [
+ "sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a",
+ "sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c"
+ ],
+ "version": "==1.14.0"
+ },
+ "text-unidecode": {
+ "hashes": [
+ "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8",
+ "sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93"
+ ],
+ "version": "==1.3"
+ },
+ "toml": {
+ "hashes": [
+ "sha256:229f81c57791a41d65e399fc06bf0848bab550a9dfd5ed66df18ce5f05e73d5c",
+ "sha256:235682dd292d5899d361a811df37e04a8828a5b1da3115886b73cf81ebc9100e"
+ ],
+ "version": "==0.10.0"
+ },
+ "tqdm": {
+ "hashes": [
+ "sha256:00339634a22c10a7a22476ee946bbde2dbe48d042ded784e4d88e0236eca5d81",
+ "sha256:ea9e3fd6bd9a37e8783d75bfc4c1faf3c6813da6bd1c3e776488b41ec683af94"
+ ],
+ "version": "==4.45.0"
+ },
+ "troposphere": {
+ "hashes": [
+ "sha256:3dbc8c438b9694a39035e29bbcb00fcd3890c9e24a6b938873d6e9afae6e4d9c"
+ ],
+ "version": "==2.6.0"
+ },
+ "urllib3": {
+ "hashes": [
+ "sha256:3018294ebefce6572a474f0604c2021e33b3fd8006ecd11d62107a5d2a963527",
+ "sha256:88206b0eb87e6d677d424843ac5209e3fb9d0190d0ee169599165ec25e9d9115"
+ ],
+ "markers": "python_version != '3.4'",
+ "version": "==1.25.9"
+ },
+ "werkzeug": {
+ "hashes": [
+ "sha256:1e0dedc2acb1f46827daa2e399c1485c8fa17c0d8e70b6b875b4e7f54bf408d2",
+ "sha256:b353856d37dec59d6511359f97f6a4b2468442e454bd1c98298ddce53cac1f04"
+ ],
+ "version": "==0.16.1"
+ },
+ "wheel": {
+ "hashes": [
+ "sha256:8788e9155fe14f54164c1b9eb0a319d98ef02c160725587ad60f14ddc57b6f96",
+ "sha256:df277cb51e61359aba502208d680f90c0493adec6f0e848af94948778aed386e"
+ ],
+ "version": "==0.34.2"
+ },
+ "wsgi-request-logger": {
+ "hashes": [
+ "sha256:445d7ec52799562f812006394d0b4a7064b37084c6ea6bd74ea7a2136c97ed83"
+ ],
+ "version": "==0.4.6"
+ },
+ "zappa": {
+ "hashes": [
+ "sha256:c6e740334c1c39e644a345124b7317003420b632a8f7a6811d18b82bb16e2f8e",
+ "sha256:ccfc336d3bc48a6898cbbd157e16653f717dbe3ca37f933ce40acfe242a03a40"
+ ],
+ "index": "pypi",
+ "version": "==0.51.0"
+ }
+ },
+ "develop": {
+ "appdirs": {
+ "hashes": [
+ "sha256:9e5896d1372858f8dd3344faf4e5014d21849c756c8d5701f78f8a103b372d92",
+ "sha256:d8b24664561d0d34ddfaec54636d502d7cea6e29c3eaf68f3df6180863e2166e"
+ ],
+ "version": "==1.4.3"
+ },
+ "attrs": {
+ "hashes": [
+ "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c",
+ "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72"
+ ],
+ "version": "==19.3.0"
+ },
+ "black": {
+ "hashes": [
+ "sha256:1b30e59be925fafc1ee4565e5e08abef6b03fe455102883820fe5ee2e4734e0b",
+ "sha256:c2edb73a08e9e0e6f65a0e6af18b059b8b1cdd5bef997d7a0b181df93dc81539"
+ ],
+ "index": "pypi",
+ "version": "==19.10b0"
+ },
+ "click": {
+ "hashes": [
+ "sha256:8a18b4ea89d8820c5d0c7da8a64b2c324b4dabb695804dbfea19b9be9d88c0cc",
+ "sha256:e345d143d80bf5ee7534056164e5e112ea5e22716bbb1ce727941f4c8b471b9a"
+ ],
+ "version": "==7.1.1"
+ },
+ "coverage": {
+ "hashes": [
+ "sha256:00f1d23f4336efc3b311ed0d807feb45098fc86dee1ca13b3d6768cdab187c8a",
+ "sha256:01333e1bd22c59713ba8a79f088b3955946e293114479bbfc2e37d522be03355",
+ "sha256:0cb4be7e784dcdc050fc58ef05b71aa8e89b7e6636b99967fadbdba694cf2b65",
+ "sha256:0e61d9803d5851849c24f78227939c701ced6704f337cad0a91e0972c51c1ee7",
+ "sha256:1601e480b9b99697a570cea7ef749e88123c04b92d84cedaa01e117436b4a0a9",
+ "sha256:2742c7515b9eb368718cd091bad1a1b44135cc72468c731302b3d641895b83d1",
+ "sha256:2d27a3f742c98e5c6b461ee6ef7287400a1956c11421eb574d843d9ec1f772f0",
+ "sha256:402e1744733df483b93abbf209283898e9f0d67470707e3c7516d84f48524f55",
+ "sha256:5c542d1e62eece33c306d66fe0a5c4f7f7b3c08fecc46ead86d7916684b36d6c",
+ "sha256:5f2294dbf7875b991c381e3d5af2bcc3494d836affa52b809c91697449d0eda6",
+ "sha256:6402bd2fdedabbdb63a316308142597534ea8e1895f4e7d8bf7476c5e8751fef",
+ "sha256:66460ab1599d3cf894bb6baee8c684788819b71a5dc1e8fa2ecc152e5d752019",
+ "sha256:782caea581a6e9ff75eccda79287daefd1d2631cc09d642b6ee2d6da21fc0a4e",
+ "sha256:79a3cfd6346ce6c13145731d39db47b7a7b859c0272f02cdb89a3bdcbae233a0",
+ "sha256:7a5bdad4edec57b5fb8dae7d3ee58622d626fd3a0be0dfceda162a7035885ecf",
+ "sha256:8fa0cbc7ecad630e5b0f4f35b0f6ad419246b02bc750de7ac66db92667996d24",
+ "sha256:a027ef0492ede1e03a8054e3c37b8def89a1e3c471482e9f046906ba4f2aafd2",
+ "sha256:a3f3654d5734a3ece152636aad89f58afc9213c6520062db3978239db122f03c",
+ "sha256:a82b92b04a23d3c8a581fc049228bafde988abacba397d57ce95fe95e0338ab4",
+ "sha256:acf3763ed01af8410fc36afea23707d4ea58ba7e86a8ee915dfb9ceff9ef69d0",
+ "sha256:adeb4c5b608574a3d647011af36f7586811a2c1197c861aedb548dd2453b41cd",
+ "sha256:b83835506dfc185a319031cf853fa4bb1b3974b1f913f5bb1a0f3d98bdcded04",
+ "sha256:bb28a7245de68bf29f6fb199545d072d1036a1917dca17a1e75bbb919e14ee8e",
+ "sha256:bf9cb9a9fd8891e7efd2d44deb24b86d647394b9705b744ff6f8261e6f29a730",
+ "sha256:c317eaf5ff46a34305b202e73404f55f7389ef834b8dbf4da09b9b9b37f76dd2",
+ "sha256:dbe8c6ae7534b5b024296464f387d57c13caa942f6d8e6e0346f27e509f0f768",
+ "sha256:de807ae933cfb7f0c7d9d981a053772452217df2bf38e7e6267c9cbf9545a796",
+ "sha256:dead2ddede4c7ba6cb3a721870f5141c97dc7d85a079edb4bd8d88c3ad5b20c7",
+ "sha256:dec5202bfe6f672d4511086e125db035a52b00f1648d6407cc8e526912c0353a",
+ "sha256:e1ea316102ea1e1770724db01998d1603ed921c54a86a2efcb03428d5417e489",
+ "sha256:f90bfc4ad18450c80b024036eaf91e4a246ae287701aaa88eaebebf150868052"
+ ],
+ "version": "==5.1"
+ },
+ "entrypoints": {
+ "hashes": [
+ "sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19",
+ "sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451"
+ ],
+ "version": "==0.3"
+ },
+ "flake8": {
+ "hashes": [
+ "sha256:45681a117ecc81e870cbf1262835ae4af5e7a8b08e40b944a8a6e6b895914cfb",
+ "sha256:49356e766643ad15072a789a20915d3c91dc89fd313ccd71802303fd67e4deca"
+ ],
+ "index": "pypi",
+ "version": "==3.7.9"
+ },
+ "flake8-coding": {
+ "hashes": [
+ "sha256:79704112c44d09d4ab6c8965e76a20c3f7073d52146db60303bce777d9612260",
+ "sha256:b8f4d5157a8f74670e6cfea732c3d9f4291a4e994c8701d2c55f787c6e6cb741"
+ ],
+ "index": "pypi",
+ "version": "==1.3.2"
+ },
+ "mccabe": {
+ "hashes": [
+ "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42",
+ "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"
+ ],
+ "version": "==0.6.1"
+ },
+ "more-itertools": {
+ "hashes": [
+ "sha256:5dd8bcf33e5f9513ffa06d5ad33d78f31e1931ac9a18f33d37e77a180d393a7c",
+ "sha256:b1ddb932186d8a6ac451e1d95844b382f55e12686d51ca0c68b6f61f2ab7a507"
+ ],
+ "version": "==8.2.0"
+ },
+ "packaging": {
+ "hashes": [
+ "sha256:3c292b474fda1671ec57d46d739d072bfd495a4f51ad01a055121d81e952b7a3",
+ "sha256:82f77b9bee21c1bafbf35a84905d604d5d1223801d639cf3ed140bd651c08752"
+ ],
+ "version": "==20.3"
+ },
+ "pathspec": {
+ "hashes": [
+ "sha256:7d91249d21749788d07a2d0f94147accd8f845507400749ea19c1ec9054a12b0",
+ "sha256:da45173eb3a6f2a5a487efba21f050af2b41948be6ab52b6a1e3ff22bb8b7061"
+ ],
+ "version": "==0.8.0"
+ },
+ "pluggy": {
+ "hashes": [
+ "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0",
+ "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"
+ ],
+ "version": "==0.13.1"
+ },
+ "py": {
+ "hashes": [
+ "sha256:5e27081401262157467ad6e7f851b7aa402c5852dbcb3dae06768434de5752aa",
+ "sha256:c20fdd83a5dbc0af9efd622bee9a5564e278f6380fffcacc43ba6f43db2813b0"
+ ],
+ "version": "==1.8.1"
+ },
+ "pycodestyle": {
+ "hashes": [
+ "sha256:95a2219d12372f05704562a14ec30bc76b05a5b297b21a5dfe3f6fac3491ae56",
+ "sha256:e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c"
+ ],
+ "version": "==2.5.0"
+ },
+ "pyflakes": {
+ "hashes": [
+ "sha256:17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0",
+ "sha256:d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2"
+ ],
+ "version": "==2.1.1"
+ },
+ "pyparsing": {
+ "hashes": [
+ "sha256:67199f0c41a9c702154efb0e7a8cc08accf830eb003b4d9fa42c4059002e2492",
+ "sha256:700d17888d441604b0bd51535908dcb297561b040819cccde647a92439db5a2a"
+ ],
+ "version": "==3.0.0a1"
+ },
+ "pytest": {
+ "hashes": [
+ "sha256:0e5b30f5cb04e887b91b1ee519fa3d89049595f428c1db76e73bd7f17b09b172",
+ "sha256:84dde37075b8805f3d1f392cc47e38a0e59518fb46a431cfdaf7cf1ce805f970"
+ ],
+ "index": "pypi",
+ "version": "==5.4.1"
+ },
+ "pytest-cov": {
+ "hashes": [
+ "sha256:cc6742d8bac45070217169f5f72ceee1e0e55b0221f54bcf24845972d3a47f2b",
+ "sha256:cdbdef4f870408ebdbfeb44e63e07eb18bb4619fae852f6e760645fa36172626"
+ ],
+ "index": "pypi",
+ "version": "==2.8.1"
+ },
+ "regex": {
+ "hashes": [
+ "sha256:08119f707f0ebf2da60d2f24c2f39ca616277bb67ef6c92b72cbf90cbe3a556b",
+ "sha256:0ce9537396d8f556bcfc317c65b6a0705320701e5ce511f05fc04421ba05b8a8",
+ "sha256:1cbe0fa0b7f673400eb29e9ef41d4f53638f65f9a2143854de6b1ce2899185c3",
+ "sha256:2294f8b70e058a2553cd009df003a20802ef75b3c629506be20687df0908177e",
+ "sha256:23069d9c07e115537f37270d1d5faea3e0bdded8279081c4d4d607a2ad393683",
+ "sha256:24f4f4062eb16c5bbfff6a22312e8eab92c2c99c51a02e39b4eae54ce8255cd1",
+ "sha256:295badf61a51add2d428a46b8580309c520d8b26e769868b922750cf3ce67142",
+ "sha256:2a3bf8b48f8e37c3a40bb3f854bf0121c194e69a650b209628d951190b862de3",
+ "sha256:4385f12aa289d79419fede43f979e372f527892ac44a541b5446617e4406c468",
+ "sha256:5635cd1ed0a12b4c42cce18a8d2fb53ff13ff537f09de5fd791e97de27b6400e",
+ "sha256:5bfed051dbff32fd8945eccca70f5e22b55e4148d2a8a45141a3b053d6455ae3",
+ "sha256:7e1037073b1b7053ee74c3c6c0ada80f3501ec29d5f46e42669378eae6d4405a",
+ "sha256:90742c6ff121a9c5b261b9b215cb476eea97df98ea82037ec8ac95d1be7a034f",
+ "sha256:a58dd45cb865be0ce1d5ecc4cfc85cd8c6867bea66733623e54bd95131f473b6",
+ "sha256:c087bff162158536387c53647411db09b6ee3f9603c334c90943e97b1052a156",
+ "sha256:c162a21e0da33eb3d31a3ac17a51db5e634fc347f650d271f0305d96601dc15b",
+ "sha256:c9423a150d3a4fc0f3f2aae897a59919acd293f4cb397429b120a5fcd96ea3db",
+ "sha256:ccccdd84912875e34c5ad2d06e1989d890d43af6c2242c6fcfa51556997af6cd",
+ "sha256:e91ba11da11cf770f389e47c3f5c30473e6d85e06d7fd9dcba0017d2867aab4a",
+ "sha256:ea4adf02d23b437684cd388d557bf76e3afa72f7fed5bbc013482cc00c816948",
+ "sha256:fb95debbd1a824b2c4376932f2216cc186912e389bdb0e27147778cf6acb3f89"
+ ],
+ "version": "==2020.4.4"
+ },
+ "six": {
+ "hashes": [
+ "sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a",
+ "sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c"
+ ],
+ "version": "==1.14.0"
+ },
+ "toml": {
+ "hashes": [
+ "sha256:229f81c57791a41d65e399fc06bf0848bab550a9dfd5ed66df18ce5f05e73d5c",
+ "sha256:235682dd292d5899d361a811df37e04a8828a5b1da3115886b73cf81ebc9100e"
+ ],
+ "version": "==0.10.0"
+ },
+ "typed-ast": {
+ "hashes": [
+ "sha256:0666aa36131496aed8f7be0410ff974562ab7eeac11ef351def9ea6fa28f6355",
+ "sha256:0c2c07682d61a629b68433afb159376e24e5b2fd4641d35424e462169c0a7919",
+ "sha256:249862707802d40f7f29f6e1aad8d84b5aa9e44552d2cc17384b209f091276aa",
+ "sha256:24995c843eb0ad11a4527b026b4dde3da70e1f2d8806c99b7b4a7cf491612652",
+ "sha256:269151951236b0f9a6f04015a9004084a5ab0d5f19b57de779f908621e7d8b75",
+ "sha256:4083861b0aa07990b619bd7ddc365eb7fa4b817e99cf5f8d9cf21a42780f6e01",
+ "sha256:498b0f36cc7054c1fead3d7fc59d2150f4d5c6c56ba7fb150c013fbc683a8d2d",
+ "sha256:4e3e5da80ccbebfff202a67bf900d081906c358ccc3d5e3c8aea42fdfdfd51c1",
+ "sha256:6daac9731f172c2a22ade6ed0c00197ee7cc1221aa84cfdf9c31defeb059a907",
+ "sha256:715ff2f2df46121071622063fc7543d9b1fd19ebfc4f5c8895af64a77a8c852c",
+ "sha256:73d785a950fc82dd2a25897d525d003f6378d1cb23ab305578394694202a58c3",
+ "sha256:8c8aaad94455178e3187ab22c8b01a3837f8ee50e09cf31f1ba129eb293ec30b",
+ "sha256:8ce678dbaf790dbdb3eba24056d5364fb45944f33553dd5869b7580cdbb83614",
+ "sha256:aaee9905aee35ba5905cfb3c62f3e83b3bec7b39413f0a7f19be4e547ea01ebb",
+ "sha256:bcd3b13b56ea479b3650b82cabd6b5343a625b0ced5429e4ccad28a8973f301b",
+ "sha256:c9e348e02e4d2b4a8b2eedb48210430658df6951fa484e59de33ff773fbd4b41",
+ "sha256:d205b1b46085271b4e15f670058ce182bd1199e56b317bf2ec004b6a44f911f6",
+ "sha256:d43943ef777f9a1c42bf4e552ba23ac77a6351de620aa9acf64ad54933ad4d34",
+ "sha256:d5d33e9e7af3b34a40dc05f498939f0ebf187f07c385fd58d591c533ad8562fe",
+ "sha256:fc0fea399acb12edbf8a628ba8d2312f583bdbdb3335635db062fa98cf71fca4",
+ "sha256:fe460b922ec15dd205595c9b5b99e2f056fd98ae8f9f56b888e7a17dc2b757e7"
+ ],
+ "version": "==1.4.1"
+ },
+ "wcwidth": {
+ "hashes": [
+ "sha256:cafe2186b3c009a04067022ce1dcd79cb38d8d65ee4f4791b8888d6599d1bbe1",
+ "sha256:ee73862862a156bf77ff92b09034fc4825dd3af9cf81bc5b360668d425f3c5f1"
+ ],
+ "version": "==0.1.9"
+ }
+ }
+}
diff --git a/trusty-amd64-art/build.sh b/ci-amd64-serverless/build.sh
index 14167821..f87632a0 100755
--- a/trusty-amd64-art/build.sh
+++ b/ci-amd64-serverless/build.sh
@@ -2,11 +2,18 @@
set -e
+trap cleanup_exit INT TERM EXIT
+
+cleanup_exit()
+{
+ rm -f setup-sshd
+}
+
export LANG=C
DISTRIBUTION=$(basename ${PWD} | cut -f1 -d '-')
ARCHITECTURE=$(basename ${PWD} | cut -f2 -d '-')
-image=linaro/ci-${ARCHITECTURE}-art-ubuntu:${DISTRIBUTION}
+image=linaro/ci-amd64-serverless:stable
docker build --pull --tag=$image .
echo $image > .docker-tag
diff --git a/fedora23-aarch64-openjdk/Dockerfile b/fedora23-aarch64-openjdk/Dockerfile
deleted file mode 100644
index b5fd8db7..00000000
--- a/fedora23-aarch64-openjdk/Dockerfile
+++ /dev/null
@@ -1,30 +0,0 @@
-FROM quay.io/fathi_boudra/fedora:23-aarch64
-
-RUN dnf -y update \
- && dnf --nogpgcheck --setopt=tsflags=nodocs -y install \
- alsa-lib-devel \
- ant \
- cups-devel \
- freetype-devel \
- gcc-c++ \
- git \
- java-1.8.0-openjdk \
- mercurial \
- libX11-devel \
- libXext-devel \
- libXrender-devel \
- libXt-devel \
- libXtst-devel \
- openssh-server \
- pkgconfig \
- xorg-x11-server-Xvfb \
- && rm -rf /var/cache/dnf/* /var/cache/yum/*
-
-RUN useradd buildslave \
- && echo 'buildslave ALL = NOPASSWD: ALL' > /etc/sudoers.d/jenkins \
- && chmod 0440 /etc/sudoers.d/jenkins \
- && mkdir -p /var/run/sshd \
- && /usr/sbin/sshd-keygen
-
-EXPOSE 22
-CMD ["/usr/sbin/sshd", "-D"]
diff --git a/fedora23-aarch64/Dockerfile b/fedora23-aarch64/Dockerfile
deleted file mode 100644
index 325d9509..00000000
--- a/fedora23-aarch64/Dockerfile
+++ /dev/null
@@ -1,17 +0,0 @@
-FROM linaro/base-aarch64-fedora:23
-
-RUN dnf -y update \
- && dnf --nogpgcheck --setopt=tsflags=nodocs -y install \
- git \
- java-1.8.0-openjdk \
- openssh-server \
- && rm -rf /var/cache/dnf/* /var/cache/yum/*
-
-RUN useradd buildslave \
- && echo 'buildslave ALL = NOPASSWD: ALL' > /etc/sudoers.d/jenkins \
- && chmod 0440 /etc/sudoers.d/jenkins \
- && mkdir -p /var/run/sshd \
- && /usr/sbin/sshd-keygen
-
-EXPOSE 22
-CMD ["/usr/sbin/sshd", "-D"]
diff --git a/fedora23-aarch64/build.sh b/fedora23-aarch64/build.sh
deleted file mode 100755
index 06af9587..00000000
--- a/fedora23-aarch64/build.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh
-
-set -e
-
-export LANG=C
-
-ARCHITECTURE=$(basename ${PWD} | cut -f2 -d '-')
-
-image=linaro/ci-${ARCHITECTURE}-fedora:23
-docker build --pull --tag=$image .
-echo $image > .docker-tag
diff --git a/focal-amd64-android-lava/Dockerfile b/focal-amd64-android-lava/Dockerfile
new file mode 100644
index 00000000..f11045c4
--- /dev/null
+++ b/focal-amd64-android-lava/Dockerfile
@@ -0,0 +1,60 @@
+# Use the official image as a parent image.
+FROM ubuntu:20.04
+
+# Set the working directory.
+WORKDIR /linaro-android
+
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y \
+ aapt \
+ apt-utils \
+ coreutils \
+ curl \
+ git \
+ inetutils-ping \
+ iproute2 \
+ lib32gcc1 \
+ lib32z1-dev \
+ libc6-dev-i386 \
+ libcurl4 \
+ openjdk-11-jdk-headless \
+ openjdk-17-jdk-headless \
+ protobuf-compiler \
+ psmisc \
+ python3 \
+ python-is-python3 \
+ python-lxml \
+ python-pexpect \
+ python-protobuf \
+ python-setuptools \
+ sudo \
+ tar \
+ unzip \
+ usbutils \
+ wget \
+ xz-utils \
+ zip \
+ && apt-get clean \
+ && rm -rf \
+ /etc/apt/sources.list.d/*.key \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+
+# https://developer.android.com/studio/releases/platform-tools
+RUN curl -SL https://dl.google.com/android/repository/platform-tools_r34.0.5-linux.zip -o platform-tools_r34.0.5-linux.zip \
+ && unzip platform-tools_r34.0.5-linux.zip \
+ && rm -f /usr/bin/fastboot /usr/bin/adb \
+ && ln -s /linaro-android/platform-tools/fastboot /usr/bin/fastboot \
+ && ln -s /linaro-android/platform-tools/adb /usr/bin/adb \
+ && rm -f platform-tools_r34.0.5-linux.zip
+
+# According to the document here:
+# https://developer.android.com/studio/command-line/aapt2#download_aapt2
+# And here is the page link:
+# https://maven.google.com/web/index.html#com.android.tools.build:aapt2:8.1.0-alpha10-9603961
+RUN curl -SL "https://dl.google.com/android/maven2/com/android/tools/build/aapt2/8.1.0-alpha10-9603961/aapt2-8.1.0-alpha10-9603961-linux.jar" -o aapt2-8.1.0-alpha10-9603961-linux.jar \
+ && unzip aapt2-8.1.0-alpha10-9603961-linux.jar aapt2 \
+ && rm -f /usr/bin/aapt2 \
+ && ln -s /linaro-android/aapt2 /usr/bin/aapt2 \
+ && rm -f aapt2-8.1.0-alpha10-9603961-linux.jar
diff --git a/focal-amd64-android-lava/build.sh b/focal-amd64-android-lava/build.sh
new file mode 100755
index 00000000..1de8f09b
--- /dev/null
+++ b/focal-amd64-android-lava/build.sh
@@ -0,0 +1,7 @@
+#!/bin/bash -ex
+
+# definition of tag: baseDockerImageVersion:year.month.date-numberOfTheDay
+tag="focal-2024.02.20-01"
+image="linaro/lava-android-test:${tag}"
+docker build --pull --tag ${image} -f Dockerfile .
+echo $image > .docker-tag
diff --git a/focal-amd64-tcwg-base/Dockerfile b/focal-amd64-tcwg-base/Dockerfile
new file mode 100644
index 00000000..8f3e23d0
--- /dev/null
+++ b/focal-amd64-tcwg-base/Dockerfile
@@ -0,0 +1,328 @@
+# Auto generated by ./tcwg-base/generate-dockerfiles.sh from tcwg-base/Dockerfile.in. Do not edit.
+FROM ubuntu:focal
+# Use bash for better string escaping (on Ubuntu, /bin/sh is dash).
+SHELL ["/bin/bash", "-c"]
+# Unminimize Ubuntu to install contrib files of git (after package
+# update, otherwise unminimize's "apt upgrade" might fail).
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y \
+ && echo y | unminimize \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y devscripts \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ alien \
+ autoconf \
+ autogen \
+ automake \
+ bc \
+ bind9-host \
+ bison \
+ binutils-dev \
+ bsd-mailx \
+ build-essential \
+ byacc \
+ ccache \
+ ccrypt \
+ chrpath \
+ clang \
+ curl \
+ debhelper \
+ default-jre \
+ dejagnu \
+ dh-autoreconf \
+ dh-translations \
+ distro-info-data \
+ emacs \
+ fakeroot \
+ flex \
+ fp-compiler \
+ gawk \
+ gdc \
+ gdb \
+ gdbserver \
+# gettext is needed according to README-maintainer-mode
+ gettext \
+ gfortran \
+ git \
+ # git-annex : is now used to store bmk results in base-artifacts
+ git-annex \
+ gm2 \
+ gnat \
+ gobjc \
+ gobjc++ \
+ golang \
+ groff \
+ guile-3.0 \
+ guile-3.0-dev \
+ less \
+# libc6-dbg is necessary for armhf debugging, but also helps on aarch64.
+ libc6-dbg \
+ libcc1-0 \
+# For building lldb.
+ libedit-dev \
+ libexpat1-dev \
+ libffi-dev \
+ libglib2.0-dev \
+ libgmp-dev \
+# libjpeg is necessary for building jipdate
+ libjpeg-dev \
+ liblzma-dev \
+ libmpc-dev \
+ libmpfr-dev \
+# We need libncurses5 for ancient clang-3289846 used for renderscript AOSP.
+ libncurses5 \
+ libncurses5-dev \
+ libpixman-1-dev \
+ libpython3-dev \
+ libreadline-dev \
+ libssl-dev \
+ libtcnative-1 \
+# Our bionic-built llvm releases expect to find this but
+# focal installs libtinfo6 instead.
+ libtinfo5 \
+ libtool \
+# For building lldb.
+ libxml2-dev \
+ llvm \
+ locales \
+ lzop \
+ make \
+ mingw-w64 \
+ moreutils \
+ net-tools \
+ netcat \
+ nfs-kernel-server \
+ ninja-build \
+ ntp \
+ openssh-server \
+ pkg-config \
+ psmisc \
+ python3-dev \
+ python3-pip \
+ python3-setuptools \
+ python3-venv \
+ python3-wheel \
+ python3-pandas \
+ python3-numpy \
+ python3-scipy \
+# Symlink python to python3 to make upstream "repo", which is downloaded
+# by distro's repo, happy. Also needed to run lnt checks on focal.
+ python-is-python3 \
+ rsync \
+# sqlite3 is used by lnt test suite
+ sqlite3 \
+ subversion \
+ sudo \
+ swig \
+# systemtap-sdt-dev allows building glibc with probes, which GDB uses to
+# detect shared library events.
+ systemtap-sdt-dev \
+ tclsh \
+ texinfo \
+ texlive-fonts-recommended \
+ texlive-latex-recommended \
+ time \
+# tox is used to run lnt test suite
+ tox \
+ unifdef \
+ valgrind \
+ vim \
+# virtualenv is used for lnt environment
+ virtualenv \
+ wget \
+# xsltproc is needed by GDB in maintainer mode
+ xsltproc \
+ xz-utils \
+ zip \
+ zlib1g-dev \
+ shellcheck \
+# Update tzdata, because some base images have an incorrect file for UTC.
+ && DEBIAN_FRONTEND=noninteractive apt-get install --reinstall tzdata \
+ && rm -f /etc/ssh/ssh_host_*_key* \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+RUN install -D -p -m0755 /usr/share/doc/git/contrib/workdir/git-new-workdir /usr/local/bin/git-new-workdir \
+ && sed -i -e 's:^session *required *pam_loginuid.so:# session required pam_loginuid.so:' /etc/pam.d/sshd \
+ && mkdir -p /var/run/sshd \
+ && sed -i \
+ -e "/.*MaxStartups.*/d" \
+ -e "/.*MaxSessions.*/d" /etc/ssh/sshd_config \
+ && echo "MaxStartups 256" >> /etc/ssh/sshd_config \
+ && echo "MaxSessions 256" >> /etc/ssh/sshd_config \
+ && locale-gen en_US.UTF-8 && update-locale LANG=en_US.UTF-8 \
+ && pip3 install git-review \
+ && pip3 install psutil \
+# Patchworks client for pre-commit testing with "-f yaml" support and
+# shyaml tool to parse its output; these are used in jenkins-scripts/pw-*.sh.
+ && pip3 install git-pw \
+ && pip3 install shyaml \
+# For testing lldb.
+ && pip3 install pexpect \
+# PIP on jammy (all arches) and focal (armhf) has a version mismatch for pyyaml.
+ && pip3 install jenkins-job-builder==2.10.0 \
+ && git clone --depth 1 https://git.linaro.org/infrastructure/jjb-linaro-plugin.git \
+ && cd jjb-linaro-plugin && python3 setup.py install && cd .. && rm -rf jjb-linaro-plugin \
+# tensorflow package required to enable MLGO in clang builds (for AOSP toolchains)
+# installation of this package fails on arm64/focal
+ && pip3 install tensorflow \
+ && true
+# Install custom jipdate.
+# FIXME: Revert to installing from pip, when pull requests from maxim-kuvyrkov
+# are merged https://github.com/Linaro/jipdate/pulls .
+RUN git clone -b master https://github.com/maxim-kuvyrkov/jipdate.git /usr/local/jipdate/ \
+ && cd /usr/local/jipdate \
+ && pip3 install flit \
+ && flit build \
+ && FLIT_ROOT_INSTALL=1 flit install --symlink
+# LLVM requires at least CMake 3.20.0 and we need 3.24 for flang support.
+ RUN cd /tmp \
+ && git clone -b v3.24.2 --single-branch --depth 1 https://github.com/Kitware/CMake.git \
+ && cd /tmp/CMake \
+ && ./bootstrap --parallel=$(nproc --all) \
+ && make -j$(nproc --all) \
+ && make -j$(nproc --all) install \
+ && cd /tmp \
+ && rm -rf /tmp/CMake
+# Configure linux tools for benchmarking support.
+#
+# We symlink linux tools to supportted "hw_tags":
+# apm_32, apm_64, sq_32, sq_64, tk1_32, tx1_32, tx1_64.
+# HW_TAGS represent tested configurations of hardware+kernel+perf that
+# work well together. We create new hw_tag for any variation in hardware,
+# kernel, or perf. This gives us assurance that benchmarking data stored
+# under bkp-01.tcwglab:results-<HW_TAG>/ directory has no unexpected variations.
+#
+# For the initial hw_tags for TK1s and TX1s we can use nice short tk1_32,
+# tx1_64, and tx1_32 names, but if we update, say, perf version, we would
+# need to add something like tk1_32-lt_5.4 (updating linux-tools to 5.4) or
+# tx1_64-k_4.10 (updating kernel to 4.10).
+#
+# Bionic's linux-tools-4.18 version has proven to work well with TK1s' 3.10 and
+# TX1s' 4.4 kernels. We need to install it in all distro versionss so that we
+# use same perf version to generate and process results.
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+# cpufrequtils is used by our benchmarking scripts, but we should update them to
+# use cpupower from linux-tools everywhere instead.
+ cpufrequtils \
+ linux-tools-common \
+ && cat /etc/apt/sources.list | sed -e "s/focal/bionic/g" \
+ > /etc/apt/sources.list.d/bionic.list \
+# Import Bionic key
+ && apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 3B4FE6ACC0B21F32 \
+ && apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ linux-tools-4.18.0-13-generic \
+ linux-tools-5.4.0-74-generic \
+ linux-tools-5.4.0-80-generic \
+ linux-tools-5.4.0-99-generic \
+ && apt-get clean \
+ && rm -rf \
+ /etc/apt/sources.list.d/bionic.list \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/* \
+ && ln -s /usr/lib/linux-tools/4.18.0-13-generic /usr/lib/linux-tools/tk1_32 \
+ && ln -s /usr/lib/linux-tools/4.18.0-13-generic /usr/lib/linux-tools/tx1_32 \
+ && ln -s /usr/lib/linux-tools/4.18.0-13-generic /usr/lib/linux-tools/tx1_64 \
+ && ln -s /usr/lib/linux-tools/5.4.0-74-generic /usr/lib/linux-tools/sq_32 \
+ && ln -s /usr/lib/linux-tools/5.4.0-74-generic /usr/lib/linux-tools/sq_64 \
+ && ln -s /usr/lib/linux-tools/5.4.0-80-generic /usr/lib/linux-tools/apm_32 \
+ && ln -s /usr/lib/linux-tools/5.4.0-80-generic /usr/lib/linux-tools/apm_64 \
+ && ln -s /usr/lib/linux-tools/5.4.0-99-generic /usr/lib/linux-tools/fx_32 \
+ && ln -s /usr/lib/linux-tools/5.4.0-99-generic /usr/lib/linux-tools/fx_64 \
+ && true
+# Install usb libs and OpenOCD on x86 hosts, used to target bare-metal boards.
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ libusb-1.0 \
+ libusb-dev \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+RUN cd /tmp \
+ && git clone --single-branch https://git.code.sf.net/p/openocd/code openocd \
+ && cd /tmp/openocd \
+# Next commit (ce5027ab019ac7f96d05ec5f8f533144b3bcafdf) breaks semihosting.
+# See https://review.openocd.org/c/openocd/+/6888 .
+ && git checkout e5f515f990cc345fd3089a5520f39d5a128329bd \
+ && ./bootstrap \
+ && ./configure --enable-stlink \
+ && make -j$(nproc --all) \
+ && make -j$(nproc --all) install \
+ && cd /tmp \
+ && rm -rf /tmp/openocd
+# Add the latest clang (17.0.6)
+# We need this in tcwg-llvmbot images for *-latest-clang bots, and in tcwg-build/tcwg-dev
+# images for building LLVM with flang enabled.
+# Install git-filter-repo for Ubuntu Focal
+RUN curl -f -o $(git --exec-path)/git-filter-repo \
+ https://raw.githubusercontent.com/newren/git-filter-repo/main/git-filter-repo \
+ && chmod +x $(git --exec-path)/git-filter-repo
+# Precommit testing for GNU projects requires autoconf-2.69 and
+# automake-1.15.1. Install them in custom paths to avoid confusing
+# other tools that make use of the system versions.
+# README-maintainer-mode in these projects also mentions libtool-2.2.6
+# and gettext-0.16.1, but there is no tarball available for these
+# versions. In addition, some files have been regenerated using
+# libtool-2.2.7a which is not available either. Build succeeds in
+# with --enable-maintainer-mode and the system versions of libtool and
+# gettext, so rely on them.
+RUN autoconf_version=2.69 autoconf_ver=autoconf-${autoconf_version} \
+ && cd /usr/local \
+ && wget https://ftp.gnu.org/gnu/autoconf/${autoconf_ver}.tar.xz \
+ && cd /tmp \
+ && tar xf /usr/local/${autoconf_ver}.tar.xz \
+ && cd ${autoconf_ver} \
+ && mkdir build \
+ && cd build \
+ && ../configure --prefix=/usr/local/${autoconf_ver} \
+ && make install \
+ && cd /usr/local/${autoconf_ver}/bin \
+ && for f in autoconf autoheader autom4te autoreconf autoscan autoupdate ifnames; do \
+ ln -sv $f $f-${autoconf_version} ; \
+ done \
+ && rm -f /usr/local/${autoconf_ver}.tar.xz \
+ && automake_version=1.15.1 automake_ver=automake-${automake_version} \
+ && cd /usr/local \
+ && wget https://ftp.gnu.org/gnu/automake/${automake_ver}.tar.xz \
+ && cd /tmp \
+ && tar xf /usr/local/${automake_ver}.tar.xz \
+ && cd ${automake_ver} \
+ && mkdir build \
+ && cd build \
+ && ../configure --prefix=/usr/local/${automake_ver} \
+ && make install \
+ && cd /usr/local/${automake_ver}/bin \
+ && for f in aclocal automake; do \
+ ln -sv $f $f-${automake_version} ; \
+ done \
+ && rm -f /usr/local/${automake_ver}.tar.xz \
+ && rm -rf /tmp/${autoconf_ver} /tmp/${automake_ver}
+COPY home-data/ /home-data/
+COPY install-gcc-latest.sh new-user.sh nvidia-power-cycle.sh nvidia-serial.sh \
+ /usr/local/bin/
+RUN \
+ while read line; do \
+ new-user.sh --group $(echo "$line" | cut -d: -f 1,3); \
+ done < <(grep -v ":x:x:" /home-data/group)
+# Create directories required for X11. We use X11 in tcwg-x2go images and,
+# sometimes, in tcwg-dev images.
+# We need to create these before "VOLUME /tmp" directive, since after
+# the directive stuff from /tmp won't make it into the image.
+RUN mkdir -p /tmp/.X11-unix /tmp/.ICE-unix \
+ && chmod 1777 /tmp/.X11-unix /tmp/.ICE-unix
+# We use ssh multiplexing, which creates sockets in /tmp. Overlayfs,
+# which docker is using, can't host sockets, so we use a scratch mount
+# for /tmp. This requires that we add --rm option to "docker run"
+# invocations (e.g., mark "Remove volumes" checkbox in docker plugin) to
+# cleanup host directories used for the scratch mounts.
+VOLUME /tmp
+EXPOSE 22
+CMD ["/usr/sbin/sshd", "-D"]
+# This is a dummy comment to trigger a base image rebuild.
+# checksum: a3189ffcf2a879f188230ca64162be43
diff --git a/trusty-amd64-tcwg-base/build.sh b/focal-amd64-tcwg-base/build.sh
index 67d8934e..67d8934e 120000
--- a/trusty-amd64-tcwg-base/build.sh
+++ b/focal-amd64-tcwg-base/build.sh
diff --git a/focal-amd64-tcwg-base/focal-amd64-tcwg-build/Dockerfile b/focal-amd64-tcwg-base/focal-amd64-tcwg-build/Dockerfile
new file mode 100644
index 00000000..a06fbea8
--- /dev/null
+++ b/focal-amd64-tcwg-base/focal-amd64-tcwg-build/Dockerfile
@@ -0,0 +1,42 @@
+# Auto generated by ./tcwg-base/generate-dockerfiles.sh from tcwg-base/tcwg-build/Dockerfile.in. Do not edit.
+FROM linaro/ci-amd64-tcwg-base-ubuntu:focal
+RUN while read line; do \
+ if [ x"$(echo "$line" | cut -d: -f 4)" != x"9000" ]; then \
+ continue; \
+ fi; \
+ new-user.sh --passwd "$line"; \
+ user=$(echo "$line" | cut -d: -f 1); \
+ sudo -i -u $user ccache -p; \
+ done </home-data/passwd
+# We create ccache directory as tcwg-buildslave, because otherwise
+# "docker run -v ccache-volume:/home/tcwg-buildslave/.ccache" will create
+# it owned by root:root, which will break builds. We set ccache size:
+# - 50G is a bare minimum to ccache the gnu/llvm builds
+# - The aa64/amd64 build machines have enough disk to support 50G
+# - TK1s have small disk, so try to get by with 10G.
+RUN sudo -i -u tcwg-buildslave mkdir -p /home/tcwg-buildslave/.ccache \
+ && sudo -i -u tcwg-buildslave ccache -M 50G
+# Install wine.
+RUN \
+ apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ wine-stable \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+# Add llvm 11 to get llvm-objdump with support for --disassemble-symbols.
+# We need this in bmk-scripts.git/symbol_md5sum.sh.
+RUN \
+ apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ llvm-11 \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/* \
+ # This will override llvm-objdump installed by tcwg-base's llvm package.
+ && ln -s `which llvm-objdump-11` /usr/local/bin/llvm-objdump
+# checksum: 4a6718d410939e630d9cfe3a1434523a
diff --git a/trusty-amd64-tcwg-base/trusty-amd64-tcwg-build/build.sh b/focal-amd64-tcwg-base/focal-amd64-tcwg-build/build.sh
index 50162e02..50162e02 120000
--- a/trusty-amd64-tcwg-base/trusty-amd64-tcwg-build/build.sh
+++ b/focal-amd64-tcwg-base/focal-amd64-tcwg-build/build.sh
diff --git a/focal-amd64-tcwg-base/focal-amd64-tcwg-dev/Dockerfile b/focal-amd64-tcwg-base/focal-amd64-tcwg-dev/Dockerfile
new file mode 100644
index 00000000..0ab65b89
--- /dev/null
+++ b/focal-amd64-tcwg-base/focal-amd64-tcwg-dev/Dockerfile
@@ -0,0 +1,32 @@
+# Auto generated by ./tcwg-base/generate-dockerfiles.sh from tcwg-base/tcwg-dev/Dockerfile.in. Do not edit.
+FROM linaro/ci-amd64-tcwg-base-ubuntu:focal
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y \
+ arcanist \
+ apt-file \
+ elpa-flycheck \
+ git-email \
+ git-gui \
+ git-svn \
+ htop \
+ iputils-ping \
+ iputils-tracepath \
+ ispell \
+ less \
+ mc \
+ python3-git \
+ screen \
+ software-properties-common \
+ stgit \
+ tig \
+ tmux \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+RUN apt-file update
+COPY run.sh start.sh /
+ENTRYPOINT ["/run.sh"]
+CMD ["start.sh"]
+# checksum: f148147f369faf7dc19e6471b4c4beb3
diff --git a/trusty-amd64-tcwg-base/trusty-amd64-tcwg-dev/build.sh b/focal-amd64-tcwg-base/focal-amd64-tcwg-dev/build.sh
index e8571a37..e8571a37 120000
--- a/trusty-amd64-tcwg-base/trusty-amd64-tcwg-dev/build.sh
+++ b/focal-amd64-tcwg-base/focal-amd64-tcwg-dev/build.sh
diff --git a/xenial-amd64-tcwg-base/xenial-amd64-tcwg-dev/xenial-amd64-tcwg-x2go/Dockerfile b/focal-amd64-tcwg-base/focal-amd64-tcwg-dev/focal-amd64-tcwg-x2go/Dockerfile
index a7909d59..5f9c07c4 100644
--- a/xenial-amd64-tcwg-base/xenial-amd64-tcwg-dev/xenial-amd64-tcwg-x2go/Dockerfile
+++ b/focal-amd64-tcwg-base/focal-amd64-tcwg-dev/focal-amd64-tcwg-x2go/Dockerfile
@@ -1,8 +1,5 @@
-# Auto generated from tcwg-base/tcwg-dev/tcwg-x2go/Dockerfile.in. Do not edit.
-FROM linaro/ci-amd64-tcwg-dev-ubuntu:xenial
-
-COPY start.sh .
-
+# Auto generated by ./tcwg-base/generate-dockerfiles.sh from tcwg-base/tcwg-dev/tcwg-x2go/Dockerfile.in. Do not edit.
+FROM linaro/ci-amd64-tcwg-dev-ubuntu:focal
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y \
ubuntu-desktop \
@@ -11,14 +8,12 @@ RUN apt-get update \
/var/lib/apt/lists/* \
/tmp/* \
/var/tmp/*
-
-RUN add-apt-repository ppa:x2go/stable \
- && apt-get update \
+RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y \
duplicity \
+ light-themes \
mate-desktop-environment \
- x2godesktopsharing \
- x2gomatebindings \
+ ubuntu-mate-themes \
x2goserver \
x2goserver-xsession \
&& apt-get clean \
@@ -26,13 +21,13 @@ RUN add-apt-repository ppa:x2go/stable \
/var/lib/apt/lists/* \
/tmp/* \
/var/tmp/*
-
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y \
ddd \
+ xfonts-100dpi \
&& apt-get clean \
&& rm -rf \
/var/lib/apt/lists/* \
/tmp/* \
/var/tmp/*
-# checksum: 3e1c139ac1715b1096130c6e90c55fc9
+# checksum: eefb00f89fa926e34aba2550de1906e1
diff --git a/xenial-amd64-tcwg-base/xenial-amd64-tcwg-dev/xenial-amd64-tcwg-x2go/build.sh b/focal-amd64-tcwg-base/focal-amd64-tcwg-dev/focal-amd64-tcwg-x2go/build.sh
index 6e52e4e6..6e52e4e6 120000
--- a/xenial-amd64-tcwg-base/xenial-amd64-tcwg-dev/xenial-amd64-tcwg-x2go/build.sh
+++ b/focal-amd64-tcwg-base/focal-amd64-tcwg-dev/focal-amd64-tcwg-x2go/build.sh
diff --git a/xenial-amd64-tcwg-base/xenial-amd64-tcwg-dev/xenial-amd64-tcwg-x2go/gerrit-branches b/focal-amd64-tcwg-base/focal-amd64-tcwg-dev/focal-amd64-tcwg-x2go/gerrit-branches
index 748350c7..748350c7 120000
--- a/xenial-amd64-tcwg-base/xenial-amd64-tcwg-dev/xenial-amd64-tcwg-x2go/gerrit-branches
+++ b/focal-amd64-tcwg-base/focal-amd64-tcwg-dev/focal-amd64-tcwg-x2go/gerrit-branches
diff --git a/trusty-amd64-art/Dockerfile b/focal-amd64/Dockerfile
index 650c3054..a09de291 100644
--- a/trusty-amd64-art/Dockerfile
+++ b/focal-amd64/Dockerfile
@@ -1,54 +1,80 @@
-FROM ubuntu:trusty
+FROM ubuntu:focal
RUN dpkg --add-architecture i386 \
&& apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends software-properties-common \
- && add-apt-repository -y ppa:git-core/ppa \
- && add-apt-repository -y ppa:linaro-maintainers/tools \
&& apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y devscripts \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ abootimg \
acpica-tools \
- android-tools-adb \
+ android-sdk-libsparse-utils \
+ autoconf \
+ automake \
bc \
bison \
+ build-essential \
ccache \
clang \
+ clang-format \
+ clang-tidy \
+ cmake \
curl \
- default-jdk \
- gcc-4.6 \
- g++-multilib \
+ debhelper \
+ debian-archive-keyring \
+ debian-keyring \
+ device-tree-compiler \
+ doxygen \
+ fakeroot \
+ flex \
+ gcc \
+ gcc-aarch64-linux-gnu \
+ gcc-arm-linux-gnueabihf \
+ gdisk \
genisoimage \
git \
gperf \
+ kernel-wedge \
+ kpartx \
lcov \
less \
- lib32ncurses5 \
+ libtool \
+ libncurses6:i386 \
+ libstdc++6:i386 \
libxml2-utils \
+ lsb-release \
make \
- openssh-client \
+ ninja-build \
+ openjdk-11-jdk \
openssh-server \
- python-mako \
- python-networkx \
- python-requests \
+ python3-cryptography \
+ python3-pip \
+ python3-requests \
+ python3-serial \
+ python3-setuptools \
+ python3-wheel \
+ qemu-user-static \
+ rename \
rsync \
scons \
+ sudo \
time \
- unzip \
+ u-boot-tools \
+ uuid-dev \
+ virtinst \
wget \
xml-twig-tools \
zip \
zlib1g-dev:i386 \
- && wget -q \
- http://snapshot.debian.org/archive/debian/20160609T104519Z/pool/main/a/acpica-unix/acpica-tools_20160527-1_amd64.deb \
- http://de.archive.ubuntu.com/ubuntu/pool/main/m/make-dfsg/make_3.81-8.2ubuntu3_amd64.deb \
- http://mirrors.kernel.org/ubuntu/pool/universe/o/openjdk-8/openjdk-8-jre-headless_8u45-b14-1_amd64.deb \
- http://mirrors.kernel.org/ubuntu/pool/universe/o/openjdk-8/openjdk-8-jre_8u45-b14-1_amd64.deb \
- http://mirrors.kernel.org/ubuntu/pool/universe/o/openjdk-8/openjdk-8-jdk_8u45-b14-1_amd64.deb \
- && dpkg -i --force-all *.deb \
- && apt-mark hold make \
+ zsync \
&& apt-get clean \
- && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* *.deb
+ && rm -rf \
+ /etc/apt/sources.list.d/*.key \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/* \
+ *.deb
RUN useradd -m -G plugdev buildslave \
&& echo 'buildslave ALL = NOPASSWD: ALL' > /etc/sudoers.d/jenkins \
diff --git a/focal-amd64/build.sh b/focal-amd64/build.sh
new file mode 100755
index 00000000..28723188
--- /dev/null
+++ b/focal-amd64/build.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+set -e
+
+trap cleanup_exit INT TERM EXIT
+
+cleanup_exit()
+{
+ rm -f setup-sshd
+}
+
+export LANG=C
+
+DISTRIBUTION=$(basename ${PWD} | cut -f1 -d '-')
+ARCHITECTURE=$(basename ${PWD} | cut -f2 -d '-')
+
+cp -a ../setup-sshd .
+
+image=linaro/jenkins-${ARCHITECTURE}-ubuntu:${DISTRIBUTION}
+docker build --pull --tag=$image .
+echo $image > .docker-tag
diff --git a/focal-arm64-tcwg-base/Dockerfile b/focal-arm64-tcwg-base/Dockerfile
new file mode 100644
index 00000000..76400f48
--- /dev/null
+++ b/focal-arm64-tcwg-base/Dockerfile
@@ -0,0 +1,309 @@
+# Auto generated by ./tcwg-base/generate-dockerfiles.sh from tcwg-base/Dockerfile.in. Do not edit.
+FROM ubuntu:focal
+# Use bash for better string escaping (on Ubuntu, /bin/sh is dash).
+SHELL ["/bin/bash", "-c"]
+# Unminimize Ubuntu to install contrib files of git (after package
+# update, otherwise unminimize's "apt upgrade" might fail).
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y \
+ && echo y | unminimize \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y devscripts \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ alien \
+ autoconf \
+ autogen \
+ automake \
+ bc \
+ bind9-host \
+ bison \
+ binutils-dev \
+ bsd-mailx \
+ build-essential \
+ byacc \
+ ccache \
+ ccrypt \
+ chrpath \
+ clang \
+ curl \
+ debhelper \
+ default-jre \
+ dejagnu \
+ dh-autoreconf \
+ dh-translations \
+ distro-info-data \
+ emacs \
+ fakeroot \
+ flex \
+ fp-compiler \
+ gawk \
+ gdc \
+ gdb \
+ gdbserver \
+# gettext is needed according to README-maintainer-mode
+ gettext \
+ gfortran \
+ git \
+ # git-annex : is now used to store bmk results in base-artifacts
+ git-annex \
+ gm2 \
+ gnat \
+ gobjc \
+ gobjc++ \
+ golang \
+ groff \
+ guile-3.0 \
+ guile-3.0-dev \
+ less \
+# libc6-dbg is necessary for armhf debugging, but also helps on aarch64.
+ libc6-dbg \
+ libcc1-0 \
+# For building lldb.
+ libedit-dev \
+ libexpat1-dev \
+ libffi-dev \
+ libglib2.0-dev \
+ libgmp-dev \
+# libjpeg is necessary for building jipdate
+ libjpeg-dev \
+ liblzma-dev \
+ libmpc-dev \
+ libmpfr-dev \
+# We need libncurses5 for ancient clang-3289846 used for renderscript AOSP.
+ libncurses5 \
+ libncurses5-dev \
+ libpixman-1-dev \
+ libpython3-dev \
+ libreadline-dev \
+ libssl-dev \
+ libtcnative-1 \
+# Our bionic-built llvm releases expect to find this but
+# focal installs libtinfo6 instead.
+ libtinfo5 \
+ libtool \
+# For building lldb.
+ libxml2-dev \
+ llvm \
+ locales \
+ lzop \
+ make \
+ moreutils \
+ net-tools \
+ netcat \
+ nfs-kernel-server \
+ ninja-build \
+ ntp \
+ openssh-server \
+ pkg-config \
+ psmisc \
+ python3-dev \
+ python3-pip \
+ python3-setuptools \
+ python3-venv \
+ python3-wheel \
+ python3-pandas \
+ python3-numpy \
+ python3-scipy \
+# Symlink python to python3 to make upstream "repo", which is downloaded
+# by distro's repo, happy. Also needed to run lnt checks on focal.
+ python-is-python3 \
+ rsync \
+# sqlite3 is used by lnt test suite
+ sqlite3 \
+ subversion \
+ sudo \
+ swig \
+# systemtap-sdt-dev allows building glibc with probes, which GDB uses to
+# detect shared library events.
+ systemtap-sdt-dev \
+ tclsh \
+ texinfo \
+ texlive-fonts-recommended \
+ texlive-latex-recommended \
+ time \
+# tox is used to run lnt test suite
+ tox \
+ unifdef \
+ valgrind \
+ vim \
+# virtualenv is used for lnt environment
+ virtualenv \
+ wget \
+# xsltproc is needed by GDB in maintainer mode
+ xsltproc \
+ xz-utils \
+ zip \
+ zlib1g-dev \
+ shellcheck \
+# Update tzdata, because some base images have an incorrect file for UTC.
+ && DEBIAN_FRONTEND=noninteractive apt-get install --reinstall tzdata \
+ && rm -f /etc/ssh/ssh_host_*_key* \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+RUN install -D -p -m0755 /usr/share/doc/git/contrib/workdir/git-new-workdir /usr/local/bin/git-new-workdir \
+ && sed -i -e 's:^session *required *pam_loginuid.so:# session required pam_loginuid.so:' /etc/pam.d/sshd \
+ && mkdir -p /var/run/sshd \
+ && sed -i \
+ -e "/.*MaxStartups.*/d" \
+ -e "/.*MaxSessions.*/d" /etc/ssh/sshd_config \
+ && echo "MaxStartups 256" >> /etc/ssh/sshd_config \
+ && echo "MaxSessions 256" >> /etc/ssh/sshd_config \
+ && locale-gen en_US.UTF-8 && update-locale LANG=en_US.UTF-8 \
+ && pip3 install git-review \
+ && pip3 install psutil \
+# Patchworks client for pre-commit testing with "-f yaml" support and
+# shyaml tool to parse its output; these are used in jenkins-scripts/pw-*.sh.
+ && pip3 install git-pw \
+ && pip3 install shyaml \
+# For testing lldb.
+ && pip3 install pexpect \
+# PIP on jammy (all arches) and focal (armhf) has a version mismatch for pyyaml.
+ && pip3 install jenkins-job-builder==2.10.0 \
+ && git clone --depth 1 https://git.linaro.org/infrastructure/jjb-linaro-plugin.git \
+ && cd jjb-linaro-plugin && python3 setup.py install && cd .. && rm -rf jjb-linaro-plugin \
+ && true
+# Install custom jipdate.
+# FIXME: Revert to installing from pip, when pull requests from maxim-kuvyrkov
+# are merged https://github.com/Linaro/jipdate/pulls .
+RUN git clone -b master https://github.com/maxim-kuvyrkov/jipdate.git /usr/local/jipdate/ \
+ && cd /usr/local/jipdate \
+ && pip3 install flit \
+ && flit build \
+ && FLIT_ROOT_INSTALL=1 flit install --symlink
+# LLVM requires at least CMake 3.20.0 and we need 3.24 for flang support.
+RUN wget https://github.com/Kitware/CMake/releases/download/v3.24.2/cmake-3.24.2-linux-aarch64.sh \
+ && chmod +x cmake-3.24.2-linux-aarch64.sh \
+ && ./cmake-3.24.2-linux-aarch64.sh --prefix=/usr/local --skip-license
+# Configure linux tools for benchmarking support.
+#
+# We symlink linux tools to supportted "hw_tags":
+# apm_32, apm_64, sq_32, sq_64, tk1_32, tx1_32, tx1_64.
+# HW_TAGS represent tested configurations of hardware+kernel+perf that
+# work well together. We create new hw_tag for any variation in hardware,
+# kernel, or perf. This gives us assurance that benchmarking data stored
+# under bkp-01.tcwglab:results-<HW_TAG>/ directory has no unexpected variations.
+#
+# For the initial hw_tags for TK1s and TX1s we can use nice short tk1_32,
+# tx1_64, and tx1_32 names, but if we update, say, perf version, we would
+# need to add something like tk1_32-lt_5.4 (updating linux-tools to 5.4) or
+# tx1_64-k_4.10 (updating kernel to 4.10).
+#
+# Bionic's linux-tools-4.18 version has proven to work well with TK1s' 3.10 and
+# TX1s' 4.4 kernels. We need to install it in all distro versionss so that we
+# use same perf version to generate and process results.
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+# cpufrequtils is used by our benchmarking scripts, but we should update them to
+# use cpupower from linux-tools everywhere instead.
+ cpufrequtils \
+ linux-tools-common \
+ && cat /etc/apt/sources.list | sed -e "s/focal/bionic/g" \
+ > /etc/apt/sources.list.d/bionic.list \
+# Import Bionic key
+ && apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 3B4FE6ACC0B21F32 \
+ && apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ linux-tools-4.18.0-13-generic \
+ linux-tools-5.4.0-74-generic \
+ linux-tools-5.4.0-80-generic \
+ linux-tools-5.4.0-99-generic \
+ && apt-get clean \
+ && rm -rf \
+ /etc/apt/sources.list.d/bionic.list \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/* \
+ && ln -s /usr/lib/linux-tools/4.18.0-13-generic /usr/lib/linux-tools/tk1_32 \
+ && ln -s /usr/lib/linux-tools/4.18.0-13-generic /usr/lib/linux-tools/tx1_32 \
+ && ln -s /usr/lib/linux-tools/4.18.0-13-generic /usr/lib/linux-tools/tx1_64 \
+ && ln -s /usr/lib/linux-tools/5.4.0-74-generic /usr/lib/linux-tools/sq_32 \
+ && ln -s /usr/lib/linux-tools/5.4.0-74-generic /usr/lib/linux-tools/sq_64 \
+ && ln -s /usr/lib/linux-tools/5.4.0-80-generic /usr/lib/linux-tools/apm_32 \
+ && ln -s /usr/lib/linux-tools/5.4.0-80-generic /usr/lib/linux-tools/apm_64 \
+ && ln -s /usr/lib/linux-tools/5.4.0-99-generic /usr/lib/linux-tools/fx_32 \
+ && ln -s /usr/lib/linux-tools/5.4.0-99-generic /usr/lib/linux-tools/fx_64 \
+ && true
+# Add the latest clang (17.0.6)
+# We need this in tcwg-llvmbot images for *-latest-clang bots, and in tcwg-build/tcwg-dev
+# images for building LLVM with flang enabled.
+RUN \
+ clang_ver=clang+llvm-17.0.6-aarch64-linux-gnu \
+ # For the 17.0.6 release, the two archives have different formats.
+ ext=xz \
+ && cd /usr/local \
+ && wget --progress=dot:giga https://github.com/llvm/llvm-project/releases/download/llvmorg-17.0.6/$clang_ver.tar.$ext \
+ && tar xf $clang_ver.tar.$ext \
+ && rm $clang_ver.tar.$ext
+# Add libpgmath, which is used by flang
+RUN git clone https://github.com/rovka/libpgmath-binaries.git \
+ && mv libpgmath-binaries/* /usr/local/lib/ \
+ && rm -rf libpgmath-binaries
+# Install git-filter-repo for Ubuntu Focal
+RUN curl -f -o $(git --exec-path)/git-filter-repo \
+ https://raw.githubusercontent.com/newren/git-filter-repo/main/git-filter-repo \
+ && chmod +x $(git --exec-path)/git-filter-repo
+# Precommit testing for GNU projects requires autoconf-2.69 and
+# automake-1.15.1. Install them in custom paths to avoid confusing
+# other tools that make use of the system versions.
+# README-maintainer-mode in these projects also mentions libtool-2.2.6
+# and gettext-0.16.1, but there is no tarball available for these
+# versions. In addition, some files have been regenerated using
+# libtool-2.2.7a which is not available either. Build succeeds in
+# with --enable-maintainer-mode and the system versions of libtool and
+# gettext, so rely on them.
+RUN autoconf_version=2.69 autoconf_ver=autoconf-${autoconf_version} \
+ && cd /usr/local \
+ && wget https://ftp.gnu.org/gnu/autoconf/${autoconf_ver}.tar.xz \
+ && cd /tmp \
+ && tar xf /usr/local/${autoconf_ver}.tar.xz \
+ && cd ${autoconf_ver} \
+ && mkdir build \
+ && cd build \
+ && ../configure --prefix=/usr/local/${autoconf_ver} \
+ && make install \
+ && cd /usr/local/${autoconf_ver}/bin \
+ && for f in autoconf autoheader autom4te autoreconf autoscan autoupdate ifnames; do \
+ ln -sv $f $f-${autoconf_version} ; \
+ done \
+ && rm -f /usr/local/${autoconf_ver}.tar.xz \
+ && automake_version=1.15.1 automake_ver=automake-${automake_version} \
+ && cd /usr/local \
+ && wget https://ftp.gnu.org/gnu/automake/${automake_ver}.tar.xz \
+ && cd /tmp \
+ && tar xf /usr/local/${automake_ver}.tar.xz \
+ && cd ${automake_ver} \
+ && mkdir build \
+ && cd build \
+ && ../configure --prefix=/usr/local/${automake_ver} \
+ && make install \
+ && cd /usr/local/${automake_ver}/bin \
+ && for f in aclocal automake; do \
+ ln -sv $f $f-${automake_version} ; \
+ done \
+ && rm -f /usr/local/${automake_ver}.tar.xz \
+ && rm -rf /tmp/${autoconf_ver} /tmp/${automake_ver}
+COPY home-data/ /home-data/
+COPY install-gcc-latest.sh new-user.sh nvidia-power-cycle.sh nvidia-serial.sh \
+ /usr/local/bin/
+RUN \
+ while read line; do \
+ new-user.sh --group $(echo "$line" | cut -d: -f 1,3); \
+ done < <(grep -v ":x:x:" /home-data/group)
+# Create directories required for X11. We use X11 in tcwg-x2go images and,
+# sometimes, in tcwg-dev images.
+# We need to create these before "VOLUME /tmp" directive, since after
+# the directive stuff from /tmp won't make it into the image.
+RUN mkdir -p /tmp/.X11-unix /tmp/.ICE-unix \
+ && chmod 1777 /tmp/.X11-unix /tmp/.ICE-unix
+# We use ssh multiplexing, which creates sockets in /tmp. Overlayfs,
+# which docker is using, can't host sockets, so we use a scratch mount
+# for /tmp. This requires that we add --rm option to "docker run"
+# invocations (e.g., mark "Remove volumes" checkbox in docker plugin) to
+# cleanup host directories used for the scratch mounts.
+VOLUME /tmp
+EXPOSE 22
+CMD ["/usr/sbin/sshd", "-D"]
+# This is a dummy comment to trigger a base image rebuild.
+# checksum: c38eece402c64fa2c214420831b4775d
diff --git a/trusty-arm64-tcwg-base/build.sh b/focal-arm64-tcwg-base/build.sh
index 67d8934e..67d8934e 120000
--- a/trusty-arm64-tcwg-base/build.sh
+++ b/focal-arm64-tcwg-base/build.sh
diff --git a/focal-arm64-tcwg-base/focal-arm64-tcwg-build/Dockerfile b/focal-arm64-tcwg-base/focal-arm64-tcwg-build/Dockerfile
new file mode 100644
index 00000000..71927684
--- /dev/null
+++ b/focal-arm64-tcwg-base/focal-arm64-tcwg-build/Dockerfile
@@ -0,0 +1,32 @@
+# Auto generated by ./tcwg-base/generate-dockerfiles.sh from tcwg-base/tcwg-build/Dockerfile.in. Do not edit.
+FROM linaro/ci-arm64-tcwg-base-ubuntu:focal
+RUN while read line; do \
+ if [ x"$(echo "$line" | cut -d: -f 4)" != x"9000" ]; then \
+ continue; \
+ fi; \
+ new-user.sh --passwd "$line"; \
+ user=$(echo "$line" | cut -d: -f 1); \
+ sudo -i -u $user ccache -p; \
+ done </home-data/passwd
+# We create ccache directory as tcwg-buildslave, because otherwise
+# "docker run -v ccache-volume:/home/tcwg-buildslave/.ccache" will create
+# it owned by root:root, which will break builds. We set ccache size:
+# - 50G is a bare minimum to ccache the gnu/llvm builds
+# - The aa64/amd64 build machines have enough disk to support 50G
+# - TK1s have small disk, so try to get by with 10G.
+RUN sudo -i -u tcwg-buildslave mkdir -p /home/tcwg-buildslave/.ccache \
+ && sudo -i -u tcwg-buildslave ccache -M 50G
+# Add llvm 11 to get llvm-objdump with support for --disassemble-symbols.
+# We need this in bmk-scripts.git/symbol_md5sum.sh.
+RUN \
+ apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ llvm-11 \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/* \
+ # This will override llvm-objdump installed by tcwg-base's llvm package.
+ && ln -s `which llvm-objdump-11` /usr/local/bin/llvm-objdump
+# checksum: f4581c2c071379c5b031871727887448
diff --git a/trusty-arm64-tcwg-base/trusty-arm64-tcwg-build/build.sh b/focal-arm64-tcwg-base/focal-arm64-tcwg-build/build.sh
index 50162e02..50162e02 120000
--- a/trusty-arm64-tcwg-base/trusty-arm64-tcwg-build/build.sh
+++ b/focal-arm64-tcwg-base/focal-arm64-tcwg-build/build.sh
diff --git a/focal-arm64-tcwg-base/focal-arm64-tcwg-dev/Dockerfile b/focal-arm64-tcwg-base/focal-arm64-tcwg-dev/Dockerfile
new file mode 100644
index 00000000..fd73b74e
--- /dev/null
+++ b/focal-arm64-tcwg-base/focal-arm64-tcwg-dev/Dockerfile
@@ -0,0 +1,32 @@
+# Auto generated by ./tcwg-base/generate-dockerfiles.sh from tcwg-base/tcwg-dev/Dockerfile.in. Do not edit.
+FROM linaro/ci-arm64-tcwg-base-ubuntu:focal
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y \
+ arcanist \
+ apt-file \
+ elpa-flycheck \
+ git-email \
+ git-gui \
+ git-svn \
+ htop \
+ iputils-ping \
+ iputils-tracepath \
+ ispell \
+ less \
+ mc \
+ python3-git \
+ screen \
+ software-properties-common \
+ stgit \
+ tig \
+ tmux \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+RUN apt-file update
+COPY run.sh start.sh /
+ENTRYPOINT ["/run.sh"]
+CMD ["start.sh"]
+# checksum: 6e9bcbce53da0cec83d927a0d4ce4b9c
diff --git a/trusty-arm64-tcwg-base/trusty-arm64-tcwg-dev/build.sh b/focal-arm64-tcwg-base/focal-arm64-tcwg-dev/build.sh
index e8571a37..e8571a37 120000
--- a/trusty-arm64-tcwg-base/trusty-arm64-tcwg-dev/build.sh
+++ b/focal-arm64-tcwg-base/focal-arm64-tcwg-dev/build.sh
diff --git a/focal-arm64-tcwg-base/focal-arm64-tcwg-dev/focal-arm64-tcwg-x2go/Dockerfile b/focal-arm64-tcwg-base/focal-arm64-tcwg-dev/focal-arm64-tcwg-x2go/Dockerfile
new file mode 100644
index 00000000..e613649b
--- /dev/null
+++ b/focal-arm64-tcwg-base/focal-arm64-tcwg-dev/focal-arm64-tcwg-x2go/Dockerfile
@@ -0,0 +1,33 @@
+# Auto generated by ./tcwg-base/generate-dockerfiles.sh from tcwg-base/tcwg-dev/tcwg-x2go/Dockerfile.in. Do not edit.
+FROM linaro/ci-arm64-tcwg-dev-ubuntu:focal
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y \
+ ubuntu-desktop \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y \
+ duplicity \
+ light-themes \
+ mate-desktop-environment \
+ ubuntu-mate-themes \
+ x2goserver \
+ x2goserver-xsession \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y \
+ ddd \
+ xfonts-100dpi \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+# checksum: 9d3f20f688b2d4291fe7471fdb9c86ce
diff --git a/focal-arm64-tcwg-base/focal-arm64-tcwg-dev/focal-arm64-tcwg-x2go/build.sh b/focal-arm64-tcwg-base/focal-arm64-tcwg-dev/focal-arm64-tcwg-x2go/build.sh
new file mode 120000
index 00000000..6e52e4e6
--- /dev/null
+++ b/focal-arm64-tcwg-base/focal-arm64-tcwg-dev/focal-arm64-tcwg-x2go/build.sh
@@ -0,0 +1 @@
+../../../tcwg-base/tcwg-dev/tcwg-x2go/build.sh \ No newline at end of file
diff --git a/focal-arm64-tcwg-base/focal-arm64-tcwg-dev/focal-arm64-tcwg-x2go/gerrit-branches b/focal-arm64-tcwg-base/focal-arm64-tcwg-dev/focal-arm64-tcwg-x2go/gerrit-branches
new file mode 120000
index 00000000..748350c7
--- /dev/null
+++ b/focal-arm64-tcwg-base/focal-arm64-tcwg-dev/focal-arm64-tcwg-x2go/gerrit-branches
@@ -0,0 +1 @@
+../../../tcwg-base/tcwg-dev/tcwg-x2go/gerrit-branches \ No newline at end of file
diff --git a/focal-arm64-tcwg-base/focal-arm64-tcwg-llvmbot/Dockerfile b/focal-arm64-tcwg-base/focal-arm64-tcwg-llvmbot/Dockerfile
new file mode 100644
index 00000000..a8f7110f
--- /dev/null
+++ b/focal-arm64-tcwg-base/focal-arm64-tcwg-llvmbot/Dockerfile
@@ -0,0 +1,85 @@
+# Auto generated by ./tcwg-base/generate-dockerfiles.sh from tcwg-base/tcwg-llvmbot/Dockerfile.in. Do not edit.
+FROM linaro/ci-arm64-tcwg-base-ubuntu:focal
+RUN echo "deb https://apt.buildkite.com/buildkite-agent stable main" | tee /etc/apt/sources.list.d/buildkite-agent.list \
+ && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 32A37959C2FA5C3C99EFBC32A79206696452D198
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y \
+ binutils-gold \
+ buildkite-agent \
+ cpio \
+ gfortran \
+ htop \
+ iotop \
+# Add locales used for testing libcxx
+ language-pack-en \
+ language-pack-fr \
+ language-pack-ja \
+ language-pack-ru \
+ language-pack-zh-hans \
+ libjson-perl \
+ libtinfo-dev \
+# We build clang+llvm releases on Ubuntu Bionic, which has libtinfo.so.5,
+# and we link against it.
+# Ubuntu Focal by default installs libtinfo6 (aka libtinfo.so.6), and
+# our clang+llvm releases don't work on Ubuntu Focal unless we install
+# legacy libtinfo5 (aka libtinfo.so.5).
+# We should no longer need libtinfo5 when we switch building releases to
+# Ubuntu Focal or later.
+ libtinfo5 \
+ linux-tools-common \
+ python3-buildbot-worker \
+ tmux \
+# uuidgen is used by the flang driver script. Not installed by default on focal.
+ uuid-runtime \
+# Although the base image has python3-venv installed, this does not give
+# you 'virtualenv'. Instead you must do 'python3 -m venv'. However the test
+# suite calls virtualenv with --python=python3, so we're ok to use the Python2
+# version here.
+ virtualenv \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+# Libcxx needs some locales that are not generated by default
+RUN printf "fr_CA ISO-8859-1\ncs_CZ ISO-8859-2" >> /etc/locale.gen \
+ && mkdir /usr/local/share/i1en/ \
+ && printf "fr_CA ISO-8859-1\ncs_CZ ISO-8859-2" >> /usr/local/share/i1en/SUPPORTED \
+ && locale-gen
+# Add ninja with support for matching concurrency to available CPU allowance.
+RUN git clone -b limit-on-cpu https://github.com/maxim-kuvyrkov/ninja.git \
+ && cd ninja \
+ && python3 ./configure.py --bootstrap && ./ninja all && ./ninja_test \
+ && mv ninja /usr/local/bin/ninja.limit-on-cpu \
+ && cd .. \
+ && rm -rf ninja \
+ && git clone -b master https://github.com/maxim-kuvyrkov/ninja.git \
+ && cd ninja \
+ && python3 ./configure.py --bootstrap && ./ninja all && ./ninja_test \
+ && mv ninja /usr/local/bin/ninja.limit-on-psi \
+ && cd .. \
+ && rm -rf ninja
+# AArch64 bots run MLIR tests for SVE and SME using qemu-user-static.
+# Armv7-M libcxx bots use qemu-system-arm for emulation.
+# SME support was added in 7.1.0 and other Arm (32 bit) bugs were
+# fixed between then and 8.1.3.
+RUN qemu_ver=8.1.3 \
+ && wget --progress=dot:giga https://download.qemu.org/qemu-${qemu_ver}.tar.xz \
+ && tar -xvf qemu-${qemu_ver}.tar.xz \
+ && cd qemu-${qemu_ver} \
+ && ./configure --prefix=/usr/local --target-list=aarch64-linux-user,arm-softmmu \
+ && make -j$(nproc) \
+ && make install \
+ && rm -rf qemu-${qemu_ver}.tar.xz qemu-${qemu_ver}/
+RUN new-user.sh --user tcwg-buildbot \
+ # Initialize .ccache dir, so that we mount ccache docker volumes with
+ # correct permissions.
+ && sudo -i -u tcwg-buildbot mkdir -p /home/tcwg-buildbot/.ccache \
+ # Allow non root users to access the buildkite config files
+ && chmod -R a+rw /etc/buildkite-agent/
+VOLUME /home
+COPY run.sh .
+COPY start.sh .
+ENTRYPOINT ["/run.sh"]
+CMD ["start.sh"]
+# checksum: daf14e78943eca285c168a7ade5ad322
diff --git a/xenial-arm64-tcwg-base/xenial-arm64-tcwg-llvmbot/build.sh b/focal-arm64-tcwg-base/focal-arm64-tcwg-llvmbot/build.sh
index cb3c7a8c..cb3c7a8c 120000
--- a/xenial-arm64-tcwg-base/xenial-arm64-tcwg-llvmbot/build.sh
+++ b/focal-arm64-tcwg-base/focal-arm64-tcwg-llvmbot/build.sh
diff --git a/focal-armhf-tcwg-base/Dockerfile b/focal-armhf-tcwg-base/Dockerfile
new file mode 100644
index 00000000..7de45301
--- /dev/null
+++ b/focal-armhf-tcwg-base/Dockerfile
@@ -0,0 +1,315 @@
+# Auto generated by ./tcwg-base/generate-dockerfiles.sh from tcwg-base/Dockerfile.in. Do not edit.
+FROM arm32v7/ubuntu:focal
+# Use bash for better string escaping (on Ubuntu, /bin/sh is dash).
+SHELL ["/bin/bash", "-c"]
+# Unminimize Ubuntu to install contrib files of git (after package
+# update, otherwise unminimize's "apt upgrade" might fail).
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y \
+ && echo y | unminimize \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y devscripts \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ alien \
+ autoconf \
+ autogen \
+ automake \
+ bc \
+ bind9-host \
+ bison \
+ binutils-dev \
+ bsd-mailx \
+ build-essential \
+ byacc \
+ ccache \
+ ccrypt \
+ chrpath \
+ clang \
+ curl \
+ debhelper \
+ default-jre \
+ dejagnu \
+ dh-autoreconf \
+ dh-translations \
+ distro-info-data \
+ emacs \
+ fakeroot \
+ flex \
+ fp-compiler \
+ gawk \
+ gdc \
+ gdb \
+ gdbserver \
+# gettext is needed according to README-maintainer-mode
+ gettext \
+ gfortran \
+ git \
+ # git-annex : is now used to store bmk results in base-artifacts
+ git-annex \
+ gm2 \
+ gnat \
+ gobjc \
+ gobjc++ \
+ golang \
+ groff \
+ guile-3.0 \
+ guile-3.0-dev \
+ less \
+# libc6-dbg is necessary for armhf debugging, but also helps on aarch64.
+ libc6-dbg \
+ libcc1-0 \
+# For building lldb.
+ libedit-dev \
+ libexpat1-dev \
+ libffi-dev \
+ libglib2.0-dev \
+ libgmp-dev \
+# libjpeg is necessary for building jipdate
+ libjpeg-dev \
+ liblzma-dev \
+ libmpc-dev \
+ libmpfr-dev \
+# We need libncurses5 for ancient clang-3289846 used for renderscript AOSP.
+ libncurses5 \
+ libncurses5-dev \
+ libpixman-1-dev \
+ libpython3-dev \
+ libreadline-dev \
+ libssl-dev \
+ libtcnative-1 \
+# Our bionic-built llvm releases expect to find this but
+# focal installs libtinfo6 instead.
+ libtinfo5 \
+ libtool \
+# For building lldb.
+ libxml2-dev \
+ llvm \
+ locales \
+ lzop \
+ make \
+ moreutils \
+ net-tools \
+ netcat \
+ nfs-kernel-server \
+ ninja-build \
+ ntp \
+ openssh-server \
+ pkg-config \
+ psmisc \
+ python3-dev \
+ python3-pip \
+ python3-setuptools \
+ python3-venv \
+ python3-wheel \
+ python3-pandas \
+ python3-numpy \
+ python3-scipy \
+# Symlink python to python3 to make upstream "repo", which is downloaded
+# by distro's repo, happy. Also needed to run lnt checks on focal.
+ python-is-python3 \
+ rsync \
+# sqlite3 is used by lnt test suite
+ sqlite3 \
+ subversion \
+ sudo \
+ swig \
+# systemtap-sdt-dev allows building glibc with probes, which GDB uses to
+# detect shared library events.
+ systemtap-sdt-dev \
+ tclsh \
+ texinfo \
+ texlive-fonts-recommended \
+ texlive-latex-recommended \
+ time \
+# tox is used to run lnt test suite
+ tox \
+ unifdef \
+ valgrind \
+ vim \
+# virtualenv is used for lnt environment
+ virtualenv \
+ wget \
+# xsltproc is needed by GDB in maintainer mode
+ xsltproc \
+ xz-utils \
+ zip \
+ zlib1g-dev \
+ shellcheck \
+# Update tzdata, because some base images have an incorrect file for UTC.
+ && DEBIAN_FRONTEND=noninteractive apt-get install --reinstall tzdata \
+ && rm -f /etc/ssh/ssh_host_*_key* \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+RUN install -D -p -m0755 /usr/share/doc/git/contrib/workdir/git-new-workdir /usr/local/bin/git-new-workdir \
+ && sed -i -e 's:^session *required *pam_loginuid.so:# session required pam_loginuid.so:' /etc/pam.d/sshd \
+ && mkdir -p /var/run/sshd \
+ && sed -i \
+ -e "/.*MaxStartups.*/d" \
+ -e "/.*MaxSessions.*/d" /etc/ssh/sshd_config \
+ && echo "MaxStartups 256" >> /etc/ssh/sshd_config \
+ && echo "MaxSessions 256" >> /etc/ssh/sshd_config \
+ && locale-gen en_US.UTF-8 && update-locale LANG=en_US.UTF-8 \
+ && pip3 install git-review \
+ && pip3 install psutil \
+# Patchworks client for pre-commit testing with "-f yaml" support and
+# shyaml tool to parse its output; these are used in jenkins-scripts/pw-*.sh.
+ && pip3 install git-pw \
+ && pip3 install shyaml \
+# For testing lldb.
+ && pip3 install pexpect \
+ && true
+# Install custom jipdate.
+# FIXME: Revert to installing from pip, when pull requests from maxim-kuvyrkov
+# are merged https://github.com/Linaro/jipdate/pulls .
+RUN git clone -b master https://github.com/maxim-kuvyrkov/jipdate.git /usr/local/jipdate/ \
+ && cd /usr/local/jipdate \
+ && pip3 install flit \
+ && flit build \
+ && FLIT_ROOT_INSTALL=1 flit install --symlink
+# LLVM requires at least CMake 3.20.0 and we need 3.24 for flang support.
+ RUN cd /tmp \
+ && git clone -b v3.24.2 --single-branch --depth 1 https://github.com/Kitware/CMake.git \
+ && cd /tmp/CMake \
+ && ./bootstrap --parallel=$(nproc --all) \
+ && make -j$(nproc --all) \
+ && make -j$(nproc --all) install \
+ && cd /tmp \
+ && rm -rf /tmp/CMake
+# Configure linux tools for benchmarking support.
+#
+# We symlink linux tools to supportted "hw_tags":
+# apm_32, apm_64, sq_32, sq_64, tk1_32, tx1_32, tx1_64.
+# HW_TAGS represent tested configurations of hardware+kernel+perf that
+# work well together. We create new hw_tag for any variation in hardware,
+# kernel, or perf. This gives us assurance that benchmarking data stored
+# under bkp-01.tcwglab:results-<HW_TAG>/ directory has no unexpected variations.
+#
+# For the initial hw_tags for TK1s and TX1s we can use nice short tk1_32,
+# tx1_64, and tx1_32 names, but if we update, say, perf version, we would
+# need to add something like tk1_32-lt_5.4 (updating linux-tools to 5.4) or
+# tx1_64-k_4.10 (updating kernel to 4.10).
+#
+# Bionic's linux-tools-4.18 version has proven to work well with TK1s' 3.10 and
+# TX1s' 4.4 kernels. We need to install it in all distro versionss so that we
+# use same perf version to generate and process results.
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+# cpufrequtils is used by our benchmarking scripts, but we should update them to
+# use cpupower from linux-tools everywhere instead.
+ cpufrequtils \
+ linux-tools-common \
+ && cat /etc/apt/sources.list | sed -e "s/focal/bionic/g" \
+ > /etc/apt/sources.list.d/bionic.list \
+# Import Bionic key
+ && apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 3B4FE6ACC0B21F32 \
+ && apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ linux-tools-4.18.0-13-generic \
+ linux-tools-5.4.0-74-generic \
+ linux-tools-5.4.0-80-generic \
+ linux-tools-5.4.0-99-generic \
+ && apt-get clean \
+ && rm -rf \
+ /etc/apt/sources.list.d/bionic.list \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/* \
+ && ln -s /usr/lib/linux-tools/4.18.0-13-generic /usr/lib/linux-tools/tk1_32 \
+ && ln -s /usr/lib/linux-tools/4.18.0-13-generic /usr/lib/linux-tools/tx1_32 \
+ && ln -s /usr/lib/linux-tools/4.18.0-13-generic /usr/lib/linux-tools/tx1_64 \
+ && ln -s /usr/lib/linux-tools/5.4.0-74-generic /usr/lib/linux-tools/sq_32 \
+ && ln -s /usr/lib/linux-tools/5.4.0-74-generic /usr/lib/linux-tools/sq_64 \
+ && ln -s /usr/lib/linux-tools/5.4.0-80-generic /usr/lib/linux-tools/apm_32 \
+ && ln -s /usr/lib/linux-tools/5.4.0-80-generic /usr/lib/linux-tools/apm_64 \
+ && ln -s /usr/lib/linux-tools/5.4.0-99-generic /usr/lib/linux-tools/fx_32 \
+ && ln -s /usr/lib/linux-tools/5.4.0-99-generic /usr/lib/linux-tools/fx_64 \
+ && true
+COPY install-armhf-perf-workaround.sh /usr/lib/linux-tools/
+# Add the latest clang (17.0.6)
+# We need this in tcwg-llvmbot images for *-latest-clang bots, and in tcwg-build/tcwg-dev
+# images for building LLVM with flang enabled.
+RUN \
+ clang_ver=clang+llvm-17.0.6-armv7a-linux-gnueabihf \
+ ext=gz \
+ && cd /usr/local \
+ && wget --progress=dot:giga https://github.com/llvm/llvm-project/releases/download/llvmorg-17.0.6/$clang_ver.tar.$ext \
+ && tar xf $clang_ver.tar.$ext \
+ && rm $clang_ver.tar.$ext
+# Install git-filter-repo for Ubuntu Focal
+RUN curl -f -o $(git --exec-path)/git-filter-repo \
+ https://raw.githubusercontent.com/newren/git-filter-repo/main/git-filter-repo \
+ && chmod +x $(git --exec-path)/git-filter-repo
+# Precommit testing for GNU projects requires autoconf-2.69 and
+# automake-1.15.1. Install them in custom paths to avoid confusing
+# other tools that make use of the system versions.
+# README-maintainer-mode in these projects also mentions libtool-2.2.6
+# and gettext-0.16.1, but there is no tarball available for these
+# versions. In addition, some files have been regenerated using
+# libtool-2.2.7a which is not available either. Build succeeds in
+# with --enable-maintainer-mode and the system versions of libtool and
+# gettext, so rely on them.
+RUN autoconf_version=2.69 autoconf_ver=autoconf-${autoconf_version} \
+ && cd /usr/local \
+ && wget https://ftp.gnu.org/gnu/autoconf/${autoconf_ver}.tar.xz \
+ && cd /tmp \
+ && tar xf /usr/local/${autoconf_ver}.tar.xz \
+ && cd ${autoconf_ver} \
+ && mkdir build \
+ && cd build \
+ && ../configure --prefix=/usr/local/${autoconf_ver} \
+ && make install \
+ && cd /usr/local/${autoconf_ver}/bin \
+ && for f in autoconf autoheader autom4te autoreconf autoscan autoupdate ifnames; do \
+ ln -sv $f $f-${autoconf_version} ; \
+ done \
+ && rm -f /usr/local/${autoconf_ver}.tar.xz \
+ && automake_version=1.15.1 automake_ver=automake-${automake_version} \
+ && cd /usr/local \
+ && wget https://ftp.gnu.org/gnu/automake/${automake_ver}.tar.xz \
+ && cd /tmp \
+ && tar xf /usr/local/${automake_ver}.tar.xz \
+ && cd ${automake_ver} \
+ && mkdir build \
+ && cd build \
+ && ../configure --prefix=/usr/local/${automake_ver} \
+ && make install \
+ && cd /usr/local/${automake_ver}/bin \
+ && for f in aclocal automake; do \
+ ln -sv $f $f-${automake_version} ; \
+ done \
+ && rm -f /usr/local/${automake_ver}.tar.xz \
+ && rm -rf /tmp/${autoconf_ver} /tmp/${automake_ver}
+COPY home-data/ /home-data/
+COPY install-gcc-latest.sh new-user.sh nvidia-power-cycle.sh nvidia-serial.sh \
+ /usr/local/bin/
+RUN \
+ while read line; do \
+ new-user.sh --group $(echo "$line" | cut -d: -f 1,3); \
+ done < <(grep -v ":x:x:" /home-data/group)
+# Create directories required for X11. We use X11 in tcwg-x2go images and,
+# sometimes, in tcwg-dev images.
+# We need to create these before "VOLUME /tmp" directive, since after
+# the directive stuff from /tmp won't make it into the image.
+RUN mkdir -p /tmp/.X11-unix /tmp/.ICE-unix \
+ && chmod 1777 /tmp/.X11-unix /tmp/.ICE-unix
+# For AArch32 images, add a warning if an interactive shell is opened in an
+# AArch64 environment.
+RUN echo $'if [ "$(uname -m)" == "aarch64" ] || [ "$(uname -m)" == "x86_64" ]; then\n' \
+ $' echo "============================================================================================="\n' \
+ $' echo "WARNING: This is a 32-bit container, but your shell is running in a 64-bit environment."\n' \
+ $' echo "You probably want to run your shell with the \'linux32\' program to get a 32-bit environment."\n' \
+ $' echo "============================================================================================="\n' \
+ $'fi\n' \
+ >> /etc/bash.bashrc
+# We use ssh multiplexing, which creates sockets in /tmp. Overlayfs,
+# which docker is using, can't host sockets, so we use a scratch mount
+# for /tmp. This requires that we add --rm option to "docker run"
+# invocations (e.g., mark "Remove volumes" checkbox in docker plugin) to
+# cleanup host directories used for the scratch mounts.
+VOLUME /tmp
+EXPOSE 22
+CMD ["linux32", "/usr/sbin/sshd", "-D"]
+# This is a dummy comment to trigger a base image rebuild.
+# checksum: 33dcd3b146cf6b5229a189e1c404e8ee
diff --git a/trusty-armhf-tcwg-base/build.sh b/focal-armhf-tcwg-base/build.sh
index 67d8934e..67d8934e 120000
--- a/trusty-armhf-tcwg-base/build.sh
+++ b/focal-armhf-tcwg-base/build.sh
diff --git a/focal-armhf-tcwg-base/focal-armhf-tcwg-build/Dockerfile b/focal-armhf-tcwg-base/focal-armhf-tcwg-build/Dockerfile
new file mode 100644
index 00000000..b4894d67
--- /dev/null
+++ b/focal-armhf-tcwg-base/focal-armhf-tcwg-build/Dockerfile
@@ -0,0 +1,32 @@
+# Auto generated by ./tcwg-base/generate-dockerfiles.sh from tcwg-base/tcwg-build/Dockerfile.in. Do not edit.
+FROM linaro/ci-armhf-tcwg-base-ubuntu:focal
+RUN while read line; do \
+ if [ x"$(echo "$line" | cut -d: -f 4)" != x"9000" ]; then \
+ continue; \
+ fi; \
+ new-user.sh --passwd "$line"; \
+ user=$(echo "$line" | cut -d: -f 1); \
+ sudo -i -u $user ccache -p; \
+ done </home-data/passwd
+# We create ccache directory as tcwg-buildslave, because otherwise
+# "docker run -v ccache-volume:/home/tcwg-buildslave/.ccache" will create
+# it owned by root:root, which will break builds. We set ccache size:
+# - 50G is a bare minimum to ccache the gnu/llvm builds
+# - The aa64/amd64 build machines have enough disk to support 50G
+# - TK1s have small disk, so try to get by with 10G.
+RUN sudo -i -u tcwg-buildslave mkdir -p /home/tcwg-buildslave/.ccache \
+ && sudo -i -u tcwg-buildslave ccache -M 10G
+# Add llvm 11 to get llvm-objdump with support for --disassemble-symbols.
+# We need this in bmk-scripts.git/symbol_md5sum.sh.
+RUN \
+ apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ llvm-11 \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/* \
+ # This will override llvm-objdump installed by tcwg-base's llvm package.
+ && ln -s `which llvm-objdump-11` /usr/local/bin/llvm-objdump
+# checksum: a2e2ec304d81da94f161c54c20ea298d
diff --git a/trusty-armhf-tcwg-base/trusty-armhf-tcwg-build/build.sh b/focal-armhf-tcwg-base/focal-armhf-tcwg-build/build.sh
index 50162e02..50162e02 120000
--- a/trusty-armhf-tcwg-base/trusty-armhf-tcwg-build/build.sh
+++ b/focal-armhf-tcwg-base/focal-armhf-tcwg-build/build.sh
diff --git a/focal-armhf-tcwg-base/focal-armhf-tcwg-dev/Dockerfile b/focal-armhf-tcwg-base/focal-armhf-tcwg-dev/Dockerfile
new file mode 100644
index 00000000..2e9fdfe1
--- /dev/null
+++ b/focal-armhf-tcwg-base/focal-armhf-tcwg-dev/Dockerfile
@@ -0,0 +1,32 @@
+# Auto generated by ./tcwg-base/generate-dockerfiles.sh from tcwg-base/tcwg-dev/Dockerfile.in. Do not edit.
+FROM linaro/ci-armhf-tcwg-base-ubuntu:focal
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y \
+ arcanist \
+ apt-file \
+ elpa-flycheck \
+ git-email \
+ git-gui \
+ git-svn \
+ htop \
+ iputils-ping \
+ iputils-tracepath \
+ ispell \
+ less \
+ mc \
+ python3-git \
+ screen \
+ software-properties-common \
+ stgit \
+ tig \
+ tmux \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+RUN apt-file update
+COPY run.sh start.sh /
+ENTRYPOINT ["linux32", "/run.sh"]
+CMD ["start.sh"]
+# checksum: 18f1ec3322aae4a4b71bce8e347acfc4
diff --git a/trusty-armhf-tcwg-base/trusty-armhf-tcwg-dev/build.sh b/focal-armhf-tcwg-base/focal-armhf-tcwg-dev/build.sh
index e8571a37..e8571a37 120000
--- a/trusty-armhf-tcwg-base/trusty-armhf-tcwg-dev/build.sh
+++ b/focal-armhf-tcwg-base/focal-armhf-tcwg-dev/build.sh
diff --git a/focal-armhf-tcwg-base/focal-armhf-tcwg-llvmbot/Dockerfile b/focal-armhf-tcwg-base/focal-armhf-tcwg-llvmbot/Dockerfile
new file mode 100644
index 00000000..d0b23255
--- /dev/null
+++ b/focal-armhf-tcwg-base/focal-armhf-tcwg-llvmbot/Dockerfile
@@ -0,0 +1,73 @@
+# Auto generated by ./tcwg-base/generate-dockerfiles.sh from tcwg-base/tcwg-llvmbot/Dockerfile.in. Do not edit.
+FROM linaro/ci-armhf-tcwg-base-ubuntu:focal
+RUN echo "deb https://apt.buildkite.com/buildkite-agent stable main" | tee /etc/apt/sources.list.d/buildkite-agent.list \
+ && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 32A37959C2FA5C3C99EFBC32A79206696452D198
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y \
+ binutils-gold \
+ buildkite-agent \
+ cpio \
+ gfortran \
+ htop \
+ iotop \
+# Add locales used for testing libcxx
+ language-pack-en \
+ language-pack-fr \
+ language-pack-ja \
+ language-pack-ru \
+ language-pack-zh-hans \
+ libjson-perl \
+ libtinfo-dev \
+# We build clang+llvm releases on Ubuntu Bionic, which has libtinfo.so.5,
+# and we link against it.
+# Ubuntu Focal by default installs libtinfo6 (aka libtinfo.so.6), and
+# our clang+llvm releases don't work on Ubuntu Focal unless we install
+# legacy libtinfo5 (aka libtinfo.so.5).
+# We should no longer need libtinfo5 when we switch building releases to
+# Ubuntu Focal or later.
+ libtinfo5 \
+ linux-tools-common \
+ python3-buildbot-worker \
+ tmux \
+# uuidgen is used by the flang driver script. Not installed by default on focal.
+ uuid-runtime \
+# Although the base image has python3-venv installed, this does not give
+# you 'virtualenv'. Instead you must do 'python3 -m venv'. However the test
+# suite calls virtualenv with --python=python3, so we're ok to use the Python2
+# version here.
+ virtualenv \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+# Libcxx needs some locales that are not generated by default
+RUN printf "fr_CA ISO-8859-1\ncs_CZ ISO-8859-2" >> /etc/locale.gen \
+ && mkdir /usr/local/share/i1en/ \
+ && printf "fr_CA ISO-8859-1\ncs_CZ ISO-8859-2" >> /usr/local/share/i1en/SUPPORTED \
+ && locale-gen
+# Add ninja with support for matching concurrency to available CPU allowance.
+RUN git clone -b limit-on-cpu https://github.com/maxim-kuvyrkov/ninja.git \
+ && cd ninja \
+ && python3 ./configure.py --bootstrap && ./ninja all && ./ninja_test \
+ && mv ninja /usr/local/bin/ninja.limit-on-cpu \
+ && cd .. \
+ && rm -rf ninja \
+ && git clone -b master https://github.com/maxim-kuvyrkov/ninja.git \
+ && cd ninja \
+ && python3 ./configure.py --bootstrap && ./ninja all && ./ninja_test \
+ && mv ninja /usr/local/bin/ninja.limit-on-psi \
+ && cd .. \
+ && rm -rf ninja
+RUN new-user.sh --user tcwg-buildbot \
+ # Initialize .ccache dir, so that we mount ccache docker volumes with
+ # correct permissions.
+ && sudo -i -u tcwg-buildbot mkdir -p /home/tcwg-buildbot/.ccache \
+ # Allow non root users to access the buildkite config files
+ && chmod -R a+rw /etc/buildkite-agent/
+VOLUME /home
+COPY run.sh .
+COPY start.sh .
+ENTRYPOINT ["linux32", "/run.sh"]
+CMD ["start.sh"]
+# checksum: b01437c7168e565247503b8fd28c1e75
diff --git a/xenial-armhf-tcwg-base/xenial-armhf-tcwg-llvmbot/build.sh b/focal-armhf-tcwg-base/focal-armhf-tcwg-llvmbot/build.sh
index cb3c7a8c..cb3c7a8c 120000
--- a/xenial-armhf-tcwg-base/xenial-armhf-tcwg-llvmbot/build.sh
+++ b/focal-armhf-tcwg-base/focal-armhf-tcwg-llvmbot/build.sh
diff --git a/jammy-amd64-tcwg-base/Dockerfile b/jammy-amd64-tcwg-base/Dockerfile
new file mode 100644
index 00000000..b4401bc7
--- /dev/null
+++ b/jammy-amd64-tcwg-base/Dockerfile
@@ -0,0 +1,330 @@
+# Auto generated by ./tcwg-base/generate-dockerfiles.sh from tcwg-base/Dockerfile.in. Do not edit.
+FROM ubuntu:jammy
+# Use bash for better string escaping (on Ubuntu, /bin/sh is dash).
+SHELL ["/bin/bash", "-c"]
+# Unminimize Ubuntu to install contrib files of git (after package
+# update, otherwise unminimize's "apt upgrade" might fail).
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y \
+ && echo y | unminimize \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y devscripts \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ alien \
+ autoconf \
+ autogen \
+ automake \
+ bc \
+ bind9-host \
+ bison \
+ binutils-dev \
+ bsd-mailx \
+ build-essential \
+ byacc \
+ ccache \
+ ccrypt \
+ chrpath \
+ clang \
+ curl \
+ debhelper \
+ default-jre \
+ dejagnu \
+ dh-autoreconf \
+ dh-translations \
+ distro-info-data \
+ emacs \
+ fakeroot \
+ flex \
+ fp-compiler \
+ gawk \
+ gdc \
+ gdb \
+ gdbserver \
+# gettext is needed according to README-maintainer-mode
+ gettext \
+ gfortran \
+ git \
+ # git-annex : is now used to store bmk results in base-artifacts
+ git-annex \
+ git-filter-repo \
+ gm2 \
+ # For unknown reason "gnat" defaults to "gnat-10" in Jammy, while all other
+ # GCC packages default to "*-11" versions.
+ gnat-11 \
+ gobjc \
+ gobjc++ \
+ golang \
+ groff \
+ guile-3.0 \
+ guile-3.0-dev \
+ less \
+# libc6-dbg is necessary for armhf debugging, but also helps on aarch64.
+ libc6-dbg \
+ libcc1-0 \
+# For building lldb.
+ libedit-dev \
+ libexpat1-dev \
+ libffi-dev \
+ libglib2.0-dev \
+ libgmp-dev \
+# libjpeg is necessary for building jipdate
+ libjpeg-dev \
+ liblzma-dev \
+ libmpc-dev \
+ libmpfr-dev \
+# We need libncurses5 for ancient clang-3289846 used for renderscript AOSP.
+ libncurses5 \
+ libncurses5-dev \
+ libpixman-1-dev \
+ libpython3-dev \
+ libreadline-dev \
+ libssl-dev \
+ libtcnative-1 \
+# Our bionic-built llvm releases expect to find this but
+# focal installs libtinfo6 instead.
+ libtinfo5 \
+ libtool \
+# For building lldb.
+ libxml2-dev \
+ llvm \
+ locales \
+ lzop \
+ make \
+ mingw-w64 \
+ moreutils \
+ net-tools \
+ netcat \
+ nfs-kernel-server \
+ ninja-build \
+ ntp \
+ openssh-server \
+ pkg-config \
+ psmisc \
+ python3-dev \
+ python3-pip \
+ python3-setuptools \
+ python3-venv \
+ python3-wheel \
+ python3-pandas \
+ python3-numpy \
+ python3-scipy \
+# Symlink python to python3 to make upstream "repo", which is downloaded
+# by distro's repo, happy. Also needed to run lnt checks on focal.
+ python-is-python3 \
+# Focal doesn't have "repo" package. We also symlink python to python3
+# below solely to make upstream repo, which is downloaded by distro's repo,
+# happy.
+ repo \
+ rsync \
+# sqlite3 is used by lnt test suite
+ sqlite3 \
+ subversion \
+ sudo \
+ swig \
+# systemtap-sdt-dev allows building glibc with probes, which GDB uses to
+# detect shared library events.
+ systemtap-sdt-dev \
+ tclsh \
+ texinfo \
+ texlive-fonts-recommended \
+ texlive-latex-recommended \
+ time \
+# tox is used to run lnt test suite
+ tox \
+ unifdef \
+ valgrind \
+ vim \
+# virtualenv is used for lnt environment
+ virtualenv \
+ wget \
+# xsltproc is needed by GDB in maintainer mode
+ xsltproc \
+ xz-utils \
+ zip \
+ zlib1g-dev \
+ shellcheck \
+# Update tzdata, because some base images have an incorrect file for UTC.
+ && DEBIAN_FRONTEND=noninteractive apt-get install --reinstall tzdata \
+ && rm -f /etc/ssh/ssh_host_*_key* \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+RUN install -D -p -m0755 /usr/share/doc/git/contrib/workdir/git-new-workdir /usr/local/bin/git-new-workdir \
+ && sed -i -e 's:^session *required *pam_loginuid.so:# session required pam_loginuid.so:' /etc/pam.d/sshd \
+ && mkdir -p /var/run/sshd \
+ && sed -i \
+ -e "/.*MaxStartups.*/d" \
+ -e "/.*MaxSessions.*/d" /etc/ssh/sshd_config \
+ && echo "MaxStartups 256" >> /etc/ssh/sshd_config \
+ && echo "MaxSessions 256" >> /etc/ssh/sshd_config \
+ && locale-gen en_US.UTF-8 && update-locale LANG=en_US.UTF-8 \
+ && pip3 install git-review \
+ && pip3 install psutil \
+# Patchworks client for pre-commit testing with "-f yaml" support and
+# shyaml tool to parse its output; these are used in jenkins-scripts/pw-*.sh.
+ && pip3 install git-pw \
+ && pip3 install shyaml \
+# For testing lldb.
+ && pip3 install pexpect \
+# tensorflow package required to enable MLGO in clang builds (for AOSP toolchains)
+# installation of this package fails on arm64/focal
+ && pip3 install tensorflow \
+ && true
+# Install custom jipdate.
+# FIXME: Revert to installing from pip, when pull requests from maxim-kuvyrkov
+# are merged https://github.com/Linaro/jipdate/pulls .
+RUN git clone -b master https://github.com/maxim-kuvyrkov/jipdate.git /usr/local/jipdate/ \
+ && cd /usr/local/jipdate \
+ && pip3 install flit \
+ && flit build \
+ && FLIT_ROOT_INSTALL=1 flit install --symlink
+# LLVM requires at least CMake 3.20.0 and we need 3.24 for flang support.
+ RUN cd /tmp \
+ && git clone -b v3.24.2 --single-branch --depth 1 https://github.com/Kitware/CMake.git \
+ && cd /tmp/CMake \
+ && ./bootstrap --parallel=$(nproc --all) \
+ && make -j$(nproc --all) \
+ && make -j$(nproc --all) install \
+ && cd /tmp \
+ && rm -rf /tmp/CMake
+# Configure linux tools for benchmarking support.
+#
+# We symlink linux tools to supportted "hw_tags":
+# apm_32, apm_64, sq_32, sq_64, tk1_32, tx1_32, tx1_64.
+# HW_TAGS represent tested configurations of hardware+kernel+perf that
+# work well together. We create new hw_tag for any variation in hardware,
+# kernel, or perf. This gives us assurance that benchmarking data stored
+# under bkp-01.tcwglab:results-<HW_TAG>/ directory has no unexpected variations.
+#
+# For the initial hw_tags for TK1s and TX1s we can use nice short tk1_32,
+# tx1_64, and tx1_32 names, but if we update, say, perf version, we would
+# need to add something like tk1_32-lt_5.4 (updating linux-tools to 5.4) or
+# tx1_64-k_4.10 (updating kernel to 4.10).
+#
+# Bionic's linux-tools-4.18 version has proven to work well with TK1s' 3.10 and
+# TX1s' 4.4 kernels. We need to install it in all distro versionss so that we
+# use same perf version to generate and process results.
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+# cpufrequtils is used by our benchmarking scripts, but we should update them to
+# use cpupower from linux-tools everywhere instead.
+ cpufrequtils \
+ linux-tools-common \
+ && cat /etc/apt/sources.list | sed -e "s/jammy/bionic/g" \
+ > /etc/apt/sources.list.d/bionic.list \
+# Import Bionic key
+ && apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 3B4FE6ACC0B21F32 \
+ && apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ linux-tools-4.18.0-13-generic \
+ linux-tools-5.4.0-74-generic \
+ linux-tools-5.4.0-80-generic \
+ linux-tools-5.4.0-99-generic \
+ linux-tools-5.19.0-41-generic \
+ && apt-get clean \
+ && rm -rf \
+ /etc/apt/sources.list.d/bionic.list \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/* \
+ && ln -s /usr/lib/linux-tools/4.18.0-13-generic /usr/lib/linux-tools/tk1_32 \
+ && ln -s /usr/lib/linux-tools/4.18.0-13-generic /usr/lib/linux-tools/tx1_32 \
+ && ln -s /usr/lib/linux-tools/4.18.0-13-generic /usr/lib/linux-tools/tx1_64 \
+ && ln -s /usr/lib/linux-tools/5.4.0-74-generic /usr/lib/linux-tools/sq_32 \
+ && ln -s /usr/lib/linux-tools/5.4.0-74-generic /usr/lib/linux-tools/sq_64 \
+ && ln -s /usr/lib/linux-tools/5.4.0-80-generic /usr/lib/linux-tools/apm_32 \
+ && ln -s /usr/lib/linux-tools/5.4.0-80-generic /usr/lib/linux-tools/apm_64 \
+ && ln -s /usr/lib/linux-tools/5.4.0-99-generic /usr/lib/linux-tools/fx_32 \
+ && ln -s /usr/lib/linux-tools/5.4.0-99-generic /usr/lib/linux-tools/fx_64 \
+ && ln -s /usr/lib/linux-tools/5.19.0-41-generic /usr/lib/linux-tools/qc_32 \
+ && ln -s /usr/lib/linux-tools/5.19.0-41-generic /usr/lib/linux-tools/qc_64 \
+ && true
+# Install usb libs and OpenOCD on x86 hosts, used to target bare-metal boards.
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ libusb-1.0 \
+ libusb-dev \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+RUN cd /tmp \
+ && git clone --single-branch https://git.code.sf.net/p/openocd/code openocd \
+ && cd /tmp/openocd \
+# Next commit (ce5027ab019ac7f96d05ec5f8f533144b3bcafdf) breaks semihosting.
+# See https://review.openocd.org/c/openocd/+/6888 .
+ && git checkout e5f515f990cc345fd3089a5520f39d5a128329bd \
+ && ./bootstrap \
+ && ./configure --enable-stlink \
+ && make -j$(nproc --all) \
+ && make -j$(nproc --all) install \
+ && cd /tmp \
+ && rm -rf /tmp/openocd
+# Add the latest clang (17.0.6)
+# We need this in tcwg-llvmbot images for *-latest-clang bots, and in tcwg-build/tcwg-dev
+# images for building LLVM with flang enabled.
+# Precommit testing for GNU projects requires autoconf-2.69 and
+# automake-1.15.1. Install them in custom paths to avoid confusing
+# other tools that make use of the system versions.
+# README-maintainer-mode in these projects also mentions libtool-2.2.6
+# and gettext-0.16.1, but there is no tarball available for these
+# versions. In addition, some files have been regenerated using
+# libtool-2.2.7a which is not available either. Build succeeds in
+# with --enable-maintainer-mode and the system versions of libtool and
+# gettext, so rely on them.
+RUN autoconf_version=2.69 autoconf_ver=autoconf-${autoconf_version} \
+ && cd /usr/local \
+ && wget https://ftp.gnu.org/gnu/autoconf/${autoconf_ver}.tar.xz \
+ && cd /tmp \
+ && tar xf /usr/local/${autoconf_ver}.tar.xz \
+ && cd ${autoconf_ver} \
+ && mkdir build \
+ && cd build \
+ && ../configure --prefix=/usr/local/${autoconf_ver} \
+ && make install \
+ && cd /usr/local/${autoconf_ver}/bin \
+ && for f in autoconf autoheader autom4te autoreconf autoscan autoupdate ifnames; do \
+ ln -sv $f $f-${autoconf_version} ; \
+ done \
+ && rm -f /usr/local/${autoconf_ver}.tar.xz \
+ && automake_version=1.15.1 automake_ver=automake-${automake_version} \
+ && cd /usr/local \
+ && wget https://ftp.gnu.org/gnu/automake/${automake_ver}.tar.xz \
+ && cd /tmp \
+ && tar xf /usr/local/${automake_ver}.tar.xz \
+ && cd ${automake_ver} \
+ && mkdir build \
+ && cd build \
+ && ../configure --prefix=/usr/local/${automake_ver} \
+ && make install \
+ && cd /usr/local/${automake_ver}/bin \
+ && for f in aclocal automake; do \
+ ln -sv $f $f-${automake_version} ; \
+ done \
+ && rm -f /usr/local/${automake_ver}.tar.xz \
+ && rm -rf /tmp/${autoconf_ver} /tmp/${automake_ver}
+COPY home-data/ /home-data/
+COPY install-gcc-latest.sh new-user.sh nvidia-power-cycle.sh nvidia-serial.sh \
+ /usr/local/bin/
+RUN \
+ while read line; do \
+ new-user.sh --group $(echo "$line" | cut -d: -f 1,3); \
+ done < <(grep -v ":x:x:" /home-data/group)
+# Create directories required for X11. We use X11 in tcwg-x2go images and,
+# sometimes, in tcwg-dev images.
+# We need to create these before "VOLUME /tmp" directive, since after
+# the directive stuff from /tmp won't make it into the image.
+RUN mkdir -p /tmp/.X11-unix /tmp/.ICE-unix \
+ && chmod 1777 /tmp/.X11-unix /tmp/.ICE-unix
+# We use ssh multiplexing, which creates sockets in /tmp. Overlayfs,
+# which docker is using, can't host sockets, so we use a scratch mount
+# for /tmp. This requires that we add --rm option to "docker run"
+# invocations (e.g., mark "Remove volumes" checkbox in docker plugin) to
+# cleanup host directories used for the scratch mounts.
+VOLUME /tmp
+EXPOSE 22
+CMD ["/usr/sbin/sshd", "-D"]
+# This is a dummy comment to trigger a base image rebuild.
+# checksum: 6abe91c402501929753104a36a53da66
diff --git a/trusty-i386-tcwg-base/build.sh b/jammy-amd64-tcwg-base/build.sh
index 67d8934e..67d8934e 120000
--- a/trusty-i386-tcwg-base/build.sh
+++ b/jammy-amd64-tcwg-base/build.sh
diff --git a/jammy-amd64-tcwg-base/jammy-amd64-tcwg-build/Dockerfile b/jammy-amd64-tcwg-base/jammy-amd64-tcwg-build/Dockerfile
new file mode 100644
index 00000000..020908f6
--- /dev/null
+++ b/jammy-amd64-tcwg-base/jammy-amd64-tcwg-build/Dockerfile
@@ -0,0 +1,29 @@
+# Auto generated by ./tcwg-base/generate-dockerfiles.sh from tcwg-base/tcwg-build/Dockerfile.in. Do not edit.
+FROM linaro/ci-amd64-tcwg-base-ubuntu:jammy
+RUN while read line; do \
+ if [ x"$(echo "$line" | cut -d: -f 4)" != x"9000" ]; then \
+ continue; \
+ fi; \
+ new-user.sh --passwd "$line"; \
+ user=$(echo "$line" | cut -d: -f 1); \
+ sudo -i -u $user ccache -p; \
+ done </home-data/passwd
+# We create ccache directory as tcwg-buildslave, because otherwise
+# "docker run -v ccache-volume:/home/tcwg-buildslave/.ccache" will create
+# it owned by root:root, which will break builds. We set ccache size:
+# - 50G is a bare minimum to ccache the gnu/llvm builds
+# - The aa64/amd64 build machines have enough disk to support 50G
+# - TK1s have small disk, so try to get by with 10G.
+RUN sudo -i -u tcwg-buildslave mkdir -p /home/tcwg-buildslave/.ccache \
+ && sudo -i -u tcwg-buildslave ccache -M 50G
+# Install wine.
+RUN \
+ apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ wine-stable \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+# checksum: 1322aafd37c1e25c38b6b627e3c475ff
diff --git a/trusty-i386-tcwg-base/trusty-i386-tcwg-build/build.sh b/jammy-amd64-tcwg-base/jammy-amd64-tcwg-build/build.sh
index 50162e02..50162e02 120000
--- a/trusty-i386-tcwg-base/trusty-i386-tcwg-build/build.sh
+++ b/jammy-amd64-tcwg-base/jammy-amd64-tcwg-build/build.sh
diff --git a/jammy-amd64-tcwg-base/jammy-amd64-tcwg-dev/Dockerfile b/jammy-amd64-tcwg-base/jammy-amd64-tcwg-dev/Dockerfile
new file mode 100644
index 00000000..47e2afba
--- /dev/null
+++ b/jammy-amd64-tcwg-base/jammy-amd64-tcwg-dev/Dockerfile
@@ -0,0 +1,32 @@
+# Auto generated by ./tcwg-base/generate-dockerfiles.sh from tcwg-base/tcwg-dev/Dockerfile.in. Do not edit.
+FROM linaro/ci-amd64-tcwg-base-ubuntu:jammy
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y \
+ arcanist \
+ apt-file \
+ elpa-flycheck \
+ git-email \
+ git-gui \
+ git-svn \
+ htop \
+ iputils-ping \
+ iputils-tracepath \
+ ispell \
+ less \
+ mc \
+ python3-git \
+ screen \
+ software-properties-common \
+ stgit \
+ tig \
+ tmux \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+RUN apt-file update
+COPY run.sh start.sh /
+ENTRYPOINT ["/run.sh"]
+CMD ["start.sh"]
+# checksum: 3e9774c1f692d5050c2693715d221784
diff --git a/xenial-amd64-tcwg-base/xenial-amd64-tcwg-dev/build.sh b/jammy-amd64-tcwg-base/jammy-amd64-tcwg-dev/build.sh
index e8571a37..e8571a37 120000
--- a/xenial-amd64-tcwg-base/xenial-amd64-tcwg-dev/build.sh
+++ b/jammy-amd64-tcwg-base/jammy-amd64-tcwg-dev/build.sh
diff --git a/jammy-amd64-tcwg-base/jammy-amd64-tcwg-dev/jammy-amd64-tcwg-x2go/Dockerfile b/jammy-amd64-tcwg-base/jammy-amd64-tcwg-dev/jammy-amd64-tcwg-x2go/Dockerfile
new file mode 100644
index 00000000..c6f8228a
--- /dev/null
+++ b/jammy-amd64-tcwg-base/jammy-amd64-tcwg-dev/jammy-amd64-tcwg-x2go/Dockerfile
@@ -0,0 +1,33 @@
+# Auto generated by ./tcwg-base/generate-dockerfiles.sh from tcwg-base/tcwg-dev/tcwg-x2go/Dockerfile.in. Do not edit.
+FROM linaro/ci-amd64-tcwg-dev-ubuntu:jammy
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y \
+ ubuntu-desktop \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y \
+ duplicity \
+ light-themes \
+ mate-desktop-environment \
+ ubuntu-mate-themes \
+ x2goserver \
+ x2goserver-xsession \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y \
+ ddd \
+ xfonts-100dpi \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+# checksum: e552331ac0d778d8a8427eb735b51b45
diff --git a/jammy-amd64-tcwg-base/jammy-amd64-tcwg-dev/jammy-amd64-tcwg-x2go/build.sh b/jammy-amd64-tcwg-base/jammy-amd64-tcwg-dev/jammy-amd64-tcwg-x2go/build.sh
new file mode 120000
index 00000000..6e52e4e6
--- /dev/null
+++ b/jammy-amd64-tcwg-base/jammy-amd64-tcwg-dev/jammy-amd64-tcwg-x2go/build.sh
@@ -0,0 +1 @@
+../../../tcwg-base/tcwg-dev/tcwg-x2go/build.sh \ No newline at end of file
diff --git a/jammy-amd64-tcwg-base/jammy-amd64-tcwg-dev/jammy-amd64-tcwg-x2go/gerrit-branches b/jammy-amd64-tcwg-base/jammy-amd64-tcwg-dev/jammy-amd64-tcwg-x2go/gerrit-branches
new file mode 120000
index 00000000..748350c7
--- /dev/null
+++ b/jammy-amd64-tcwg-base/jammy-amd64-tcwg-dev/jammy-amd64-tcwg-x2go/gerrit-branches
@@ -0,0 +1 @@
+../../../tcwg-base/tcwg-dev/tcwg-x2go/gerrit-branches \ No newline at end of file
diff --git a/jammy-amd64-tcwg-base/jammy-amd64-tcwg-host/Dockerfile b/jammy-amd64-tcwg-base/jammy-amd64-tcwg-host/Dockerfile
new file mode 100644
index 00000000..85d2a109
--- /dev/null
+++ b/jammy-amd64-tcwg-base/jammy-amd64-tcwg-host/Dockerfile
@@ -0,0 +1,37 @@
+# Auto generated by ./tcwg-base/generate-dockerfiles.sh from tcwg-base/tcwg-host/Dockerfile.in. Do not edit.
+FROM linaro/ci-amd64-tcwg-base-ubuntu:jammy
+# Install static user-mode QEMU for running SVE LLVM buildbots via QEMU
+# on x86_64 machines. We bind-mount qemu-aarch64-static binary inside
+# the aarch64 tcwg-llvmbot container, and all specify it as container
+# entrypoint. This allows us to run aarch64 container with SVE support.
+# We do this only for Focal, since Bionic's QEMU version has no SVE support.
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ qemu-user-static \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+COPY docker-stats docker-wrapper tcwg-build.sh /usr/local/bin/
+COPY docker-wrapper /usr/local/bin/docker
+COPY run.sh start.sh /
+# Allow privileged containers to access services on the bare machine.
+# See run_on_bare_machine and run.sh for details.
+COPY run_on_bare_machine /usr/local/bin/
+RUN ln -sf /usr/local/bin/run_on_bare_machine /usr/sbin/sysctl \
+ && ln -sf /usr/local/bin/run_on_bare_machine /usr/bin/systemctl \
+ && ln -sf /usr/local/bin/run_on_bare_machine /usr/bin/timedatectl \
+ && ln -sf /usr/local/bin/run_on_bare_machine /usr/sbin/reboot
+# These are compatibility links for prepare-board.sh to find cpupower in the same
+# place when running "start_board" on bare machine and inside host container.
+# These are for TK1s and TX1s.
+RUN true \
+ && ln -s /usr/lib/linux-tools/4.18.0-13-generic /usr/lib/linux-tools/3.10.40 \
+ && ln -s /usr/lib/linux-tools/4.18.0-13-generic /usr/lib/linux-tools/4.4.38-tegra
+ENV TINI_VERSION v0.18.0
+ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-amd64 /sbin/tini
+RUN chmod +x /sbin/tini
+ENTRYPOINT ["/sbin/tini", "--", "/run.sh"]
+CMD ["start.sh"]
+# checksum: 002a99f683074f27f054ea4ac1c5ee0c
diff --git a/jammy-amd64-tcwg-base/jammy-amd64-tcwg-host/build.sh b/jammy-amd64-tcwg-base/jammy-amd64-tcwg-host/build.sh
new file mode 120000
index 00000000..2c954456
--- /dev/null
+++ b/jammy-amd64-tcwg-base/jammy-amd64-tcwg-host/build.sh
@@ -0,0 +1 @@
+../../tcwg-base/tcwg-host/build.sh \ No newline at end of file
diff --git a/jammy-amd64-tcwg-base/jammy-amd64-tcwg-lnt/Dockerfile b/jammy-amd64-tcwg-base/jammy-amd64-tcwg-lnt/Dockerfile
new file mode 100644
index 00000000..1d4583cc
--- /dev/null
+++ b/jammy-amd64-tcwg-base/jammy-amd64-tcwg-lnt/Dockerfile
@@ -0,0 +1,12 @@
+# Auto generated by ./tcwg-base/generate-dockerfiles.sh from tcwg-base/tcwg-lnt/Dockerfile.in. Do not edit.
+FROM linaro/ci-amd64-tcwg-base-ubuntu:jammy
+RUN new-user.sh --user tcwg-buildslave \
+ && sudo -i -u tcwg-buildslave mkdir bin
+COPY lnt.sh /home/tcwg-buildslave/bin
+COPY run.sh start.sh /
+ENV TINI_VERSION v0.18.0
+ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-amd64 /sbin/tini
+RUN chmod +x /sbin/tini
+ENTRYPOINT ["/sbin/tini", "--", "/run.sh"]
+CMD ["start.sh"]
+# checksum: 502d7b6a7d7304e72a080e9d86554afe
diff --git a/jammy-amd64-tcwg-base/jammy-amd64-tcwg-lnt/build.sh b/jammy-amd64-tcwg-base/jammy-amd64-tcwg-lnt/build.sh
new file mode 120000
index 00000000..7fc24e9b
--- /dev/null
+++ b/jammy-amd64-tcwg-base/jammy-amd64-tcwg-lnt/build.sh
@@ -0,0 +1 @@
+../../tcwg-base/tcwg-lnt/build.sh \ No newline at end of file
diff --git a/jammy-arm64-tcwg-base/Dockerfile b/jammy-arm64-tcwg-base/Dockerfile
new file mode 100644
index 00000000..4c939f20
--- /dev/null
+++ b/jammy-arm64-tcwg-base/Dockerfile
@@ -0,0 +1,311 @@
+# Auto generated by ./tcwg-base/generate-dockerfiles.sh from tcwg-base/Dockerfile.in. Do not edit.
+FROM ubuntu:jammy
+# Use bash for better string escaping (on Ubuntu, /bin/sh is dash).
+SHELL ["/bin/bash", "-c"]
+# Unminimize Ubuntu to install contrib files of git (after package
+# update, otherwise unminimize's "apt upgrade" might fail).
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y \
+ && echo y | unminimize \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y devscripts \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ alien \
+ autoconf \
+ autogen \
+ automake \
+ bc \
+ bind9-host \
+ bison \
+ binutils-dev \
+ bsd-mailx \
+ build-essential \
+ byacc \
+ ccache \
+ ccrypt \
+ chrpath \
+ clang \
+ curl \
+ debhelper \
+ default-jre \
+ dejagnu \
+ dh-autoreconf \
+ dh-translations \
+ distro-info-data \
+ emacs \
+ fakeroot \
+ flex \
+ fp-compiler \
+ gawk \
+ gdc \
+ gdb \
+ gdbserver \
+# gettext is needed according to README-maintainer-mode
+ gettext \
+ gfortran \
+ git \
+ # git-annex : is now used to store bmk results in base-artifacts
+ git-annex \
+ git-filter-repo \
+ gm2 \
+ # For unknown reason "gnat" defaults to "gnat-10" in Jammy, while all other
+ # GCC packages default to "*-11" versions.
+ gnat-11 \
+ gobjc \
+ gobjc++ \
+ golang \
+ groff \
+ guile-3.0 \
+ guile-3.0-dev \
+ less \
+# libc6-dbg is necessary for armhf debugging, but also helps on aarch64.
+ libc6-dbg \
+ libcc1-0 \
+# For building lldb.
+ libedit-dev \
+ libexpat1-dev \
+ libffi-dev \
+ libglib2.0-dev \
+ libgmp-dev \
+# libjpeg is necessary for building jipdate
+ libjpeg-dev \
+ liblzma-dev \
+ libmpc-dev \
+ libmpfr-dev \
+# We need libncurses5 for ancient clang-3289846 used for renderscript AOSP.
+ libncurses5 \
+ libncurses5-dev \
+ libpixman-1-dev \
+ libpython3-dev \
+ libreadline-dev \
+ libssl-dev \
+ libtcnative-1 \
+# Our bionic-built llvm releases expect to find this but
+# focal installs libtinfo6 instead.
+ libtinfo5 \
+ libtool \
+# For building lldb.
+ libxml2-dev \
+ llvm \
+ locales \
+ lzop \
+ make \
+ moreutils \
+ net-tools \
+ netcat \
+ nfs-kernel-server \
+ ninja-build \
+ ntp \
+ openssh-server \
+ pkg-config \
+ psmisc \
+ python3-dev \
+ python3-pip \
+ python3-setuptools \
+ python3-venv \
+ python3-wheel \
+ python3-pandas \
+ python3-numpy \
+ python3-scipy \
+# Symlink python to python3 to make upstream "repo", which is downloaded
+# by distro's repo, happy. Also needed to run lnt checks on focal.
+ python-is-python3 \
+# Focal doesn't have "repo" package. We also symlink python to python3
+# below solely to make upstream repo, which is downloaded by distro's repo,
+# happy.
+ repo \
+ rsync \
+# sqlite3 is used by lnt test suite
+ sqlite3 \
+ subversion \
+ sudo \
+ swig \
+# systemtap-sdt-dev allows building glibc with probes, which GDB uses to
+# detect shared library events.
+ systemtap-sdt-dev \
+ tclsh \
+ texinfo \
+ texlive-fonts-recommended \
+ texlive-latex-recommended \
+ time \
+# tox is used to run lnt test suite
+ tox \
+ unifdef \
+ valgrind \
+ vim \
+# virtualenv is used for lnt environment
+ virtualenv \
+ wget \
+# xsltproc is needed by GDB in maintainer mode
+ xsltproc \
+ xz-utils \
+ zip \
+ zlib1g-dev \
+ shellcheck \
+# Update tzdata, because some base images have an incorrect file for UTC.
+ && DEBIAN_FRONTEND=noninteractive apt-get install --reinstall tzdata \
+ && rm -f /etc/ssh/ssh_host_*_key* \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+RUN install -D -p -m0755 /usr/share/doc/git/contrib/workdir/git-new-workdir /usr/local/bin/git-new-workdir \
+ && sed -i -e 's:^session *required *pam_loginuid.so:# session required pam_loginuid.so:' /etc/pam.d/sshd \
+ && mkdir -p /var/run/sshd \
+ && sed -i \
+ -e "/.*MaxStartups.*/d" \
+ -e "/.*MaxSessions.*/d" /etc/ssh/sshd_config \
+ && echo "MaxStartups 256" >> /etc/ssh/sshd_config \
+ && echo "MaxSessions 256" >> /etc/ssh/sshd_config \
+ && locale-gen en_US.UTF-8 && update-locale LANG=en_US.UTF-8 \
+ && pip3 install git-review \
+ && pip3 install psutil \
+# Patchworks client for pre-commit testing with "-f yaml" support and
+# shyaml tool to parse its output; these are used in jenkins-scripts/pw-*.sh.
+ && pip3 install git-pw \
+ && pip3 install shyaml \
+# For testing lldb.
+ && pip3 install pexpect \
+ && true
+# Install custom jipdate.
+# FIXME: Revert to installing from pip, when pull requests from maxim-kuvyrkov
+# are merged https://github.com/Linaro/jipdate/pulls .
+RUN git clone -b master https://github.com/maxim-kuvyrkov/jipdate.git /usr/local/jipdate/ \
+ && cd /usr/local/jipdate \
+ && pip3 install flit \
+ && flit build \
+ && FLIT_ROOT_INSTALL=1 flit install --symlink
+# LLVM requires at least CMake 3.20.0 and we need 3.24 for flang support.
+RUN wget https://github.com/Kitware/CMake/releases/download/v3.24.2/cmake-3.24.2-linux-aarch64.sh \
+ && chmod +x cmake-3.24.2-linux-aarch64.sh \
+ && ./cmake-3.24.2-linux-aarch64.sh --prefix=/usr/local --skip-license
+# Configure linux tools for benchmarking support.
+#
+# We symlink linux tools to supportted "hw_tags":
+# apm_32, apm_64, sq_32, sq_64, tk1_32, tx1_32, tx1_64.
+# HW_TAGS represent tested configurations of hardware+kernel+perf that
+# work well together. We create new hw_tag for any variation in hardware,
+# kernel, or perf. This gives us assurance that benchmarking data stored
+# under bkp-01.tcwglab:results-<HW_TAG>/ directory has no unexpected variations.
+#
+# For the initial hw_tags for TK1s and TX1s we can use nice short tk1_32,
+# tx1_64, and tx1_32 names, but if we update, say, perf version, we would
+# need to add something like tk1_32-lt_5.4 (updating linux-tools to 5.4) or
+# tx1_64-k_4.10 (updating kernel to 4.10).
+#
+# Bionic's linux-tools-4.18 version has proven to work well with TK1s' 3.10 and
+# TX1s' 4.4 kernels. We need to install it in all distro versionss so that we
+# use same perf version to generate and process results.
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+# cpufrequtils is used by our benchmarking scripts, but we should update them to
+# use cpupower from linux-tools everywhere instead.
+ cpufrequtils \
+ linux-tools-common \
+ && cat /etc/apt/sources.list | sed -e "s/jammy/bionic/g" \
+ > /etc/apt/sources.list.d/bionic.list \
+# Import Bionic key
+ && apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 3B4FE6ACC0B21F32 \
+ && apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ linux-tools-4.18.0-13-generic \
+ linux-tools-5.4.0-74-generic \
+ linux-tools-5.4.0-80-generic \
+ linux-tools-5.4.0-99-generic \
+ linux-tools-5.19.0-41-generic \
+ && apt-get clean \
+ && rm -rf \
+ /etc/apt/sources.list.d/bionic.list \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/* \
+ && ln -s /usr/lib/linux-tools/4.18.0-13-generic /usr/lib/linux-tools/tk1_32 \
+ && ln -s /usr/lib/linux-tools/4.18.0-13-generic /usr/lib/linux-tools/tx1_32 \
+ && ln -s /usr/lib/linux-tools/4.18.0-13-generic /usr/lib/linux-tools/tx1_64 \
+ && ln -s /usr/lib/linux-tools/5.4.0-74-generic /usr/lib/linux-tools/sq_32 \
+ && ln -s /usr/lib/linux-tools/5.4.0-74-generic /usr/lib/linux-tools/sq_64 \
+ && ln -s /usr/lib/linux-tools/5.4.0-80-generic /usr/lib/linux-tools/apm_32 \
+ && ln -s /usr/lib/linux-tools/5.4.0-80-generic /usr/lib/linux-tools/apm_64 \
+ && ln -s /usr/lib/linux-tools/5.4.0-99-generic /usr/lib/linux-tools/fx_32 \
+ && ln -s /usr/lib/linux-tools/5.4.0-99-generic /usr/lib/linux-tools/fx_64 \
+ && ln -s /usr/lib/linux-tools/5.19.0-41-generic /usr/lib/linux-tools/qc_32 \
+ && ln -s /usr/lib/linux-tools/5.19.0-41-generic /usr/lib/linux-tools/qc_64 \
+ && true
+# Add the latest clang (17.0.6)
+# We need this in tcwg-llvmbot images for *-latest-clang bots, and in tcwg-build/tcwg-dev
+# images for building LLVM with flang enabled.
+RUN \
+ clang_ver=clang+llvm-17.0.6-aarch64-linux-gnu \
+ # For the 17.0.6 release, the two archives have different formats.
+ ext=xz \
+ && cd /usr/local \
+ && wget --progress=dot:giga https://github.com/llvm/llvm-project/releases/download/llvmorg-17.0.6/$clang_ver.tar.$ext \
+ && tar xf $clang_ver.tar.$ext \
+ && rm $clang_ver.tar.$ext
+# Add libpgmath, which is used by flang
+RUN git clone https://github.com/rovka/libpgmath-binaries.git \
+ && mv libpgmath-binaries/* /usr/local/lib/ \
+ && rm -rf libpgmath-binaries
+# Precommit testing for GNU projects requires autoconf-2.69 and
+# automake-1.15.1. Install them in custom paths to avoid confusing
+# other tools that make use of the system versions.
+# README-maintainer-mode in these projects also mentions libtool-2.2.6
+# and gettext-0.16.1, but there is no tarball available for these
+# versions. In addition, some files have been regenerated using
+# libtool-2.2.7a which is not available either. Build succeeds in
+# with --enable-maintainer-mode and the system versions of libtool and
+# gettext, so rely on them.
+RUN autoconf_version=2.69 autoconf_ver=autoconf-${autoconf_version} \
+ && cd /usr/local \
+ && wget https://ftp.gnu.org/gnu/autoconf/${autoconf_ver}.tar.xz \
+ && cd /tmp \
+ && tar xf /usr/local/${autoconf_ver}.tar.xz \
+ && cd ${autoconf_ver} \
+ && mkdir build \
+ && cd build \
+ && ../configure --prefix=/usr/local/${autoconf_ver} \
+ && make install \
+ && cd /usr/local/${autoconf_ver}/bin \
+ && for f in autoconf autoheader autom4te autoreconf autoscan autoupdate ifnames; do \
+ ln -sv $f $f-${autoconf_version} ; \
+ done \
+ && rm -f /usr/local/${autoconf_ver}.tar.xz \
+ && automake_version=1.15.1 automake_ver=automake-${automake_version} \
+ && cd /usr/local \
+ && wget https://ftp.gnu.org/gnu/automake/${automake_ver}.tar.xz \
+ && cd /tmp \
+ && tar xf /usr/local/${automake_ver}.tar.xz \
+ && cd ${automake_ver} \
+ && mkdir build \
+ && cd build \
+ && ../configure --prefix=/usr/local/${automake_ver} \
+ && make install \
+ && cd /usr/local/${automake_ver}/bin \
+ && for f in aclocal automake; do \
+ ln -sv $f $f-${automake_version} ; \
+ done \
+ && rm -f /usr/local/${automake_ver}.tar.xz \
+ && rm -rf /tmp/${autoconf_ver} /tmp/${automake_ver}
+COPY home-data/ /home-data/
+COPY install-gcc-latest.sh new-user.sh nvidia-power-cycle.sh nvidia-serial.sh \
+ /usr/local/bin/
+RUN \
+ while read line; do \
+ new-user.sh --group $(echo "$line" | cut -d: -f 1,3); \
+ done < <(grep -v ":x:x:" /home-data/group)
+# Create directories required for X11. We use X11 in tcwg-x2go images and,
+# sometimes, in tcwg-dev images.
+# We need to create these before "VOLUME /tmp" directive, since after
+# the directive stuff from /tmp won't make it into the image.
+RUN mkdir -p /tmp/.X11-unix /tmp/.ICE-unix \
+ && chmod 1777 /tmp/.X11-unix /tmp/.ICE-unix
+# We use ssh multiplexing, which creates sockets in /tmp. Overlayfs,
+# which docker is using, can't host sockets, so we use a scratch mount
+# for /tmp. This requires that we add --rm option to "docker run"
+# invocations (e.g., mark "Remove volumes" checkbox in docker plugin) to
+# cleanup host directories used for the scratch mounts.
+VOLUME /tmp
+EXPOSE 22
+CMD ["/usr/sbin/sshd", "-D"]
+# This is a dummy comment to trigger a base image rebuild.
+# checksum: ff825fc7d2c78670adfaff39d0d05a90
diff --git a/xenial-amd64-tcwg-base/build.sh b/jammy-arm64-tcwg-base/build.sh
index 67d8934e..67d8934e 120000
--- a/xenial-amd64-tcwg-base/build.sh
+++ b/jammy-arm64-tcwg-base/build.sh
diff --git a/jammy-arm64-tcwg-base/jammy-arm64-tcwg-build/Dockerfile b/jammy-arm64-tcwg-base/jammy-arm64-tcwg-build/Dockerfile
new file mode 100644
index 00000000..a377af8e
--- /dev/null
+++ b/jammy-arm64-tcwg-base/jammy-arm64-tcwg-build/Dockerfile
@@ -0,0 +1,19 @@
+# Auto generated by ./tcwg-base/generate-dockerfiles.sh from tcwg-base/tcwg-build/Dockerfile.in. Do not edit.
+FROM linaro/ci-arm64-tcwg-base-ubuntu:jammy
+RUN while read line; do \
+ if [ x"$(echo "$line" | cut -d: -f 4)" != x"9000" ]; then \
+ continue; \
+ fi; \
+ new-user.sh --passwd "$line"; \
+ user=$(echo "$line" | cut -d: -f 1); \
+ sudo -i -u $user ccache -p; \
+ done </home-data/passwd
+# We create ccache directory as tcwg-buildslave, because otherwise
+# "docker run -v ccache-volume:/home/tcwg-buildslave/.ccache" will create
+# it owned by root:root, which will break builds. We set ccache size:
+# - 50G is a bare minimum to ccache the gnu/llvm builds
+# - The aa64/amd64 build machines have enough disk to support 50G
+# - TK1s have small disk, so try to get by with 10G.
+RUN sudo -i -u tcwg-buildslave mkdir -p /home/tcwg-buildslave/.ccache \
+ && sudo -i -u tcwg-buildslave ccache -M 50G
+# checksum: 848b185837dfcd3314a2efa3a51b4b5f
diff --git a/xenial-amd64-tcwg-base/xenial-amd64-tcwg-build/build.sh b/jammy-arm64-tcwg-base/jammy-arm64-tcwg-build/build.sh
index 50162e02..50162e02 120000
--- a/xenial-amd64-tcwg-base/xenial-amd64-tcwg-build/build.sh
+++ b/jammy-arm64-tcwg-base/jammy-arm64-tcwg-build/build.sh
diff --git a/jammy-arm64-tcwg-base/jammy-arm64-tcwg-dev/Dockerfile b/jammy-arm64-tcwg-base/jammy-arm64-tcwg-dev/Dockerfile
new file mode 100644
index 00000000..2e4ee88d
--- /dev/null
+++ b/jammy-arm64-tcwg-base/jammy-arm64-tcwg-dev/Dockerfile
@@ -0,0 +1,32 @@
+# Auto generated by ./tcwg-base/generate-dockerfiles.sh from tcwg-base/tcwg-dev/Dockerfile.in. Do not edit.
+FROM linaro/ci-arm64-tcwg-base-ubuntu:jammy
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y \
+ arcanist \
+ apt-file \
+ elpa-flycheck \
+ git-email \
+ git-gui \
+ git-svn \
+ htop \
+ iputils-ping \
+ iputils-tracepath \
+ ispell \
+ less \
+ mc \
+ python3-git \
+ screen \
+ software-properties-common \
+ stgit \
+ tig \
+ tmux \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+RUN apt-file update
+COPY run.sh start.sh /
+ENTRYPOINT ["/run.sh"]
+CMD ["start.sh"]
+# checksum: f22c2401522b340ea0a1f0a5ce4acc63
diff --git a/xenial-arm64-tcwg-base/xenial-arm64-tcwg-dev/build.sh b/jammy-arm64-tcwg-base/jammy-arm64-tcwg-dev/build.sh
index e8571a37..e8571a37 120000
--- a/xenial-arm64-tcwg-base/xenial-arm64-tcwg-dev/build.sh
+++ b/jammy-arm64-tcwg-base/jammy-arm64-tcwg-dev/build.sh
diff --git a/jammy-arm64-tcwg-base/jammy-arm64-tcwg-dev/jammy-arm64-tcwg-x2go/Dockerfile b/jammy-arm64-tcwg-base/jammy-arm64-tcwg-dev/jammy-arm64-tcwg-x2go/Dockerfile
new file mode 100644
index 00000000..efe1ae7b
--- /dev/null
+++ b/jammy-arm64-tcwg-base/jammy-arm64-tcwg-dev/jammy-arm64-tcwg-x2go/Dockerfile
@@ -0,0 +1,33 @@
+# Auto generated by ./tcwg-base/generate-dockerfiles.sh from tcwg-base/tcwg-dev/tcwg-x2go/Dockerfile.in. Do not edit.
+FROM linaro/ci-arm64-tcwg-dev-ubuntu:jammy
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y \
+ ubuntu-desktop \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y \
+ duplicity \
+ light-themes \
+ mate-desktop-environment \
+ ubuntu-mate-themes \
+ x2goserver \
+ x2goserver-xsession \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y \
+ ddd \
+ xfonts-100dpi \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+# checksum: 461ffa2b036454fa4b2e365f8a08b387
diff --git a/jammy-arm64-tcwg-base/jammy-arm64-tcwg-dev/jammy-arm64-tcwg-x2go/build.sh b/jammy-arm64-tcwg-base/jammy-arm64-tcwg-dev/jammy-arm64-tcwg-x2go/build.sh
new file mode 120000
index 00000000..6e52e4e6
--- /dev/null
+++ b/jammy-arm64-tcwg-base/jammy-arm64-tcwg-dev/jammy-arm64-tcwg-x2go/build.sh
@@ -0,0 +1 @@
+../../../tcwg-base/tcwg-dev/tcwg-x2go/build.sh \ No newline at end of file
diff --git a/jammy-arm64-tcwg-base/jammy-arm64-tcwg-dev/jammy-arm64-tcwg-x2go/gerrit-branches b/jammy-arm64-tcwg-base/jammy-arm64-tcwg-dev/jammy-arm64-tcwg-x2go/gerrit-branches
new file mode 120000
index 00000000..748350c7
--- /dev/null
+++ b/jammy-arm64-tcwg-base/jammy-arm64-tcwg-dev/jammy-arm64-tcwg-x2go/gerrit-branches
@@ -0,0 +1 @@
+../../../tcwg-base/tcwg-dev/tcwg-x2go/gerrit-branches \ No newline at end of file
diff --git a/jammy-arm64-tcwg-base/jammy-arm64-tcwg-host/Dockerfile b/jammy-arm64-tcwg-base/jammy-arm64-tcwg-host/Dockerfile
new file mode 100644
index 00000000..ba8975fa
--- /dev/null
+++ b/jammy-arm64-tcwg-base/jammy-arm64-tcwg-host/Dockerfile
@@ -0,0 +1,24 @@
+# Auto generated by ./tcwg-base/generate-dockerfiles.sh from tcwg-base/tcwg-host/Dockerfile.in. Do not edit.
+FROM linaro/ci-arm64-tcwg-base-ubuntu:jammy
+COPY docker-stats docker-wrapper tcwg-build.sh /usr/local/bin/
+COPY docker-wrapper /usr/local/bin/docker
+COPY run.sh start.sh /
+# Allow privileged containers to access services on the bare machine.
+# See run_on_bare_machine and run.sh for details.
+COPY run_on_bare_machine /usr/local/bin/
+RUN ln -sf /usr/local/bin/run_on_bare_machine /usr/sbin/sysctl \
+ && ln -sf /usr/local/bin/run_on_bare_machine /usr/bin/systemctl \
+ && ln -sf /usr/local/bin/run_on_bare_machine /usr/bin/timedatectl \
+ && ln -sf /usr/local/bin/run_on_bare_machine /usr/sbin/reboot
+# These are compatibility links for prepare-board.sh to find cpupower in the same
+# place when running "start_board" on bare machine and inside host container.
+# These are for TK1s and TX1s.
+RUN true \
+ && ln -s /usr/lib/linux-tools/4.18.0-13-generic /usr/lib/linux-tools/3.10.40 \
+ && ln -s /usr/lib/linux-tools/4.18.0-13-generic /usr/lib/linux-tools/4.4.38-tegra
+ENV TINI_VERSION v0.18.0
+ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-arm64 /sbin/tini
+RUN chmod +x /sbin/tini
+ENTRYPOINT ["/sbin/tini", "--", "/run.sh"]
+CMD ["start.sh"]
+# checksum: bccb05fd35e2bc54da76ea0c4a7d51b9
diff --git a/jammy-arm64-tcwg-base/jammy-arm64-tcwg-host/build.sh b/jammy-arm64-tcwg-base/jammy-arm64-tcwg-host/build.sh
new file mode 120000
index 00000000..2c954456
--- /dev/null
+++ b/jammy-arm64-tcwg-base/jammy-arm64-tcwg-host/build.sh
@@ -0,0 +1 @@
+../../tcwg-base/tcwg-host/build.sh \ No newline at end of file
diff --git a/jammy-arm64-tcwg-base/jammy-arm64-tcwg-llvmbot/Dockerfile b/jammy-arm64-tcwg-base/jammy-arm64-tcwg-llvmbot/Dockerfile
new file mode 100644
index 00000000..9c22d400
--- /dev/null
+++ b/jammy-arm64-tcwg-base/jammy-arm64-tcwg-llvmbot/Dockerfile
@@ -0,0 +1,85 @@
+# Auto generated by ./tcwg-base/generate-dockerfiles.sh from tcwg-base/tcwg-llvmbot/Dockerfile.in. Do not edit.
+FROM linaro/ci-arm64-tcwg-base-ubuntu:jammy
+RUN echo "deb https://apt.buildkite.com/buildkite-agent stable main" | tee /etc/apt/sources.list.d/buildkite-agent.list \
+ && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 32A37959C2FA5C3C99EFBC32A79206696452D198
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y \
+ binutils-gold \
+ buildkite-agent \
+ cpio \
+ gfortran \
+ htop \
+ iotop \
+# Add locales used for testing libcxx
+ language-pack-en \
+ language-pack-fr \
+ language-pack-ja \
+ language-pack-ru \
+ language-pack-zh-hans \
+ libjson-perl \
+ libtinfo-dev \
+# We build clang+llvm releases on Ubuntu Bionic, which has libtinfo.so.5,
+# and we link against it.
+# Ubuntu Focal by default installs libtinfo6 (aka libtinfo.so.6), and
+# our clang+llvm releases don't work on Ubuntu Focal unless we install
+# legacy libtinfo5 (aka libtinfo.so.5).
+# We should no longer need libtinfo5 when we switch building releases to
+# Ubuntu Focal or later.
+ libtinfo5 \
+ linux-tools-common \
+ python3-buildbot-worker \
+ tmux \
+# uuidgen is used by the flang driver script. Not installed by default on focal.
+ uuid-runtime \
+# Although the base image has python3-venv installed, this does not give
+# you 'virtualenv'. Instead you must do 'python3 -m venv'. However the test
+# suite calls virtualenv with --python=python3, so we're ok to use the Python2
+# version here.
+ virtualenv \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+# Libcxx needs some locales that are not generated by default
+RUN printf "fr_CA ISO-8859-1\ncs_CZ ISO-8859-2" >> /etc/locale.gen \
+ && mkdir /usr/local/share/i1en/ \
+ && printf "fr_CA ISO-8859-1\ncs_CZ ISO-8859-2" >> /usr/local/share/i1en/SUPPORTED \
+ && locale-gen
+# Add ninja with support for matching concurrency to available CPU allowance.
+RUN git clone -b limit-on-cpu https://github.com/maxim-kuvyrkov/ninja.git \
+ && cd ninja \
+ && python3 ./configure.py --bootstrap && ./ninja all && ./ninja_test \
+ && mv ninja /usr/local/bin/ninja.limit-on-cpu \
+ && cd .. \
+ && rm -rf ninja \
+ && git clone -b master https://github.com/maxim-kuvyrkov/ninja.git \
+ && cd ninja \
+ && python3 ./configure.py --bootstrap && ./ninja all && ./ninja_test \
+ && mv ninja /usr/local/bin/ninja.limit-on-psi \
+ && cd .. \
+ && rm -rf ninja
+# AArch64 bots run MLIR tests for SVE and SME using qemu-user-static.
+# Armv7-M libcxx bots use qemu-system-arm for emulation.
+# SME support was added in 7.1.0 and other Arm (32 bit) bugs were
+# fixed between then and 8.1.3.
+RUN qemu_ver=8.1.3 \
+ && wget --progress=dot:giga https://download.qemu.org/qemu-${qemu_ver}.tar.xz \
+ && tar -xvf qemu-${qemu_ver}.tar.xz \
+ && cd qemu-${qemu_ver} \
+ && ./configure --prefix=/usr/local --target-list=aarch64-linux-user,arm-softmmu \
+ && make -j$(nproc) \
+ && make install \
+ && rm -rf qemu-${qemu_ver}.tar.xz qemu-${qemu_ver}/
+RUN new-user.sh --user tcwg-buildbot \
+ # Initialize .ccache dir, so that we mount ccache docker volumes with
+ # correct permissions.
+ && sudo -i -u tcwg-buildbot mkdir -p /home/tcwg-buildbot/.ccache \
+ # Allow non root users to access the buildkite config files
+ && chmod -R a+rw /etc/buildkite-agent/
+VOLUME /home
+COPY run.sh .
+COPY start.sh .
+ENTRYPOINT ["/run.sh"]
+CMD ["start.sh"]
+# checksum: bf0f12e46f0f08b3caeee1cebc815d2e
diff --git a/jammy-arm64-tcwg-base/jammy-arm64-tcwg-llvmbot/build.sh b/jammy-arm64-tcwg-base/jammy-arm64-tcwg-llvmbot/build.sh
new file mode 120000
index 00000000..cb3c7a8c
--- /dev/null
+++ b/jammy-arm64-tcwg-base/jammy-arm64-tcwg-llvmbot/build.sh
@@ -0,0 +1 @@
+../../tcwg-base/tcwg-llvmbot/build.sh \ No newline at end of file
diff --git a/jammy-armhf-tcwg-base/Dockerfile b/jammy-armhf-tcwg-base/Dockerfile
new file mode 100644
index 00000000..78e356d5
--- /dev/null
+++ b/jammy-armhf-tcwg-base/Dockerfile
@@ -0,0 +1,321 @@
+# Auto generated by ./tcwg-base/generate-dockerfiles.sh from tcwg-base/Dockerfile.in. Do not edit.
+FROM arm32v7/ubuntu:jammy
+# Use bash for better string escaping (on Ubuntu, /bin/sh is dash).
+SHELL ["/bin/bash", "-c"]
+# Unminimize Ubuntu to install contrib files of git (after package
+# update, otherwise unminimize's "apt upgrade" might fail).
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y \
+ && echo y | unminimize \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y devscripts \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ alien \
+ autoconf \
+ autogen \
+ automake \
+ bc \
+ bind9-host \
+ bison \
+ binutils-dev \
+ bsd-mailx \
+ build-essential \
+ byacc \
+ ccache \
+ ccrypt \
+ chrpath \
+ clang \
+ curl \
+ debhelper \
+ default-jre \
+ dejagnu \
+ dh-autoreconf \
+ dh-translations \
+ distro-info-data \
+ emacs \
+ fakeroot \
+ flex \
+ fp-compiler \
+ gawk \
+ gdc \
+ gdb \
+ gdbserver \
+# gettext is needed according to README-maintainer-mode
+ gettext \
+ gfortran \
+ git \
+ # git-annex : is now used to store bmk results in base-artifacts
+ git-annex \
+ git-filter-repo \
+ gm2 \
+ # For unknown reason "gnat" defaults to "gnat-10" in Jammy, while all other
+ # GCC packages default to "*-11" versions.
+ gnat-11 \
+ gobjc \
+ gobjc++ \
+ golang \
+ groff \
+ guile-3.0 \
+ guile-3.0-dev \
+ less \
+# libc6-dbg is necessary for armhf debugging, but also helps on aarch64.
+ libc6-dbg \
+ libcc1-0 \
+# For building lldb.
+ libedit-dev \
+ libexpat1-dev \
+ libffi-dev \
+ libglib2.0-dev \
+ libgmp-dev \
+# libjpeg is necessary for building jipdate
+ libjpeg-dev \
+ liblzma-dev \
+ libmpc-dev \
+ libmpfr-dev \
+# We need libncurses5 for ancient clang-3289846 used for renderscript AOSP.
+ libncurses5 \
+ libncurses5-dev \
+ libpixman-1-dev \
+ libpython3-dev \
+ libreadline-dev \
+ libssl-dev \
+ libtcnative-1 \
+# Our bionic-built llvm releases expect to find this but
+# focal installs libtinfo6 instead.
+ libtinfo5 \
+ libtool \
+# For building lldb.
+ libxml2-dev \
+ llvm \
+ locales \
+ lzop \
+ make \
+ moreutils \
+ net-tools \
+ netcat \
+ nfs-kernel-server \
+ ninja-build \
+ ntp \
+ openssh-server \
+ pkg-config \
+ psmisc \
+ python3-dev \
+ python3-pip \
+ python3-setuptools \
+ python3-venv \
+ python3-wheel \
+ python3-pandas \
+ python3-numpy \
+ python3-scipy \
+# Symlink python to python3 to make upstream "repo", which is downloaded
+# by distro's repo, happy. Also needed to run lnt checks on focal.
+ python-is-python3 \
+# Focal doesn't have "repo" package. We also symlink python to python3
+# below solely to make upstream repo, which is downloaded by distro's repo,
+# happy.
+ repo \
+ rsync \
+# sqlite3 is used by lnt test suite
+ sqlite3 \
+ subversion \
+ sudo \
+ swig \
+# systemtap-sdt-dev allows building glibc with probes, which GDB uses to
+# detect shared library events.
+ systemtap-sdt-dev \
+ tclsh \
+ texinfo \
+ texlive-fonts-recommended \
+ texlive-latex-recommended \
+ time \
+# tox is used to run lnt test suite
+ tox \
+ unifdef \
+ valgrind \
+ vim \
+# virtualenv is used for lnt environment
+ virtualenv \
+ wget \
+# xsltproc is needed by GDB in maintainer mode
+ xsltproc \
+ xz-utils \
+ zip \
+ zlib1g-dev \
+ shellcheck \
+# Update tzdata, because some base images have an incorrect file for UTC.
+ && DEBIAN_FRONTEND=noninteractive apt-get install --reinstall tzdata \
+ && rm -f /etc/ssh/ssh_host_*_key* \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+RUN install -D -p -m0755 /usr/share/doc/git/contrib/workdir/git-new-workdir /usr/local/bin/git-new-workdir \
+ && sed -i -e 's:^session *required *pam_loginuid.so:# session required pam_loginuid.so:' /etc/pam.d/sshd \
+ && mkdir -p /var/run/sshd \
+ && sed -i \
+ -e "/.*MaxStartups.*/d" \
+ -e "/.*MaxSessions.*/d" /etc/ssh/sshd_config \
+ && echo "MaxStartups 256" >> /etc/ssh/sshd_config \
+ && echo "MaxSessions 256" >> /etc/ssh/sshd_config \
+ && locale-gen en_US.UTF-8 && update-locale LANG=en_US.UTF-8 \
+ && pip3 install git-review \
+ && pip3 install psutil \
+# Patchworks client for pre-commit testing with "-f yaml" support and
+# shyaml tool to parse its output; these are used in jenkins-scripts/pw-*.sh.
+ && pip3 install git-pw \
+ && pip3 install shyaml \
+# For testing lldb.
+ && pip3 install pexpect \
+ && true
+# Install custom jipdate.
+# FIXME: Revert to installing from pip, when pull requests from maxim-kuvyrkov
+# are merged https://github.com/Linaro/jipdate/pulls .
+RUN git clone -b master https://github.com/maxim-kuvyrkov/jipdate.git /usr/local/jipdate/ \
+ && cd /usr/local/jipdate \
+ && pip3 install flit \
+ && flit build \
+ && FLIT_ROOT_INSTALL=1 flit install --symlink
+# LLVM requires at least CMake 3.20.0 and we need 3.24 for flang support.
+ RUN cd /tmp \
+ && git clone -b v3.24.2 --single-branch --depth 1 https://github.com/Kitware/CMake.git \
+ && cd /tmp/CMake \
+ && ./bootstrap --parallel=$(nproc --all) \
+ && make -j$(nproc --all) \
+ && make -j$(nproc --all) install \
+ && cd /tmp \
+ && rm -rf /tmp/CMake
+# Configure linux tools for benchmarking support.
+#
+# We symlink linux tools to supportted "hw_tags":
+# apm_32, apm_64, sq_32, sq_64, tk1_32, tx1_32, tx1_64.
+# HW_TAGS represent tested configurations of hardware+kernel+perf that
+# work well together. We create new hw_tag for any variation in hardware,
+# kernel, or perf. This gives us assurance that benchmarking data stored
+# under bkp-01.tcwglab:results-<HW_TAG>/ directory has no unexpected variations.
+#
+# For the initial hw_tags for TK1s and TX1s we can use nice short tk1_32,
+# tx1_64, and tx1_32 names, but if we update, say, perf version, we would
+# need to add something like tk1_32-lt_5.4 (updating linux-tools to 5.4) or
+# tx1_64-k_4.10 (updating kernel to 4.10).
+#
+# Bionic's linux-tools-4.18 version has proven to work well with TK1s' 3.10 and
+# TX1s' 4.4 kernels. We need to install it in all distro versionss so that we
+# use same perf version to generate and process results.
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+# cpufrequtils is used by our benchmarking scripts, but we should update them to
+# use cpupower from linux-tools everywhere instead.
+ cpufrequtils \
+ linux-tools-common \
+ && cat /etc/apt/sources.list | sed -e "s/jammy/bionic/g" \
+ > /etc/apt/sources.list.d/bionic.list \
+# Import Bionic key
+ && apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 3B4FE6ACC0B21F32 \
+ && apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ linux-tools-4.18.0-13-generic \
+ linux-tools-5.4.0-74-generic \
+ linux-tools-5.4.0-80-generic \
+ linux-tools-5.4.0-99-generic \
+ linux-tools-5.19.0-41-generic \
+ && apt-get clean \
+ && rm -rf \
+ /etc/apt/sources.list.d/bionic.list \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/* \
+ && ln -s /usr/lib/linux-tools/4.18.0-13-generic /usr/lib/linux-tools/tk1_32 \
+ && ln -s /usr/lib/linux-tools/4.18.0-13-generic /usr/lib/linux-tools/tx1_32 \
+ && ln -s /usr/lib/linux-tools/4.18.0-13-generic /usr/lib/linux-tools/tx1_64 \
+ && ln -s /usr/lib/linux-tools/5.4.0-74-generic /usr/lib/linux-tools/sq_32 \
+ && ln -s /usr/lib/linux-tools/5.4.0-74-generic /usr/lib/linux-tools/sq_64 \
+ && ln -s /usr/lib/linux-tools/5.4.0-80-generic /usr/lib/linux-tools/apm_32 \
+ && ln -s /usr/lib/linux-tools/5.4.0-80-generic /usr/lib/linux-tools/apm_64 \
+ && ln -s /usr/lib/linux-tools/5.4.0-99-generic /usr/lib/linux-tools/fx_32 \
+ && ln -s /usr/lib/linux-tools/5.4.0-99-generic /usr/lib/linux-tools/fx_64 \
+ && ln -s /usr/lib/linux-tools/5.19.0-41-generic /usr/lib/linux-tools/qc_32 \
+ && ln -s /usr/lib/linux-tools/5.19.0-41-generic /usr/lib/linux-tools/qc_64 \
+ && true
+COPY install-armhf-perf-workaround.sh /usr/lib/linux-tools/
+# Add the latest clang (17.0.6)
+# We need this in tcwg-llvmbot images for *-latest-clang bots, and in tcwg-build/tcwg-dev
+# images for building LLVM with flang enabled.
+RUN \
+ clang_ver=clang+llvm-17.0.6-armv7a-linux-gnueabihf \
+ ext=gz \
+ && cd /usr/local \
+ && wget --progress=dot:giga https://github.com/llvm/llvm-project/releases/download/llvmorg-17.0.6/$clang_ver.tar.$ext \
+ && tar xf $clang_ver.tar.$ext \
+ && rm $clang_ver.tar.$ext
+# Precommit testing for GNU projects requires autoconf-2.69 and
+# automake-1.15.1. Install them in custom paths to avoid confusing
+# other tools that make use of the system versions.
+# README-maintainer-mode in these projects also mentions libtool-2.2.6
+# and gettext-0.16.1, but there is no tarball available for these
+# versions. In addition, some files have been regenerated using
+# libtool-2.2.7a which is not available either. Build succeeds in
+# with --enable-maintainer-mode and the system versions of libtool and
+# gettext, so rely on them.
+RUN autoconf_version=2.69 autoconf_ver=autoconf-${autoconf_version} \
+ && cd /usr/local \
+ && wget https://ftp.gnu.org/gnu/autoconf/${autoconf_ver}.tar.xz \
+ && cd /tmp \
+ && tar xf /usr/local/${autoconf_ver}.tar.xz \
+ && cd ${autoconf_ver} \
+ && mkdir build \
+ && cd build \
+ && ../configure --prefix=/usr/local/${autoconf_ver} \
+ && make install \
+ && cd /usr/local/${autoconf_ver}/bin \
+ && for f in autoconf autoheader autom4te autoreconf autoscan autoupdate ifnames; do \
+ ln -sv $f $f-${autoconf_version} ; \
+ done \
+ && rm -f /usr/local/${autoconf_ver}.tar.xz \
+ && automake_version=1.15.1 automake_ver=automake-${automake_version} \
+ && cd /usr/local \
+ && wget https://ftp.gnu.org/gnu/automake/${automake_ver}.tar.xz \
+ && cd /tmp \
+ && tar xf /usr/local/${automake_ver}.tar.xz \
+ && cd ${automake_ver} \
+ && mkdir build \
+ && cd build \
+ && ../configure --prefix=/usr/local/${automake_ver} \
+ && make install \
+ && cd /usr/local/${automake_ver}/bin \
+ && for f in aclocal automake; do \
+ ln -sv $f $f-${automake_version} ; \
+ done \
+ && rm -f /usr/local/${automake_ver}.tar.xz \
+ && rm -rf /tmp/${autoconf_ver} /tmp/${automake_ver}
+COPY home-data/ /home-data/
+COPY install-gcc-latest.sh new-user.sh nvidia-power-cycle.sh nvidia-serial.sh \
+ /usr/local/bin/
+RUN \
+ while read line; do \
+ new-user.sh --group $(echo "$line" | cut -d: -f 1,3); \
+ done < <(grep -v ":x:x:" /home-data/group)
+# Create directories required for X11. We use X11 in tcwg-x2go images and,
+# sometimes, in tcwg-dev images.
+# We need to create these before "VOLUME /tmp" directive, since after
+# the directive stuff from /tmp won't make it into the image.
+RUN mkdir -p /tmp/.X11-unix /tmp/.ICE-unix \
+ && chmod 1777 /tmp/.X11-unix /tmp/.ICE-unix
+# For AArch32 images, add a warning if an interactive shell is opened in an
+# AArch64 environment.
+RUN echo $'if [ "$(uname -m)" == "aarch64" ] || [ "$(uname -m)" == "x86_64" ]; then\n' \
+ $' echo "============================================================================================="\n' \
+ $' echo "WARNING: This is a 32-bit container, but your shell is running in a 64-bit environment."\n' \
+ $' echo "You probably want to run your shell with the \'linux32\' program to get a 32-bit environment."\n' \
+ $' echo "============================================================================================="\n' \
+ $'fi\n' \
+ >> /etc/bash.bashrc
+# We use ssh multiplexing, which creates sockets in /tmp. Overlayfs,
+# which docker is using, can't host sockets, so we use a scratch mount
+# for /tmp. This requires that we add --rm option to "docker run"
+# invocations (e.g., mark "Remove volumes" checkbox in docker plugin) to
+# cleanup host directories used for the scratch mounts.
+VOLUME /tmp
+EXPOSE 22
+CMD ["linux32", "/usr/sbin/sshd", "-D"]
+# This is a dummy comment to trigger a base image rebuild.
+# checksum: c703892b252d152771e3928eb17e2f65
diff --git a/xenial-arm64-tcwg-base/build.sh b/jammy-armhf-tcwg-base/build.sh
index 67d8934e..67d8934e 120000
--- a/xenial-arm64-tcwg-base/build.sh
+++ b/jammy-armhf-tcwg-base/build.sh
diff --git a/jammy-armhf-tcwg-base/jammy-armhf-tcwg-build/Dockerfile b/jammy-armhf-tcwg-base/jammy-armhf-tcwg-build/Dockerfile
new file mode 100644
index 00000000..a572a1b2
--- /dev/null
+++ b/jammy-armhf-tcwg-base/jammy-armhf-tcwg-build/Dockerfile
@@ -0,0 +1,19 @@
+# Auto generated by ./tcwg-base/generate-dockerfiles.sh from tcwg-base/tcwg-build/Dockerfile.in. Do not edit.
+FROM linaro/ci-armhf-tcwg-base-ubuntu:jammy
+RUN while read line; do \
+ if [ x"$(echo "$line" | cut -d: -f 4)" != x"9000" ]; then \
+ continue; \
+ fi; \
+ new-user.sh --passwd "$line"; \
+ user=$(echo "$line" | cut -d: -f 1); \
+ sudo -i -u $user ccache -p; \
+ done </home-data/passwd
+# We create ccache directory as tcwg-buildslave, because otherwise
+# "docker run -v ccache-volume:/home/tcwg-buildslave/.ccache" will create
+# it owned by root:root, which will break builds. We set ccache size:
+# - 50G is a bare minimum to ccache the gnu/llvm builds
+# - The aa64/amd64 build machines have enough disk to support 50G
+# - TK1s have small disk, so try to get by with 10G.
+RUN sudo -i -u tcwg-buildslave mkdir -p /home/tcwg-buildslave/.ccache \
+ && sudo -i -u tcwg-buildslave ccache -M 10G
+# checksum: 3db7084b1504bf636c8d96573a9299d1
diff --git a/xenial-arm64-tcwg-base/xenial-arm64-tcwg-build/build.sh b/jammy-armhf-tcwg-base/jammy-armhf-tcwg-build/build.sh
index 50162e02..50162e02 120000
--- a/xenial-arm64-tcwg-base/xenial-arm64-tcwg-build/build.sh
+++ b/jammy-armhf-tcwg-base/jammy-armhf-tcwg-build/build.sh
diff --git a/jammy-armhf-tcwg-base/jammy-armhf-tcwg-dev/Dockerfile b/jammy-armhf-tcwg-base/jammy-armhf-tcwg-dev/Dockerfile
new file mode 100644
index 00000000..ff6aa7d5
--- /dev/null
+++ b/jammy-armhf-tcwg-base/jammy-armhf-tcwg-dev/Dockerfile
@@ -0,0 +1,32 @@
+# Auto generated by ./tcwg-base/generate-dockerfiles.sh from tcwg-base/tcwg-dev/Dockerfile.in. Do not edit.
+FROM linaro/ci-armhf-tcwg-base-ubuntu:jammy
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y \
+ arcanist \
+ apt-file \
+ elpa-flycheck \
+ git-email \
+ git-gui \
+ git-svn \
+ htop \
+ iputils-ping \
+ iputils-tracepath \
+ ispell \
+ less \
+ mc \
+ python3-git \
+ screen \
+ software-properties-common \
+ stgit \
+ tig \
+ tmux \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+RUN apt-file update
+COPY run.sh start.sh /
+ENTRYPOINT ["linux32", "/run.sh"]
+CMD ["start.sh"]
+# checksum: f3649c5dac3e39910388f6d8b99c7cf1
diff --git a/xenial-armhf-tcwg-base/xenial-armhf-tcwg-dev/build.sh b/jammy-armhf-tcwg-base/jammy-armhf-tcwg-dev/build.sh
index e8571a37..e8571a37 120000
--- a/xenial-armhf-tcwg-base/xenial-armhf-tcwg-dev/build.sh
+++ b/jammy-armhf-tcwg-base/jammy-armhf-tcwg-dev/build.sh
diff --git a/jammy-armhf-tcwg-base/jammy-armhf-tcwg-host/Dockerfile b/jammy-armhf-tcwg-base/jammy-armhf-tcwg-host/Dockerfile
new file mode 100644
index 00000000..16e68200
--- /dev/null
+++ b/jammy-armhf-tcwg-base/jammy-armhf-tcwg-host/Dockerfile
@@ -0,0 +1,24 @@
+# Auto generated by ./tcwg-base/generate-dockerfiles.sh from tcwg-base/tcwg-host/Dockerfile.in. Do not edit.
+FROM linaro/ci-armhf-tcwg-base-ubuntu:jammy
+COPY docker-stats docker-wrapper tcwg-build.sh /usr/local/bin/
+COPY docker-wrapper /usr/local/bin/docker
+COPY run.sh start.sh /
+# Allow privileged containers to access services on the bare machine.
+# See run_on_bare_machine and run.sh for details.
+COPY run_on_bare_machine /usr/local/bin/
+RUN ln -sf /usr/local/bin/run_on_bare_machine /usr/sbin/sysctl \
+ && ln -sf /usr/local/bin/run_on_bare_machine /usr/bin/systemctl \
+ && ln -sf /usr/local/bin/run_on_bare_machine /usr/bin/timedatectl \
+ && ln -sf /usr/local/bin/run_on_bare_machine /usr/sbin/reboot
+# These are compatibility links for prepare-board.sh to find cpupower in the same
+# place when running "start_board" on bare machine and inside host container.
+# These are for TK1s and TX1s.
+RUN true \
+ && ln -s /usr/lib/linux-tools/4.18.0-13-generic /usr/lib/linux-tools/3.10.40 \
+ && ln -s /usr/lib/linux-tools/4.18.0-13-generic /usr/lib/linux-tools/4.4.38-tegra
+ENV TINI_VERSION v0.18.0
+ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-armhf /sbin/tini
+RUN chmod +x /sbin/tini
+ENTRYPOINT ["/sbin/tini", "--", "linux32", "/run.sh"]
+CMD ["start.sh"]
+# checksum: 8b5bd481da58baba499ec495c5255866
diff --git a/jammy-armhf-tcwg-base/jammy-armhf-tcwg-host/build.sh b/jammy-armhf-tcwg-base/jammy-armhf-tcwg-host/build.sh
new file mode 120000
index 00000000..2c954456
--- /dev/null
+++ b/jammy-armhf-tcwg-base/jammy-armhf-tcwg-host/build.sh
@@ -0,0 +1 @@
+../../tcwg-base/tcwg-host/build.sh \ No newline at end of file
diff --git a/jammy-armhf-tcwg-base/jammy-armhf-tcwg-llvmbot/Dockerfile b/jammy-armhf-tcwg-base/jammy-armhf-tcwg-llvmbot/Dockerfile
new file mode 100644
index 00000000..452e4934
--- /dev/null
+++ b/jammy-armhf-tcwg-base/jammy-armhf-tcwg-llvmbot/Dockerfile
@@ -0,0 +1,73 @@
+# Auto generated by ./tcwg-base/generate-dockerfiles.sh from tcwg-base/tcwg-llvmbot/Dockerfile.in. Do not edit.
+FROM linaro/ci-armhf-tcwg-base-ubuntu:jammy
+RUN echo "deb https://apt.buildkite.com/buildkite-agent stable main" | tee /etc/apt/sources.list.d/buildkite-agent.list \
+ && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 32A37959C2FA5C3C99EFBC32A79206696452D198
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y \
+ binutils-gold \
+ buildkite-agent \
+ cpio \
+ gfortran \
+ htop \
+ iotop \
+# Add locales used for testing libcxx
+ language-pack-en \
+ language-pack-fr \
+ language-pack-ja \
+ language-pack-ru \
+ language-pack-zh-hans \
+ libjson-perl \
+ libtinfo-dev \
+# We build clang+llvm releases on Ubuntu Bionic, which has libtinfo.so.5,
+# and we link against it.
+# Ubuntu Focal by default installs libtinfo6 (aka libtinfo.so.6), and
+# our clang+llvm releases don't work on Ubuntu Focal unless we install
+# legacy libtinfo5 (aka libtinfo.so.5).
+# We should no longer need libtinfo5 when we switch building releases to
+# Ubuntu Focal or later.
+ libtinfo5 \
+ linux-tools-common \
+ python3-buildbot-worker \
+ tmux \
+# uuidgen is used by the flang driver script. Not installed by default on focal.
+ uuid-runtime \
+# Although the base image has python3-venv installed, this does not give
+# you 'virtualenv'. Instead you must do 'python3 -m venv'. However the test
+# suite calls virtualenv with --python=python3, so we're ok to use the Python2
+# version here.
+ virtualenv \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+# Libcxx needs some locales that are not generated by default
+RUN printf "fr_CA ISO-8859-1\ncs_CZ ISO-8859-2" >> /etc/locale.gen \
+ && mkdir /usr/local/share/i1en/ \
+ && printf "fr_CA ISO-8859-1\ncs_CZ ISO-8859-2" >> /usr/local/share/i1en/SUPPORTED \
+ && locale-gen
+# Add ninja with support for matching concurrency to available CPU allowance.
+RUN git clone -b limit-on-cpu https://github.com/maxim-kuvyrkov/ninja.git \
+ && cd ninja \
+ && python3 ./configure.py --bootstrap && ./ninja all && ./ninja_test \
+ && mv ninja /usr/local/bin/ninja.limit-on-cpu \
+ && cd .. \
+ && rm -rf ninja \
+ && git clone -b master https://github.com/maxim-kuvyrkov/ninja.git \
+ && cd ninja \
+ && python3 ./configure.py --bootstrap && ./ninja all && ./ninja_test \
+ && mv ninja /usr/local/bin/ninja.limit-on-psi \
+ && cd .. \
+ && rm -rf ninja
+RUN new-user.sh --user tcwg-buildbot \
+ # Initialize .ccache dir, so that we mount ccache docker volumes with
+ # correct permissions.
+ && sudo -i -u tcwg-buildbot mkdir -p /home/tcwg-buildbot/.ccache \
+ # Allow non root users to access the buildkite config files
+ && chmod -R a+rw /etc/buildkite-agent/
+VOLUME /home
+COPY run.sh .
+COPY start.sh .
+ENTRYPOINT ["linux32", "/run.sh"]
+CMD ["start.sh"]
+# checksum: 14a7d240dbcb9dca43f398321a3da6f5
diff --git a/jammy-armhf-tcwg-base/jammy-armhf-tcwg-llvmbot/build.sh b/jammy-armhf-tcwg-base/jammy-armhf-tcwg-llvmbot/build.sh
new file mode 120000
index 00000000..cb3c7a8c
--- /dev/null
+++ b/jammy-armhf-tcwg-base/jammy-armhf-tcwg-llvmbot/build.sh
@@ -0,0 +1 @@
+../../tcwg-base/tcwg-llvmbot/build.sh \ No newline at end of file
diff --git a/jessie-amd64-jenkins-master/Dockerfile b/jessie-amd64-jenkins-master/Dockerfile
deleted file mode 100644
index 1d407da2..00000000
--- a/jessie-amd64-jenkins-master/Dockerfile
+++ /dev/null
@@ -1,54 +0,0 @@
-FROM jenkins/jenkins:2.107.2
-
-ENV JENKINS_JAVA_PARAMETERS="-server -XX:+AlwaysPreTouch -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/jenkins/heapdump.log -verbose:gc -Xloggc:/var/log/jenkins/gc-%t.log -XX:NumberOfGCLogFiles=2 -XX:+UseGCLogFileRotation -XX:GCLogFileSize=100m -XX:+PrintGC -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintHeapAtGC -XX:+PrintGCCause -XX:+PrintTenuringDistribution -XX:+PrintReferenceGC -XX:+PrintAdaptiveSizePolicy -XX:+UseG1GC -XX:+UseStringDeduplication -XX:+ParallelRefProcEnabled -XX:+ExplicitGCInvokesConcurrent -XX:+UnlockDiagnosticVMOptions -XX:G1SummarizeRSetStatsPeriod=1 -XX:MaxMetaspaceExpansion=64M -Djenkins.model.Jenkins.logStartupPerformance=true"
-ENV JAVA_OPTS="-Xms4g -Xmx8g $JENKINS_JAVA_PARAMETERS -Djava.awt.headless=true -Dhudson.slaves.WorkspaceList='_' -Dhudson.model.ParametersAction.keepUndefinedParameters=true -Dorg.jenkinsci.plugins.gitclient.Git.timeOut=30 -Dorg.eclipse.jetty.server.Request.maxFormContentSize=1000000"
-ENV JENKINS_OPTS="--sessionTimeout=1440"
-
-# Install jenkins job builder
-# Create plugins directory, symlinked on host machine
-USER root
-RUN wget -q https://bootstrap.pypa.io/get-pip.py -O /tmp/get-pip.py \
- && python /tmp/get-pip.py \
- && rm -f /tmp/get-pip.py \
- && pip install jenkins-job-builder==2.0.5 pyyaml==3.12 jinja2==2.9.6 python-jenkins==0.4.15 \
- && git clone --depth 1 https://git.linaro.org/infrastructure/jjb-linaro-plugin.git \
- && cd jjb-linaro-plugin && python setup.py install \
- && cd .. && rm -rf jjb-linaro-plugin \
- && mkdir -p /var/jenkins_plugins \
- && chown jenkins:jenkins /var/jenkins_plugins \
- && ln -s /var/jenkins_home /var/lib/jenkins \
- && mkdir -p /usr/share/groovy/lib \
- && wget -q https://search.maven.org/remotecontent?filepath=org/codehaus/groovy/groovy-xmlrpc/0.8/groovy-xmlrpc-0.8.jar -O /usr/share/groovy/lib/groovy-xmlrpc-0.8.jar \
- && wget -q https://storage.googleapis.com/git-repo-downloads/repo -O /usr/bin/repo \
- && chmod +x /usr/bin/repo \
- && apt-get update \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
- ansible \
- debian-keyring \
- devscripts \
- dirmngr \
- dput \
- jq \
- moreutils \
- python-future \
- python-paramiko \
- python-requests \
- python3-setuptools \
- python3-wheel \
- sshpass \
- virtualenv \
- && wget -q https://launchpad.net/ubuntu/+archive/primary/+files/dput_0.9.6.4ubuntu3_all.deb \
- && dpkg -i --force-all *.deb \
- && apt-get clean \
- && rm -rf \
- /var/lib/apt/lists/* \
- *.deb
-USER jenkins
-
-# Install jenkins plugins
-COPY plugins.txt .
-RUN install-plugins.sh $(echo $(cat plugins.txt)) \
- && wget -q http://people.linaro.org/~paul.sokolovsky/jenkins/linaro-pubapi-1.3.hpi -O /usr/share/jenkins/ref/plugins/linaro-pubapi-1.3.hpi
-
-# Forward ports to host
-EXPOSE 2222
diff --git a/jessie-amd64-jenkins-master/plugins.txt b/jessie-amd64-jenkins-master/plugins.txt
deleted file mode 100644
index b71ec5a3..00000000
--- a/jessie-amd64-jenkins-master/plugins.txt
+++ /dev/null
@@ -1,69 +0,0 @@
-ansicolor:0.5.2
-ant:1.8
-antisamy-markup-formatter:1.5
-apache-httpcomponents-client-4-api:4.5.3-2.1
-bouncycastle-api:2.16.2
-build-blocker:1.7.3
-build-monitor-plugin:1.10+build.201611041949
-build-name-setter:1.6.9
-build-timeout:1.19
-command-launcher:1.2
-copy-to-slave:1.4.4
-copyartifact:1.39.1
-coverity:1.11.0
-crowd2:1.8
-cvs:2.14
-docker-build-publish:1.3.2
-docker-plugin:1.0.0
-docker-slaves:1.0.7
-dropdown-viewstabbar-plugin:1.7
-dynamic-axis:1.0.3
-ec2:1.39
-email-ext:2.62
-embeddable-build-status:1.9
-extended-read-permission:2.0
-external-monitor-job:1.7
-ghprb:1.40.0
-gerrit-trigger:2.27.5
-github-organization-folder:1.6
-greenballs:1.15
-groovy-postbuild:1.10
-heavy-job:1.1
-htmlpublisher:1.15
-ircbot:2.30
-jira:2.5
-jenkins-multijob-plugin:1.29
-jobConfigHistory:2.18
-ldap:1.20
-leastload:2.0.1
-log-parser:2.0
-matrix-auth:2.2
-matrix-combinations-parameter:1.3.0
-matrixtieparent:1.2
-mercurial:1.61
-metrics:3.1.2.11
-monitoring:1.71.0
-multiple-scms:0.6
-naginator:1.17.2
-nodelabelparameter:1.7.2
-pam-auth:1.3
-pipeline-utility-steps:2.0.2
-plot:1.11
-PrioritySorter:3.6.0
-publish-over-ssh:1.19.1
-rebuild:1.28
-repo:1.10.7
-simple-theme-plugin:0.4
-ssh-agent:1.15
-subversion:2.10.5
-tap:2.2.1
-throttle-concurrents:2.0.1
-timestamper:1.8.9
-translation:1.16
-urltrigger:0.41
-warnings:4.66
-windows-slaves:1.3.1
-workflow-aggregator:2.5
-ws-cleanup:0.34
-xvfb:1.1.3
-yet-another-docker-plugin:0.1.0-rc47
diff --git a/jessie-amd64/build.sh b/jessie-amd64/build.sh
deleted file mode 100755
index 2b645dee..00000000
--- a/jessie-amd64/build.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/sh
-
-set -e
-
-trap cleanup_exit INT TERM EXIT
-
-cleanup_exit()
-{
- rm -f *.list *.key
-}
-
-export LANG=C
-
-DISTRIBUTION=$(basename ${PWD} | cut -f1 -d '-')
-ARCHITECTURE=$(basename ${PWD} | cut -f2 -d '-')
-
-cp -a ../${DISTRIBUTION}.list linaro.list
-cp -a ../linaro-overlay-repo.list ../linaro-overlay-repo.key .
-sed -e "s|@DISTRIBUTION@|${DISTRIBUTION}|" -i *.list
-
-image=linaro/ci-${ARCHITECTURE}-debian:${DISTRIBUTION}
-docker build --pull --tag=$image .
-echo $image > .docker-tag
diff --git a/jessie-arm64/build.sh b/jessie-arm64/build.sh
deleted file mode 100755
index 2b645dee..00000000
--- a/jessie-arm64/build.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/sh
-
-set -e
-
-trap cleanup_exit INT TERM EXIT
-
-cleanup_exit()
-{
- rm -f *.list *.key
-}
-
-export LANG=C
-
-DISTRIBUTION=$(basename ${PWD} | cut -f1 -d '-')
-ARCHITECTURE=$(basename ${PWD} | cut -f2 -d '-')
-
-cp -a ../${DISTRIBUTION}.list linaro.list
-cp -a ../linaro-overlay-repo.list ../linaro-overlay-repo.key .
-sed -e "s|@DISTRIBUTION@|${DISTRIBUTION}|" -i *.list
-
-image=linaro/ci-${ARCHITECTURE}-debian:${DISTRIBUTION}
-docker build --pull --tag=$image .
-echo $image > .docker-tag
diff --git a/jessie-armhf/build.sh b/jessie-armhf/build.sh
deleted file mode 100755
index 2b645dee..00000000
--- a/jessie-armhf/build.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/sh
-
-set -e
-
-trap cleanup_exit INT TERM EXIT
-
-cleanup_exit()
-{
- rm -f *.list *.key
-}
-
-export LANG=C
-
-DISTRIBUTION=$(basename ${PWD} | cut -f1 -d '-')
-ARCHITECTURE=$(basename ${PWD} | cut -f2 -d '-')
-
-cp -a ../${DISTRIBUTION}.list linaro.list
-cp -a ../linaro-overlay-repo.list ../linaro-overlay-repo.key .
-sed -e "s|@DISTRIBUTION@|${DISTRIBUTION}|" -i *.list
-
-image=linaro/ci-${ARCHITECTURE}-debian:${DISTRIBUTION}
-docker build --pull --tag=$image .
-echo $image > .docker-tag
diff --git a/jessie.list b/jessie.list
deleted file mode 100644
index e3e55be1..00000000
--- a/jessie.list
+++ /dev/null
@@ -1 +0,0 @@
-deb http://http.debian.net/debian jessie-backports main
diff --git a/latest-amd64-tcwg-cimonitor/Dockerfile b/latest-amd64-tcwg-cimonitor/Dockerfile
new file mode 100644
index 00000000..7b75dd9b
--- /dev/null
+++ b/latest-amd64-tcwg-cimonitor/Dockerfile
@@ -0,0 +1,26 @@
+FROM nginx:latest
+
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ cron \
+ git \
+ libjson-perl \
+ libwww-perl \
+ python3 \
+ python3-yaml \
+ wget \
+ && git clone https://git.linaro.org/toolchain/jenkins-scripts.git \
+ && rm -rf /usr/share/nginx/html \
+ && ln -s /public_html /usr/share/nginx/html \
+ && mkdir -p /public_html /public_html/for-ci-devs \
+ && ln -s tcwg.html /public_html/index.html \
+ && echo "*/20 * * * * git -C /jenkins-scripts pull >/dev/null 2>&1 && /jenkins-scripts/generate-cimonitor-dashboard.py /jenkins-scripts/cimonitor-configs/CI-TCWG.yaml /jenkins-scripts/cimonitor-configs/CI-TCWG-BISECT.yaml /jenkins-scripts/cimonitor-configs/CI-TCWG-ARM.yaml /jenkins-scripts/cimonitor-configs/LNT.yaml --output /public_html > /public_html/generate-cimonitor-dashboard.trace 2>&1" > /tmp/crontab.txt \
+ && crontab /tmp/crontab.txt \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+
+CMD ["bash", "-c", "service cron start && exec nginx -g 'daemon off;'"]
+
+# docker run -d -p 8080:80 --name cimonitor linaro/ci-amd64-tcwg-cimonitor-nginx
diff --git a/latest-amd64-tcwg-cimonitor/build.sh b/latest-amd64-tcwg-cimonitor/build.sh
new file mode 100755
index 00000000..18775bf6
--- /dev/null
+++ b/latest-amd64-tcwg-cimonitor/build.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+set -e
+
+trap cleanup_exit INT TERM EXIT
+
+cleanup_exit()
+{
+ :
+}
+
+export LANG=C
+top=$(git rev-parse --show-toplevel)
+distro=$(basename ${PWD} | cut -f1 -d '-')
+arch=$(basename ${PWD} | cut -f2 -d '-')
+name=$(basename ${PWD} | cut -f3- -d '-')
+image=linaro/ci-${arch}-${name}-nginx:${distro}
+baseimage=$(grep "^FROM" Dockerfile | head -n 1 | cut -d" " -f 2)
+
+docker pull $baseimage 2>/dev/null || true
+docker pull $image 2>/dev/null || true
+docker build --tag=$image .
+echo $image > .docker-tag
diff --git a/latest-amd64-tcwg-llvmmonitor/Dockerfile b/latest-amd64-tcwg-llvmmonitor/Dockerfile
index 9683fe9b..1f61ee88 100644
--- a/latest-amd64-tcwg-llvmmonitor/Dockerfile
+++ b/latest-amd64-tcwg-llvmmonitor/Dockerfile
@@ -6,11 +6,14 @@ RUN apt-get update \
git \
libjson-perl \
libwww-perl \
+ python3 \
+ python3-pip \
+ && pip3 install requests \
&& git clone https://git.linaro.org/toolchain/llvm/linaro-scripts.git \
&& /linaro-scripts/monitor/install.sh /linaro-scripts-monitor \
&& rm -rf /usr/share/nginx/html \
&& ln -s /linaro-scripts-monitor/html /usr/share/nginx/html \
- && echo "*/5 * * * * /linaro-scripts-monitor/bin/bot-status /linaro-scripts-monitor/bin/linaro.json /linaro-scripts-monitor/html/index.html && chmod +r /linaro-scripts-monitor/html/index.html" | crontab - \
+ && echo "*/5 * * * * git -C /linaro-scripts pull >/dev/null 2>&1 && /linaro-scripts-monitor/bin/bot-status.py /linaro-scripts-monitor/bin/linaro.json /linaro-scripts-monitor/html/index.html && chmod +r /linaro-scripts-monitor/html/index.html" | crontab - \
&& rm -rf \
/var/lib/apt/lists/* \
/tmp/* \
diff --git a/latest-amd64-tcwg-llvmmonitor/gerrit-branches b/latest-amd64-tcwg-llvmmonitor/gerrit-branches
deleted file mode 100644
index 1f7391f9..00000000
--- a/latest-amd64-tcwg-llvmmonitor/gerrit-branches
+++ /dev/null
@@ -1 +0,0 @@
-master
diff --git a/latest-arm64-tcwg-cmakeflangci/Dockerfile b/latest-arm64-tcwg-cmakeflangci/Dockerfile
new file mode 100644
index 00000000..9590f4e2
--- /dev/null
+++ b/latest-arm64-tcwg-cmakeflangci/Dockerfile
@@ -0,0 +1,43 @@
+FROM nginx:latest
+
+# Install packages
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ build-essential \
+ cmake \
+ cron \
+ file \
+ git \
+ libssl-dev \
+ ninja-build \
+ pkg-config \
+ wget \
+ xz-utils \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+
+# Install a recent enough LLVM release (needs to be at least LLVM 15)
+RUN \
+ clang_ver=15.0.2 \
+ && archive_name=clang+llvm-$clang_ver-aarch64-linux-gnu \
+ && cd /usr/local \
+ && wget --progress=dot:giga https://github.com/llvm/llvm-project/releases/download/llvmorg-$clang_ver/$archive_name.tar.xz \
+ && tar xf $archive_name.tar.xz --strip-components=1 \
+ && rm $archive_name.tar.xz
+
+# Setup CMake scripts:
+# https://gitlab.kitware.com/cmake/cmake/-/blob/master/Help/dev/testing.rst
+RUN \
+ scripts_dir=/ci/Dashboards \
+ && mkdir -p $scripts_dir \
+ && cd $scripts_dir \
+ && git clone https://gitlab.kitware.com/cmake/dashboard-scripts.git CMakeScripts
+
+COPY flang_dashboard.cmake "/ci/Dashboards/CMakeScripts/flang_dashboard.cmake"
+
+RUN echo "0 2 * * * PATH=/usr/local/bin:$PATH ctest -S /ci/Dashboards/CMakeScripts/flang_dashboard.cmake -V" | crontab -
+
+CMD ["bash", "-c", "service cron start && exec nginx -g 'daemon off;'"]
+
diff --git a/latest-arm64-tcwg-cmakeflangci/build.sh b/latest-arm64-tcwg-cmakeflangci/build.sh
new file mode 100755
index 00000000..18775bf6
--- /dev/null
+++ b/latest-arm64-tcwg-cmakeflangci/build.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+set -e
+
+trap cleanup_exit INT TERM EXIT
+
+cleanup_exit()
+{
+ :
+}
+
+export LANG=C
+top=$(git rev-parse --show-toplevel)
+distro=$(basename ${PWD} | cut -f1 -d '-')
+arch=$(basename ${PWD} | cut -f2 -d '-')
+name=$(basename ${PWD} | cut -f3- -d '-')
+image=linaro/ci-${arch}-${name}-nginx:${distro}
+baseimage=$(grep "^FROM" Dockerfile | head -n 1 | cut -d" " -f 2)
+
+docker pull $baseimage 2>/dev/null || true
+docker pull $image 2>/dev/null || true
+docker build --tag=$image .
+echo $image > .docker-tag
diff --git a/latest-arm64-tcwg-cmakeflangci/flang_dashboard.cmake b/latest-arm64-tcwg-cmakeflangci/flang_dashboard.cmake
new file mode 100644
index 00000000..50dd2e8c
--- /dev/null
+++ b/latest-arm64-tcwg-cmakeflangci/flang_dashboard.cmake
@@ -0,0 +1,27 @@
+# Client maintainer: linaro-toolchain@lists.linaro.org
+
+set(CTEST_SITE "linaro")
+set(CTEST_BUILD_NAME "cmake_ubuntu_arm64_flang")
+set(CTEST_BUILD_CONFIGURATION Debug)
+set(CTEST_CMAKE_GENERATOR "Ninja")
+
+set(ENV{CC} "clang")
+set(ENV{CXX} "clang++")
+set(ENV{FC} "flang-new")
+set(ENV{FFLAGS} "-flang-experimental-exec")
+
+# Exclude some tests (because they need a compiler built with
+# ENABLE_LINKER_BUILD_ID set to ON, and the releases default to OFF).
+set(exclude
+ "RunCMake.CPack_DEB.DEBUGINFO"
+ )
+string(REPLACE ";" "|" exclude "${exclude}")
+
+# Enable parallelism.
+set(CTEST_TEST_ARGS PARALLEL_LEVEL 8 EXCLUDE "^(${exclude})$" )
+set(dashboard_cache "
+ CMAKE_Fortran_COMPILER:FILEPATH=flang-new
+ CMAKE_Fortran_FLAGS:STRING=-flang-experimental-exec
+ CMAKE_Fortran_COMPILER_SUPPORTS_F90:BOOL=1
+ ")
+include(${CTEST_SCRIPT_DIRECTORY}/cmake_common.cmake)
diff --git a/lava/dispatcher/build.sh b/lava/dispatcher/build.sh
new file mode 100755
index 00000000..50cab78e
--- /dev/null
+++ b/lava/dispatcher/build.sh
@@ -0,0 +1,44 @@
+#!/bin/sh
+
+# An example invocation of this script would be:
+#
+# ./build.sh -r production -d stretch -a amd64
+
+set -e
+
+export LANG=C
+
+while getopts "r:d:a:" opt; do
+ case $opt in
+ r)
+ REPO="$OPTARG"
+ ;;
+ d)
+ DISTRIBUTION="$OPTARG"
+ ;;
+ a)
+ ARCH="$OPTARG"
+ ;;
+ ?)
+ echo "Usage:"
+ echo "-r - repository such as production or staging"
+ echo "-d - distribution such as stretch"
+ echo "-a - architecture such as amd64"
+ exit 1
+ ;;
+ esac
+done
+
+if [ "$REPO" = staging ]; then
+ VERSION="latest"
+else
+ # Get version by parsing Packages file from respective repo.
+ VERSION=$(wget -qO - http://images.validation.linaro.org/${REPO}-repo/dists/${DISTRIBUTION}-backports/main/binary-${ARCH}/Packages \
+ | grep -A5 '^Package: lava-dispatcher' | grep '^Version: ' \
+ | awk '{ print $2 }' \
+ | sed 's/[~|+].*//')
+fi
+
+image=linaro/lava-dispatcher-${REPO}-${DISTRIBUTION}-${ARCH}:${VERSION}
+docker build --no-cache --pull --tag=$image -f ${REPO}/${DISTRIBUTION}-${ARCH}/Dockerfile .
+echo $image > .docker-tag
diff --git a/lava/dispatcher/production/stretch-amd64/entrypoint.sh b/lava/dispatcher/entrypoint.sh
index 74bc9c7e..490f236e 100755
--- a/lava/dispatcher/production/stretch-amd64/entrypoint.sh
+++ b/lava/dispatcher/entrypoint.sh
@@ -23,9 +23,6 @@
# LOG_LEVEL Log level (DEBUG, ERROR, INFO, WARN); default to INFO
# Example: LOG_LEVEL='DEBUG'
#
-# TIMEOUT Socket connection timeout in seconds; default to 5
-# Example: TIMEOUT=10
-#
# IPV6 Enable IPv6
# Example: IPV6=True
#
@@ -69,11 +66,6 @@ then
LOG_LEVEL='INFO'
fi
-if [ -z "${TIMEOUT}" ]
-then
- TIMEOUT=5
-fi
-
if [ -z "${ENCRYPT}" ]
then
ENCRYPT=''
@@ -104,12 +96,10 @@ fi
echo "Starting lava-slave with the following command:"
-echo "/usr/bin/python /usr/bin/lava-slave --hostname ${HOSTNAME} \
+echo "/usr/bin/python3 /usr/bin/lava-slave --hostname ${HOSTNAME} \
--master ${MASTER} --socket-addr ${SOCKET_ADDR} ${LOG_FILE} \
---level ${LOG_LEVEL} --timeout ${TIMEOUT} ${ENCRYPT} ${IPV6} \
-${MASTER_CERT} ${SLAVE_CERT}"
+--level ${LOG_LEVEL} ${ENCRYPT} ${IPV6} ${MASTER_CERT} ${SLAVE_CERT}"
-/usr/bin/python /usr/bin/lava-slave --hostname ${HOSTNAME} \
+/usr/bin/python3 /usr/bin/lava-slave --hostname ${HOSTNAME} \
--master ${MASTER} --socket-addr ${SOCKET_ADDR} ${LOG_FILE} \
---level ${LOG_LEVEL} --timeout ${TIMEOUT} ${ENCRYPT} ${IPV6} \
-${MASTER_CERT} ${SLAVE_CERT}
+--level ${LOG_LEVEL} ${ENCRYPT} ${IPV6} ${MASTER_CERT} ${SLAVE_CERT}
diff --git a/lava/dispatcher/production/stretch-amd64/Dockerfile b/lava/dispatcher/production/stretch-amd64/Dockerfile
index c555a9b8..a9291f5c 100644
--- a/lava/dispatcher/production/stretch-amd64/Dockerfile
+++ b/lava/dispatcher/production/stretch-amd64/Dockerfile
@@ -2,7 +2,7 @@ FROM debian:stretch
# Docker image for LAVA dispatcher with production release.
-MAINTAINER Senthil Kumaran S <senthil.kumaran@linaro.org>
+LABEL maintainer="senthil.kumaran@linaro.org"
# Install the required dependencies
RUN echo 'locales locales/locales_to_be_generated multiselect C.UTF-8 UTF-8, en_US.UTF-8 UTF-8 ' | debconf-set-selections && \
@@ -14,7 +14,7 @@ RUN echo 'locales locales/locales_to_be_generated multiselect C.UTF-8 UTF-8, en_
qemu-system-x86 qemu-system-arm qemu-user-static libguestfs-tools \
nfs-kernel-server rpcbind u-boot-tools unzip xz-utils debootstrap \
bridge-utils dfu-util img2simg emacs-nox vim gnupg2 sed expect grep wget \
- openssh-server
+ openssh-server adb fastboot simg2img img2simg
# Add LAVA stretch-backports production repo
RUN wget -qO - http://images.validation.linaro.org/production-repo/production-repo.key.asc | apt-key add - && \
@@ -25,7 +25,7 @@ RUN echo 'locales locales/locales_to_be_generated multiselect C.UTF-8 UTF-8, en_
export DEBIAN_FRONTEND=noninteractive && \
apt-get update && \
apt-get -y upgrade && \
- apt-get -y -t stretch-backports install lava-dispatcher \
+ apt-get -y -t stretch-backports install lava-common lava-dispatcher \
lava-lxc-mocker && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
@@ -34,7 +34,7 @@ RUN echo 'locales locales/locales_to_be_generated multiselect C.UTF-8 UTF-8, en_
EXPOSE 22
# Set entrypoint script
-COPY entrypoint.sh /entrypoint.sh
+COPY ./entrypoint.sh /entrypoint.sh
ENTRYPOINT [ "/entrypoint.sh" ]
# Following is a sample docker run command to use this image
diff --git a/lava/dispatcher/production/stretch-amd64/build.sh b/lava/dispatcher/production/stretch-amd64/build.sh
deleted file mode 100755
index cdf52809..00000000
--- a/lava/dispatcher/production/stretch-amd64/build.sh
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/sh
-
-set -e
-
-export LANG=C
-
-DISTRIBUTION=$(basename ${PWD} | cut -f1 -d '-')
-ARCHITECTURE=$(basename ${PWD} | cut -f2 -d '-')
-REPO=$(basename $(dirname ${PWD}))
-
-# Get version by parsing Packages file from respective repo.
-VERSION=$(wget -qO - \
- http://images.validation.linaro.org/${REPO}-repo/dists/${DISTRIBUTION}-backports/main/binary-${ARCHITECTURE}/Packages | \
- sed -n '/Package: lava-dispatcher/{n;p}' | \
- sed 's/Version: //' | sed 's/[~|+].*//')
-
-image=linaro/lava-dispatcher-debian-${DISTRIBUTION}-${ARCHITECTURE}:${VERSION}
-docker build --no-cache --pull --tag=$image .
-echo $image > .docker-tag
diff --git a/lava/dispatcher/staging/stretch-amd64/Dockerfile b/lava/dispatcher/staging/stretch-amd64/Dockerfile
new file mode 100644
index 00000000..f6a21d26
--- /dev/null
+++ b/lava/dispatcher/staging/stretch-amd64/Dockerfile
@@ -0,0 +1,46 @@
+FROM debian:stretch
+
+# Docker image for LAVA dispatcher with master branch, built daily.
+
+LABEL maintainer="senthil.kumaran@linaro.org"
+
+# Install the required dependencies
+RUN echo 'locales locales/locales_to_be_generated multiselect C.UTF-8 UTF-8, en_US.UTF-8 UTF-8 ' | debconf-set-selections && \
+ echo 'locales locales/default_environment_locale select en_US.UTF-8' | debconf-set-selections && \
+ export DEBIAN_FRONTEND=noninteractive && \
+ apt-get update && \
+ apt-get -y upgrade && \
+ apt-get -y install ntp git tftpd-hpa openbsd-inetd ser2net qemu-kvm \
+ qemu-system-x86 qemu-system-arm qemu-user-static libguestfs-tools \
+ nfs-kernel-server rpcbind u-boot-tools unzip xz-utils debootstrap \
+ bridge-utils dfu-util img2simg emacs-nox vim gnupg2 sed expect grep wget \
+ openssh-server adb fastboot simg2img img2simg
+
+# Add LAVA stretch-backports staging repo
+RUN wget -qO - http://images.validation.linaro.org/staging-repo/staging-repo.key.asc | apt-key add - && \
+ echo "deb http://images.validation.linaro.org/staging-repo stretch-backports main" >/etc/apt/sources.list.d/linaro.list
+
+RUN echo 'locales locales/locales_to_be_generated multiselect C.UTF-8 UTF-8, en_US.UTF-8 UTF-8 ' | debconf-set-selections && \
+ echo 'locales locales/default_environment_locale select en_US.UTF-8' | debconf-set-selections && \
+ export DEBIAN_FRONTEND=noninteractive && \
+ apt-get update && \
+ apt-get -y upgrade && \
+ apt-get -y -t stretch-backports install lava-common lava-dispatcher \
+ lava-lxc-mocker && \
+ apt-get clean && \
+ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
+
+# Expose services ports
+EXPOSE 22
+
+# Set entrypoint script
+COPY ./entrypoint.sh /entrypoint.sh
+ENTRYPOINT [ "/entrypoint.sh" ]
+
+# Following is a sample docker run command to use this image
+#
+# sudo docker run -v /boot:/boot -v /lib/modules:/lib/modules \
+# -v /var/run/docker.sock:/var/run/docker.sock -itd -e HOSTNAME='worker-1' \
+# -e MASTER='tcp://192.168.1.2:5556' -e SOCKET_ADDR='tcp://192.168.1.2:5555' \
+# -e LOG_LEVEL='DEBUG' -p 2222:22 --privileged \
+# --name ld-2017.12 stylesen/lava-dispatcher:2017.12
diff --git a/linaro-overlay-buster.list b/linaro-overlay-buster.list
new file mode 100644
index 00000000..a1933698
--- /dev/null
+++ b/linaro-overlay-buster.list
@@ -0,0 +1,2 @@
+deb http://obs.linaro.org/linaro-overlay-buster/buster/ ./
+deb-src http://obs.linaro.org/linaro-overlay-buster/buster/ ./
diff --git a/reviewers.config b/reviewers.config
new file mode 100644
index 00000000..e8edaf83
--- /dev/null
+++ b/reviewers.config
@@ -0,0 +1,3 @@
+[filter "path:^jenkins-master/.*"]
+ reviewer = ldap/systems
+ reviewer = fathi.boudra@linaro.org
diff --git a/jessie-amd64/Dockerfile b/stretch-amd64-lkft/Dockerfile
index 76e5d106..e597cc71 100644
--- a/jessie-amd64/Dockerfile
+++ b/stretch-amd64-lkft/Dockerfile
@@ -1,10 +1,12 @@
-FROM debian:jessie
+FROM debian:stretch
COPY *.list *.key /etc/apt/sources.list.d/
RUN dpkg --add-architecture i386 \
&& echo 'locales locales/locales_to_be_generated multiselect C.UTF-8 UTF-8, en_US.UTF-8 UTF-8 ' | debconf-set-selections \
&& echo 'locales locales/default_environment_locale select en_US.UTF-8' | debconf-set-selections \
+ && apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends gnupg \
&& apt-key add /etc/apt/sources.list.d/*.key \
&& apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y \
@@ -19,41 +21,54 @@ RUN dpkg --add-architecture i386 \
bison \
build-essential \
ccache \
+ chrpath \
+ coreutils \
+ cpio \
curl \
debhelper \
debian-archive-keyring \
debian-keyring \
device-tree-compiler \
+ diffstat \
doxygen \
fakeroot \
flex \
+ gawk \
gcc \
gdisk \
git \
kernel-wedge \
kpartx \
lava-tool \
+ libelf-dev \
+ libmagickwand-dev \
+ libmath-prime-util-perl \
+ libsdl1.2-dev \
+ libssl-dev \
libstdc++6:i386 \
libtool \
- libvirt-clients \
linaro-image-tools \
lsb-release \
+ openjdk-8-jdk \
openssh-server \
+ pigz \
+ python-pip \
python-requests \
+ python3-requests \
qemu-user-static \
sudo \
+ texinfo \
time \
u-boot-tools \
uuid-dev \
- virtinst \
+ vim-tiny \
+ virtualenv \
wget \
+ whiptail \
+ xz-utils \
zip \
zlib1g:i386 \
zsync \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends -t jessie-backports \
- libsdl1.2-dev \
- openjdk-8-jdk \
- && update-java-alternatives -s java-1.8.0-openjdk-amd64 \
&& apt-get clean \
&& rm -rf \
/etc/apt/sources.list.d/*.key \
@@ -66,7 +81,14 @@ RUN useradd -m buildslave \
&& chmod 440 /etc/sudoers.d/jenkins \
&& mkdir -p /var/run/sshd
-VOLUME ["/var/lib/libvirt"]
+USER buildslave
+
+RUN pip install --user --force-reinstall jinja2-cli ruamel.yaml \
+ && mkdir -p /home/buildslave/bin \
+ && curl https://storage.googleapis.com/git-repo-downloads/repo > /home/buildslave/bin/repo \
+ && chmod a+x /home/buildslave/bin/repo
+
+USER root
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
diff --git a/stretch-amd64-lkft/build.sh b/stretch-amd64-lkft/build.sh
new file mode 100755
index 00000000..545f145a
--- /dev/null
+++ b/stretch-amd64-lkft/build.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+set -e
+
+trap cleanup_exit INT TERM EXIT
+
+cleanup_exit()
+{
+ rm -f *.list *.key
+}
+
+export LANG=C
+
+DISTRIBUTION=$(basename ${PWD} | cut -f1 -d '-')
+ARCHITECTURE=$(basename ${PWD} | cut -f2 -d '-')
+
+cp -a ../linaro-overlay-obs.list ../linaro-overlay-obs.key .
+
+image=linaro/jenkins-${ARCHITECTURE}-debian-lkft:${DISTRIBUTION}
+docker build --pull --tag=$image .
+echo $image > .docker-tag
diff --git a/stretch-amd64-obsworker/Dockerfile b/stretch-amd64-obsworker/Dockerfile
index 5ed36dd9..4cae6c58 100644
--- a/stretch-amd64-obsworker/Dockerfile
+++ b/stretch-amd64-obsworker/Dockerfile
@@ -25,6 +25,7 @@ RUN apt-get update \
/tmp/* \
/var/tmp/*
+
COPY start-obsworker /
CMD ["/start-obsworker"]
diff --git a/stretch-amd64-ota/Dockerfile b/stretch-amd64-ota/Dockerfile
new file mode 100644
index 00000000..0fe58092
--- /dev/null
+++ b/stretch-amd64-ota/Dockerfile
@@ -0,0 +1,19 @@
+FROM opensourcefoundries/aktualizr:0.23
+
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ sudo \
+ openssh-server \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+
+RUN useradd -m buildslave \
+ && echo 'buildslave ALL = NOPASSWD: ALL' > /etc/sudoers.d/jenkins \
+ && chmod 440 /etc/sudoers.d/jenkins \
+ && mkdir -p /var/run/sshd
+
+EXPOSE 22
+CMD ["/usr/sbin/sshd", "-D"]
diff --git a/stretch-armhf/build.sh b/stretch-amd64-ota/build.sh
index 155a1b39..a03d97ac 100755
--- a/stretch-armhf/build.sh
+++ b/stretch-amd64-ota/build.sh
@@ -16,6 +16,6 @@ ARCHITECTURE=$(basename ${PWD} | cut -f2 -d '-')
cp -a ../linaro-overlay-obs.list ../linaro-overlay-obs.key .
-image=linaro/ci-${ARCHITECTURE}-debian:${DISTRIBUTION}
+image=linaro/ci-${ARCHITECTURE}-debian-ota:${DISTRIBUTION}
docker build --pull --tag=$image .
echo $image > .docker-tag
diff --git a/stretch-amd64/Dockerfile b/stretch-amd64/Dockerfile
index 1d192522..ac7181c3 100644
--- a/stretch-amd64/Dockerfile
+++ b/stretch-amd64/Dockerfile
@@ -21,33 +21,45 @@ RUN dpkg --add-architecture i386 \
bison \
build-essential \
ccache \
+ cpio \
curl \
debhelper \
debian-archive-keyring \
debian-keyring \
+ debootstrap \
device-tree-compiler \
+ dosfstools \
doxygen \
fakeroot \
flex \
- gcc \
+ genisoimage \
gdisk \
git \
kernel-wedge \
kpartx \
lava-tool \
+ libssl-dev \
libstdc++6:i386 \
libtool \
linaro-image-tools \
lsb-release \
+ lvm2 \
+ mdadm \
+ mtools \
openjdk-8-jdk \
+ openjdk-11-jdk \
openssh-server \
+ parted \
+ python-pip \
python-requests \
+ python3-requests \
qemu-user-static \
sudo \
time \
u-boot-tools \
uuid-dev \
wget \
+ xz-utils \
zip \
zlib1g:i386 \
zsync \
diff --git a/stretch-amd64/backports.list b/stretch-amd64/backports.list
new file mode 100644
index 00000000..c983975e
--- /dev/null
+++ b/stretch-amd64/backports.list
@@ -0,0 +1 @@
+deb http://ftp.us.debian.org/debian stretch-backports main
diff --git a/stretch-amd64/build.sh b/stretch-amd64/build.sh
index 155a1b39..e5c48f77 100755
--- a/stretch-amd64/build.sh
+++ b/stretch-amd64/build.sh
@@ -16,6 +16,6 @@ ARCHITECTURE=$(basename ${PWD} | cut -f2 -d '-')
cp -a ../linaro-overlay-obs.list ../linaro-overlay-obs.key .
-image=linaro/ci-${ARCHITECTURE}-debian:${DISTRIBUTION}
+image=linaro/jenkins-${ARCHITECTURE}-debian:${DISTRIBUTION}
docker build --pull --tag=$image .
echo $image > .docker-tag
diff --git a/stretch-arm64-fai/Dockerfile b/stretch-arm64-fai/Dockerfile
index 458d542c..2f11e0b0 100644
--- a/stretch-arm64-fai/Dockerfile
+++ b/stretch-arm64-fai/Dockerfile
@@ -1,4 +1,4 @@
-FROM linaro/base-arm64-debian:stretch
+FROM debian:stretch
COPY *.list *.key /etc/apt/sources.list.d/
diff --git a/stretch-arm64-obsworker/Dockerfile b/stretch-arm64-obsworker/Dockerfile
index 5ed36dd9..4cae6c58 100644
--- a/stretch-arm64-obsworker/Dockerfile
+++ b/stretch-arm64-obsworker/Dockerfile
@@ -25,6 +25,7 @@ RUN apt-get update \
/tmp/* \
/var/tmp/*
+
COPY start-obsworker /
CMD ["/start-obsworker"]
diff --git a/stretch-arm64-testdef/Dockerfile b/stretch-arm64-testdef/Dockerfile
new file mode 100644
index 00000000..cd20f093
--- /dev/null
+++ b/stretch-arm64-testdef/Dockerfile
@@ -0,0 +1,18 @@
+FROM linaro/ci-arm64-debian:stretch
+
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y \
+ python-pip \
+ && git clone http://git.linaro.org/qa/test-definitions.git \
+ && cd test-definitions \
+ && git checkout master \
+ && pip install -r automated/utils/requirements.txt \
+ && apt-get clean \
+ && rm -rf \
+ /tmp/* \
+ /var/tmp/*
+
+ENV REPO_PATH=/test-definitions \
+ PATH="/test-definitions/automated/bin:${PATH}"
+
+WORKDIR /test-definitions
diff --git a/stretch-arm64-testdef/build.sh b/stretch-arm64-testdef/build.sh
new file mode 100755
index 00000000..df1b8212
--- /dev/null
+++ b/stretch-arm64-testdef/build.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+set -e
+
+export LANG=C
+
+if [ -z "$1" ]; then
+ echo "Usage: ./build.sh <git_tag>"
+ tag="$(git ls-remote https://git.linaro.org/qa/test-definitions.git refs/heads/master | cut -c1-7)"
+ echo "Warning: git tag not specified, latest commit (${tag}) on master branch is used."
+else
+ tag="$1"
+ sed -i "s/git checkout master/git checkout ${tag} -b ${tag}/" Dockerfile
+fi
+
+DISTRIBUTION="$(basename "${PWD}" | cut -f1 -d '-')"
+ARCHITECTURE="$(basename "${PWD}" | cut -f2 -d '-')"
+
+image=linaro/testdef-${ARCHITECTURE}-debian-${DISTRIBUTION}:${tag}
+docker build --pull --tag="$image" .
+echo "$image" > .docker-tag
diff --git a/stretch-arm64/Dockerfile b/stretch-arm64/Dockerfile
index 46c96cf6..0ef67e1b 100644
--- a/stretch-arm64/Dockerfile
+++ b/stretch-arm64/Dockerfile
@@ -1,4 +1,4 @@
-FROM linaro/base-arm64-debian:stretch
+FROM debian:stretch
COPY *.list *.key /etc/apt/sources.list.d/
@@ -20,32 +20,44 @@ RUN apt-get update \
bison \
build-essential \
ccache \
+ cpio \
curl \
debhelper \
debian-archive-keyring \
debian-keyring \
+ debootstrap \
device-tree-compiler \
+ dosfstools \
doxygen \
fakeroot \
flex \
- gcc \
+ genisoimage \
gdisk \
git \
kernel-wedge \
kpartx \
lava-tool \
+ libssl-dev \
libtool \
linaro-image-tools \
lsb-release \
+ lvm2 \
+ mdadm \
+ mtools \
openjdk-8-jdk \
+ openjdk-11-jdk \
openssh-server \
+ parted \
+ python-pip \
python-requests \
+ python3-requests \
qemu-user-static \
sudo \
time \
u-boot-tools \
uuid-dev \
wget \
+ xz-utils \
zip \
zsync \
&& apt-get clean \
diff --git a/stretch-arm64/backports.list b/stretch-arm64/backports.list
new file mode 100644
index 00000000..c983975e
--- /dev/null
+++ b/stretch-arm64/backports.list
@@ -0,0 +1 @@
+deb http://ftp.us.debian.org/debian stretch-backports main
diff --git a/stretch-arm64/build.sh b/stretch-arm64/build.sh
index 155a1b39..e5c48f77 100755
--- a/stretch-arm64/build.sh
+++ b/stretch-arm64/build.sh
@@ -16,6 +16,6 @@ ARCHITECTURE=$(basename ${PWD} | cut -f2 -d '-')
cp -a ../linaro-overlay-obs.list ../linaro-overlay-obs.key .
-image=linaro/ci-${ARCHITECTURE}-debian:${DISTRIBUTION}
+image=linaro/jenkins-${ARCHITECTURE}-debian:${DISTRIBUTION}
docker build --pull --tag=$image .
echo $image > .docker-tag
diff --git a/tcwg-base/Dockerfile.in b/tcwg-base/Dockerfile.in
index f8a87092..31b1a18d 100644
--- a/tcwg-base/Dockerfile.in
+++ b/tcwg-base/Dockerfile.in
@@ -1,32 +1,17 @@
-#if ARCH_amd64
-FROM ubuntu:#{DISTRO}
-#elif DISTRO_zesty
-FROM snapcraft/zesty-#{ARCH}:latest
+#if ARCH_armhf
+FROM arm32v7/ubuntu:#{DISTRO}
#else
-FROM linaro/base-#{ARCH}-ubuntu:#{DISTRO}
+FROM ubuntu:#{DISTRO}
#endif
-#if ARCH_amd64 || ARCH_i386
-RUN (url="http://archive.ubuntu.com/ubuntu/"; \
-#else
-RUN (url="http://ports.ubuntu.com/ubuntu-ports/"; \
-#endif
- ubuntu=#{DISTRO}; \
- for i in $ubuntu $ubuntu-updates $ubuntu-backports $ubuntu-security; do \
- for j in deb deb-src; do \
- echo "$j $url $i main restricted universe multiverse"; \
- done; \
- echo; \
- done) > /etc/apt/sources.list \
-#if ARCH_amd64
- && dpkg --add-architecture i386 \
-#endif
- && apt-get update \
+# Use bash for better string escaping (on Ubuntu, /bin/sh is dash).
+SHELL ["/bin/bash", "-c"]
+
+# Unminimize Ubuntu to install contrib files of git (after package
+# update, otherwise unminimize's "apt upgrade" might fail).
+RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y \
-#if ARCH_i386
- && dpkg-divert --local --rename --add /sbin/initctl \
- && ln -s /bin/true /sbin/initctl \
-#endif
+ && echo y | unminimize \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y devscripts \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
alien \
@@ -34,11 +19,9 @@ RUN (url="http://ports.ubuntu.com/ubuntu-ports/"; \
autogen \
automake \
bc \
+ bind9-host \
bison \
-#if ARCH_amd64 || ARCH_i386
- binutils-aarch64-linux-gnu \
- binutils-arm-linux-gnueabihf \
-#endif
+ binutils-dev \
bsd-mailx \
build-essential \
byacc \
@@ -46,8 +29,9 @@ RUN (url="http://ports.ubuntu.com/ubuntu-ports/"; \
ccrypt \
chrpath \
clang \
- cmake \
+ curl \
debhelper \
+ default-jre \
dejagnu \
dh-autoreconf \
dh-translations \
@@ -55,79 +39,127 @@ RUN (url="http://ports.ubuntu.com/ubuntu-ports/"; \
emacs \
fakeroot \
flex \
-#if ARCH_amd64 || ARCH_i386
- g++-multilib \
-#endif
+ fp-compiler \
gawk \
+ gdc \
gdb \
gdbserver \
+# gettext is needed according to README-maintainer-mode
+ gettext \
+ gfortran \
git \
- git-review \
+ # git-annex : is now used to store bmk results in base-artifacts
+ git-annex \
+#if !DISTRO_focal
+ git-filter-repo \
+#endif
+ gm2 \
+#if DISTRO_jammy
+ # For unknown reason "gnat" defaults to "gnat-10" in Jammy, while all other
+ # GCC packages default to "*-11" versions.
+ gnat-11 \
+#else
+ gnat \
+#endif
+ gobjc \
+ gobjc++ \
+ golang \
groff \
+ guile-3.0 \
+ guile-3.0-dev \
less \
+# libc6-dbg is necessary for armhf debugging, but also helps on aarch64.
+ libc6-dbg \
+ libcc1-0 \
+# For building lldb.
+ libedit-dev \
libexpat1-dev \
-#if ARCH_amd64 || ARCH_i386
+ libffi-dev \
libglib2.0-dev \
-#endif
+ libgmp-dev \
+# libjpeg is necessary for building jipdate
+ libjpeg-dev \
liblzma-dev \
+ libmpc-dev \
+ libmpfr-dev \
+# We need libncurses5 for ancient clang-3289846 used for renderscript AOSP.
+ libncurses5 \
libncurses5-dev \
- libpython2.7-dev \
+ libpixman-1-dev \
+ libpython3-dev \
libreadline-dev \
libssl-dev \
libtcnative-1 \
+# Our bionic-built llvm releases expect to find this but
+# focal installs libtinfo6 instead.
+ libtinfo5 \
libtool \
- linux-tools-generic \
+# For building lldb.
+ libxml2-dev \
+ llvm \
+ locales \
lzop \
make \
-#if ARCH_amd64 || ARCH_i386
+#if ARCH_amd64
mingw-w64 \
-# if DISTRO_trusty
- mingw32 \
-# endif
#endif
+ moreutils \
net-tools \
netcat \
-#if ARCH_amd64 || !DISTRO_trusty
nfs-kernel-server \
-#endif
ninja-build \
-#if DISTRO_trusty
- openjdk-7-jdk \
-#else
- openjdk-8-jdk \
-#endif
+ ntp \
openssh-server \
-#if ARCH_amd64 || ARCH_i386
pkg-config \
+ psmisc \
+ python3-dev \
+ python3-pip \
+ python3-setuptools \
+ python3-venv \
+ python3-wheel \
+ python3-pandas \
+ python3-numpy \
+ python3-scipy \
+# Symlink python to python3 to make upstream "repo", which is downloaded
+# by distro's repo, happy. Also needed to run lnt checks on focal.
+ python-is-python3 \
+#if !DISTRO_focal
+# Focal doesn't have "repo" package. We also symlink python to python3
+# below solely to make upstream repo, which is downloaded by distro's repo,
+# happy.
+ repo \
#endif
- python-dev \
-#if DISTRO_trusty
- python-virtualenv \
-#endif
- postfix \
- pxz \
- qemu-system-arm \
- qemu-user \
rsync \
+# sqlite3 is used by lnt test suite
+ sqlite3 \
subversion \
sudo \
+ swig \
+# systemtap-sdt-dev allows building glibc with probes, which GDB uses to
+# detect shared library events.
+ systemtap-sdt-dev \
tclsh \
texinfo \
texlive-fonts-recommended \
texlive-latex-recommended \
time \
+# tox is used to run lnt test suite
+ tox \
+ unifdef \
valgrind \
vim \
-#if !DISTRO_trusty
+# virtualenv is used for lnt environment
virtualenv \
-#endif
wget \
-#if ARCH_amd64 || ARCH_i386
- wine \
-#endif
+# xsltproc is needed by GDB in maintainer mode
+ xsltproc \
xz-utils \
zip \
zlib1g-dev \
+ shellcheck \
+# Update tzdata, because some base images have an incorrect file for UTC.
+ && DEBIAN_FRONTEND=noninteractive apt-get install --reinstall tzdata \
+ && rm -f /etc/ssh/ssh_host_*_key* \
&& apt-get clean \
&& rm -rf \
/var/lib/apt/lists/* \
@@ -139,27 +171,246 @@ RUN install -D -p -m0755 /usr/share/doc/git/contrib/workdir/git-new-workdir /usr
&& mkdir -p /var/run/sshd \
&& sed -i \
-e "/.*MaxStartups.*/d" \
- -e "/.*MaxSesssions.*/d" /etc/ssh/sshd_config \
+ -e "/.*MaxSessions.*/d" /etc/ssh/sshd_config \
&& echo "MaxStartups 256" >> /etc/ssh/sshd_config \
- && echo "MaxSessions 256" >> /etc/ssh/sshd_config
+ && echo "MaxSessions 256" >> /etc/ssh/sshd_config \
+ && locale-gen en_US.UTF-8 && update-locale LANG=en_US.UTF-8 \
+ && pip3 install git-review \
+ && pip3 install psutil \
+# Patchworks client for pre-commit testing with "-f yaml" support and
+# shyaml tool to parse its output; these are used in jenkins-scripts/pw-*.sh.
+ && pip3 install git-pw \
+ && pip3 install shyaml \
+# For testing lldb.
+ && pip3 install pexpect \
+#if DISTRO_focal && !ARCH_armhf
+# PIP on jammy (all arches) and focal (armhf) has a version mismatch for pyyaml.
+ && pip3 install jenkins-job-builder==2.10.0 \
+ && git clone --depth 1 https://git.linaro.org/infrastructure/jjb-linaro-plugin.git \
+ && cd jjb-linaro-plugin && python3 setup.py install && cd .. && rm -rf jjb-linaro-plugin \
+#endif
+#if ARCH_amd64
+# tensorflow package required to enable MLGO in clang builds (for AOSP toolchains)
+# installation of this package fails on arm64/focal
+ && pip3 install tensorflow \
+#endif
+ && true
-COPY postfix-main.cf.in /etc/postfix/main.cf
-COPY postfix-sasl_password.in /etc/postfix/sasl_password
+# Install custom jipdate.
+# FIXME: Revert to installing from pip, when pull requests from maxim-kuvyrkov
+# are merged https://github.com/Linaro/jipdate/pulls .
+RUN git clone -b master https://github.com/maxim-kuvyrkov/jipdate.git /usr/local/jipdate/ \
+ && cd /usr/local/jipdate \
+ && pip3 install flit \
+ && flit build \
+ && FLIT_ROOT_INSTALL=1 flit install --symlink
-RUN chown root:root /etc/postfix/sasl_password \
- && chmod 600 /etc/postfix/sasl_password
+# LLVM requires at least CMake 3.20.0 and we need 3.24 for flang support.
+#if DISTRO_focal || DISTRO_jammy
+#if ARCH_arm64
+RUN wget https://github.com/Kitware/CMake/releases/download/v3.24.2/cmake-3.24.2-linux-aarch64.sh \
+ && chmod +x cmake-3.24.2-linux-aarch64.sh \
+ && ./cmake-3.24.2-linux-aarch64.sh --prefix=/usr/local --skip-license
+#else
+ RUN cd /tmp \
+ && git clone -b v3.24.2 --single-branch --depth 1 https://github.com/Kitware/CMake.git \
+ && cd /tmp/CMake \
+ && ./bootstrap --parallel=$(nproc --all) \
+ && make -j$(nproc --all) \
+ && make -j$(nproc --all) install \
+ && cd /tmp \
+ && rm -rf /tmp/CMake
+#endif
+#endif
-#if ARCH_amd64 || ARCH_i386
-RUN mkdir /tmp/docker-install-qemu.$$ \
- && cd /tmp/docker-install-qemu.$$ \
- && qemu_ver=2.8.0 && wget --progress=dot:giga http://download.qemu-project.org/qemu-${qemu_ver}.tar.xz \
- && tar xf qemu-${qemu_ver}.tar.xz \
- && mkdir build && cd build \
- && ../qemu-${qemu_ver}/configure --prefix=/usr/local --target-list=armeb-linux-user \
- && make all install -j $(nproc --all) \
- && cd && rm -rf /tmp/docker-install-qemu.$$
+# Configure linux tools for benchmarking support.
+#
+# We symlink linux tools to supportted "hw_tags":
+# apm_32, apm_64, sq_32, sq_64, tk1_32, tx1_32, tx1_64.
+# HW_TAGS represent tested configurations of hardware+kernel+perf that
+# work well together. We create new hw_tag for any variation in hardware,
+# kernel, or perf. This gives us assurance that benchmarking data stored
+# under bkp-01.tcwglab:results-<HW_TAG>/ directory has no unexpected variations.
+#
+# For the initial hw_tags for TK1s and TX1s we can use nice short tk1_32,
+# tx1_64, and tx1_32 names, but if we update, say, perf version, we would
+# need to add something like tk1_32-lt_5.4 (updating linux-tools to 5.4) or
+# tx1_64-k_4.10 (updating kernel to 4.10).
+#
+# Bionic's linux-tools-4.18 version has proven to work well with TK1s' 3.10 and
+# TX1s' 4.4 kernels. We need to install it in all distro versionss so that we
+# use same perf version to generate and process results.
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+# cpufrequtils is used by our benchmarking scripts, but we should update them to
+# use cpupower from linux-tools everywhere instead.
+ cpufrequtils \
+ linux-tools-common \
+ && cat /etc/apt/sources.list | sed -e "s/#{DISTRO}/bionic/g" \
+ > /etc/apt/sources.list.d/bionic.list \
+# Import Bionic key
+ && apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 3B4FE6ACC0B21F32 \
+ && apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ linux-tools-4.18.0-13-generic \
+ linux-tools-5.4.0-74-generic \
+ linux-tools-5.4.0-80-generic \
+ linux-tools-5.4.0-99-generic \
+#if !DISTRO_focal
+ linux-tools-5.19.0-41-generic \
+#endif
+ && apt-get clean \
+ && rm -rf \
+ /etc/apt/sources.list.d/bionic.list \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/* \
+ && ln -s /usr/lib/linux-tools/4.18.0-13-generic /usr/lib/linux-tools/tk1_32 \
+ && ln -s /usr/lib/linux-tools/4.18.0-13-generic /usr/lib/linux-tools/tx1_32 \
+ && ln -s /usr/lib/linux-tools/4.18.0-13-generic /usr/lib/linux-tools/tx1_64 \
+ && ln -s /usr/lib/linux-tools/5.4.0-74-generic /usr/lib/linux-tools/sq_32 \
+ && ln -s /usr/lib/linux-tools/5.4.0-74-generic /usr/lib/linux-tools/sq_64 \
+ && ln -s /usr/lib/linux-tools/5.4.0-80-generic /usr/lib/linux-tools/apm_32 \
+ && ln -s /usr/lib/linux-tools/5.4.0-80-generic /usr/lib/linux-tools/apm_64 \
+ && ln -s /usr/lib/linux-tools/5.4.0-99-generic /usr/lib/linux-tools/fx_32 \
+ && ln -s /usr/lib/linux-tools/5.4.0-99-generic /usr/lib/linux-tools/fx_64 \
+#if !DISTRO_focal
+ && ln -s /usr/lib/linux-tools/5.19.0-41-generic /usr/lib/linux-tools/qc_32 \
+ && ln -s /usr/lib/linux-tools/5.19.0-41-generic /usr/lib/linux-tools/qc_64 \
+#endif
+ && true
+
+#if ARCH_armhf
+COPY install-armhf-perf-workaround.sh /usr/lib/linux-tools/
+#endif
+
+#if ARCH_amd64
+# Install usb libs and OpenOCD on x86 hosts, used to target bare-metal boards.
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ libusb-1.0 \
+ libusb-dev \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+RUN cd /tmp \
+ && git clone --single-branch https://git.code.sf.net/p/openocd/code openocd \
+ && cd /tmp/openocd \
+# Next commit (ce5027ab019ac7f96d05ec5f8f533144b3bcafdf) breaks semihosting.
+# See https://review.openocd.org/c/openocd/+/6888 .
+ && git checkout e5f515f990cc345fd3089a5520f39d5a128329bd \
+ && ./bootstrap \
+ && ./configure --enable-stlink \
+ && make -j$(nproc --all) \
+ && make -j$(nproc --all) install \
+ && cd /tmp \
+ && rm -rf /tmp/openocd
+#endif
+
+# Add the latest clang (17.0.6)
+# We need this in tcwg-llvmbot images for *-latest-clang bots, and in tcwg-build/tcwg-dev
+# images for building LLVM with flang enabled.
+#if ARCH_arm64 || ARCH_armhf
+RUN \
+#if ARCH_arm64
+ clang_ver=clang+llvm-17.0.6-aarch64-linux-gnu \
+ # For the 17.0.6 release, the two archives have different formats.
+ ext=xz \
+#else /* ARCH_armhf */
+ clang_ver=clang+llvm-17.0.6-armv7a-linux-gnueabihf \
+ ext=gz \
+#endif
+ && cd /usr/local \
+ && wget --progress=dot:giga https://github.com/llvm/llvm-project/releases/download/llvmorg-17.0.6/$clang_ver.tar.$ext \
+ && tar xf $clang_ver.tar.$ext \
+ && rm $clang_ver.tar.$ext
+#endif
+
+#if ARCH_arm64
+# Add libpgmath, which is used by flang
+RUN git clone https://github.com/rovka/libpgmath-binaries.git \
+ && mv libpgmath-binaries/* /usr/local/lib/ \
+ && rm -rf libpgmath-binaries
+#endif
+#if DISTRO_focal
+# Install git-filter-repo for Ubuntu Focal
+RUN curl -f -o $(git --exec-path)/git-filter-repo \
+ https://raw.githubusercontent.com/newren/git-filter-repo/main/git-filter-repo \
+ && chmod +x $(git --exec-path)/git-filter-repo
#endif
+
+# Precommit testing for GNU projects requires autoconf-2.69 and
+# automake-1.15.1. Install them in custom paths to avoid confusing
+# other tools that make use of the system versions.
+# README-maintainer-mode in these projects also mentions libtool-2.2.6
+# and gettext-0.16.1, but there is no tarball available for these
+# versions. In addition, some files have been regenerated using
+# libtool-2.2.7a which is not available either. Build succeeds in
+# with --enable-maintainer-mode and the system versions of libtool and
+# gettext, so rely on them.
+RUN autoconf_version=2.69 autoconf_ver=autoconf-${autoconf_version} \
+ && cd /usr/local \
+ && wget https://ftp.gnu.org/gnu/autoconf/${autoconf_ver}.tar.xz \
+ && cd /tmp \
+ && tar xf /usr/local/${autoconf_ver}.tar.xz \
+ && cd ${autoconf_ver} \
+ && mkdir build \
+ && cd build \
+ && ../configure --prefix=/usr/local/${autoconf_ver} \
+ && make install \
+ && cd /usr/local/${autoconf_ver}/bin \
+ && for f in autoconf autoheader autom4te autoreconf autoscan autoupdate ifnames; do \
+ ln -sv $f $f-${autoconf_version} ; \
+ done \
+ && rm -f /usr/local/${autoconf_ver}.tar.xz \
+ && automake_version=1.15.1 automake_ver=automake-${automake_version} \
+ && cd /usr/local \
+ && wget https://ftp.gnu.org/gnu/automake/${automake_ver}.tar.xz \
+ && cd /tmp \
+ && tar xf /usr/local/${automake_ver}.tar.xz \
+ && cd ${automake_ver} \
+ && mkdir build \
+ && cd build \
+ && ../configure --prefix=/usr/local/${automake_ver} \
+ && make install \
+ && cd /usr/local/${automake_ver}/bin \
+ && for f in aclocal automake; do \
+ ln -sv $f $f-${automake_version} ; \
+ done \
+ && rm -f /usr/local/${automake_ver}.tar.xz \
+ && rm -rf /tmp/${autoconf_ver} /tmp/${automake_ver}
+
+COPY home-data/ /home-data/
+COPY install-gcc-latest.sh new-user.sh nvidia-power-cycle.sh nvidia-serial.sh \
+ /usr/local/bin/
+
+RUN \
+ while read line; do \
+ new-user.sh --group $(echo "$line" | cut -d: -f 1,3); \
+ done < <(grep -v ":x:x:" /home-data/group)
+
+# Create directories required for X11. We use X11 in tcwg-x2go images and,
+# sometimes, in tcwg-dev images.
+# We need to create these before "VOLUME /tmp" directive, since after
+# the directive stuff from /tmp won't make it into the image.
+RUN mkdir -p /tmp/.X11-unix /tmp/.ICE-unix \
+ && chmod 1777 /tmp/.X11-unix /tmp/.ICE-unix
+
+#if ARCH_armhf
+# For AArch32 images, add a warning if an interactive shell is opened in an
+# AArch64 environment.
+RUN echo $'if [ "$(uname -m)" == "aarch64" ] || [ "$(uname -m)" == "x86_64" ]; then\n' \
+ $' echo "============================================================================================="\n' \
+ $' echo "WARNING: This is a 32-bit container, but your shell is running in a 64-bit environment."\n' \
+ $' echo "You probably want to run your shell with the \'linux32\' program to get a 32-bit environment."\n' \
+ $' echo "============================================================================================="\n' \
+ $'fi\n' \
+ >> /etc/bash.bashrc
+#endif
+
# We use ssh multiplexing, which creates sockets in /tmp. Overlayfs,
# which docker is using, can't host sockets, so we use a scratch mount
# for /tmp. This requires that we add --rm option to "docker run"
@@ -173,3 +424,5 @@ CMD ["/usr/sbin/sshd", "-D"]
#else
CMD ["linux32", "/usr/sbin/sshd", "-D"]
#endif
+
+# This is a dummy comment to trigger a base image rebuild.
diff --git a/tcwg-base/build-all.sh b/tcwg-base/build-all.sh
new file mode 100755
index 00000000..d0351115
--- /dev/null
+++ b/tcwg-base/build-all.sh
@@ -0,0 +1,33 @@
+#!/bin/bash
+
+set -euf -o pipefail
+
+top=$(git rev-parse --show-toplevel)
+
+case $(uname -m) in
+ x86_64) arch="amd64\|i386" ;;
+ aarch64) arch="arm64\|armhf" ;;
+esac
+
+dirs=($(find "$top" -type d -name "*-tcwg*" | grep "$arch"))
+
+rm -f $top/tcwg-base/status
+
+for dir in "${dirs[@]}"; do
+ (
+ cd $dir
+
+ image="$(basename $dir)"
+ echo "START: $image" | tee -a $top/tcwg-base/status
+ ./build.sh > build.log 2>&1 &
+ res=0 && wait $! || res=$?
+ if [ $res = 0 ]; then
+ echo "PASS: $image" | tee -a $top/tcwg-base/status
+ else
+ echo "FAIL: $image" | tee -a $top/tcwg-base/status
+ tail build.log
+ fi
+ ) &
+done
+
+wait
diff --git a/tcwg-base/build.sh b/tcwg-base/build.sh
index 24ede180..ab0e4560 100755
--- a/tcwg-base/build.sh
+++ b/tcwg-base/build.sh
@@ -2,11 +2,21 @@
set -e
+# Can't run multiple copies of this script
+exec 9<Dockerfile
+flock -x 9
+
trap cleanup_exit INT TERM EXIT
cleanup_exit()
{
- rm -rf postfix*.in
+ rm -rf \
+ home-data/ \
+ install-armhf-perf-workaround.sh \
+ install-gcc-latest.sh \
+ new-user.sh \
+ nvidia-power-cycle.sh \
+ nvidia-serial.sh
}
export LANG=C
@@ -17,10 +27,22 @@ name=$(basename ${PWD} | cut -f3- -d '-')
image=linaro/ci-${arch}-${name}-ubuntu:${distro}
baseimage=$(grep "^FROM" Dockerfile | head -n 1 | cut -d" " -f 2)
-cp $top/tcwg-base/postfix*.in .
+rsync -aL $top/tcwg-base/home-data/ ./home-data/
+cp -t ./ \
+ $top/tcwg-base/install-armhf-perf-workaround.sh \
+ $top/tcwg-base/install-gcc-latest.sh \
+ $top/tcwg-base/new-user.sh \
+ $top/tcwg-base/nvidia-power-cycle.sh \
+ $top/tcwg-base/nvidia-serial.sh
+
+# Check if passwd has end-of-line. If no eol at the end of passwd, all "while read line"
+# will silently skip last line
+if [ "$(tail -c1 ./home-data/passwd | wc -l)" -eq 0 ] ; then
+ echo "ERROR: no eol to /home-data/passwd"
+ exit 1
+fi
-"$top"/tcwg-base/validate-dockerfile.sh Dockerfile
+"$top"/tcwg-base/validate-checksum.sh Dockerfile
docker pull $baseimage 2>/dev/null || true
-docker pull $image 2>/dev/null || true
docker build --tag=$image .
echo $image > .docker-tag
diff --git a/tcwg-base/cpp-script.sh b/tcwg-base/cpp-script.sh
index 7270d6e0..5c994546 100755
--- a/tcwg-base/cpp-script.sh
+++ b/tcwg-base/cpp-script.sh
@@ -2,6 +2,11 @@
# Clean: shellcheck -e 2001 ./cpp-script.sh
+# NOTE: THIS SCRIPT HAS COPIES IN THE FOLLOWING REPOS:
+# - CI/DOCKERFILES.GIT AND
+# - CI/JOB/CONFIGS.GIT
+# REMEMBER TO SYNCHRONIZE ALL COPIES ON CHANGES.
+
set -eu -o pipefail
input=""
@@ -38,4 +43,4 @@ for var in ${vars[@]+"${vars[@]}"}; do
done
unifdef -k -t -x2 "${cpp_opts[@]}" "$input" \
- | sed -e "s/^//" "${sed_opts[@]+"${sed_opts[@]}"}"
+ | sed -e "/^\$/ d" "${sed_opts[@]+"${sed_opts[@]}"}"
diff --git a/tcwg-base/generate-dockerfiles.sh b/tcwg-base/generate-dockerfiles.sh
index c53c9d8f..23c76513 100755
--- a/tcwg-base/generate-dockerfiles.sh
+++ b/tcwg-base/generate-dockerfiles.sh
@@ -11,19 +11,21 @@ generate_dockerfile ()
distro=$(basename ${PWD} | cut -f1 -d '-')
arch=$(basename ${PWD} | cut -f2 -d '-')
name=$(basename ${PWD} | cut -f3- -d '-')
- dockerfile_in=$(find $top/tcwg-base -name "$name")/Dockerfile.in
+ # Find Dockerfile.in template for $name image flavour.
+ dockerfile_in=$(find $top/tcwg-base -path "*/$name/Dockerfile.in")
dockerfile_out=Dockerfile
if [ -f "$dockerfile_in" ]; then
- echo "# Auto generated from ${dockerfile_in#$top/}. Do not edit." > "$dockerfile_out"
+ echo "# Auto generated by $0 from ${dockerfile_in#$top/}. Do not edit." > "$dockerfile_out"
$top/tcwg-base/cpp-script.sh -v DISTRO=$distro -v ARCH=$arch \
-i $dockerfile_in >> "$dockerfile_out"
- MD5=$(md5sum "$dockerfile_out" | awk '{ print $1; }')
- echo "# checksum: $MD5" >> "$dockerfile_out"
+ $top/tcwg-base/validate-checksum.sh --generate true "$dockerfile_out"
fi
)
}
-for i in $(find $top -name "*-tcwg-*"); do
+cd $top
+
+for i in $(find $top -type d -name "*-tcwg-*"); do
generate_dockerfile $i
done
diff --git a/tcwg-base/gerrit-branches b/tcwg-base/gerrit-branches
deleted file mode 100644
index 0561f3af..00000000
--- a/tcwg-base/gerrit-branches
+++ /dev/null
@@ -1,2 +0,0 @@
-master
-tcwg-staging
diff --git a/tcwg-base/home-data/adhemerval.zanella/.screenrc b/tcwg-base/home-data/adhemerval.zanella/.screenrc
new file mode 100644
index 00000000..da7dfe44
--- /dev/null
+++ b/tcwg-base/home-data/adhemerval.zanella/.screenrc
@@ -0,0 +1,86 @@
+# the following two lines give a two-line status, with the current window highlighted
+hardstatus alwayslastline
+hardstatus string '%{= kG}[%{G}%H%? %1`%?%{g}][%= %{= kw}%-w%{+b yk} %n*%t%?(%u)%? %{-}%+w %=%{g}][%{B}%m/%d %{W}%C%A%{g}]'
+
+# huge scrollback buffer
+defscrollback 5000
+
+# no welcome message
+startup_message off
+
+# 256 colors
+attrcolor b ".I"
+termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'
+defbce on
+
+# mouse tracking allows to switch region focus by clicking
+#mousetrack on
+
+# default windows
+screen -t Shell1 1 $SHELL
+screen -t Shell2 2 $SHELL
+screen -t Shell3 3 $SHELL
+select 0
+bind c screen 1 # window numbering starts at 1 not 0
+bind 0 select 10
+
+# get rid of silly xoff stuff
+bind s split
+
+# layouts
+layout autosave on
+layout new one
+select 1
+layout new two
+select 1
+split
+resize -v +8
+focus down
+select 4
+focus up
+layout new three
+select 1
+split
+resize -v +7
+focus down
+select 3
+split -v
+resize -h +10
+focus right
+select 4
+focus up
+
+layout attach one
+layout select one
+
+# navigating regions with Ctrl-arrows
+bindkey "^[[1;5D" focus left
+bindkey "^[[1;5C" focus right
+bindkey "^[[1;5A" focus up
+bindkey "^[[1;5B" focus down
+
+# switch windows with F3 (prev) and F4 (next)
+bindkey "^[OR" prev
+bindkey "^[OS" next
+
+# switch layouts with Ctrl+F3 (prev layout) and Ctrl+F4 (next)
+bindkey "^[O1;5R" layout prev
+bindkey "^[O1;5S" layout next
+
+# F2 puts Screen into resize mode. Resize regions using hjkl keys.
+bindkey "^[OQ" eval "command -c rsz" # enter resize mode
+
+# use hjkl keys to resize regions
+bind -c rsz h eval "resize -h -5" "command -c rsz"
+bind -c rsz j eval "resize -v -5" "command -c rsz"
+bind -c rsz k eval "resize -v +5" "command -c rsz"
+bind -c rsz l eval "resize -h +5" "command -c rsz"
+
+# quickly switch between regions using tab and arrows
+bind -c rsz \t eval "focus" "command -c rsz" # Tab
+bind -c rsz -k kl eval "focus left" "command -c rsz" # Left
+bind -c rsz -k kr eval "focus right" "command -c rsz" # Right
+bind -c rsz -k ku eval "focus up" "command -c rsz" # Up
+bind -c rsz -k kd eval "focus down" "command -c rsz" # Down
+
+vbell off
diff --git a/tcwg-base/home-data/adhemerval.zanella/.ssh/authorized_keys b/tcwg-base/home-data/adhemerval.zanella/.ssh/authorized_keys
new file mode 100644
index 00000000..7cebc7f0
--- /dev/null
+++ b/tcwg-base/home-data/adhemerval.zanella/.ssh/authorized_keys
@@ -0,0 +1 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDa6gGzIvhVn1AHCG7HhH6s0eIJrAcQKR9tlcKL27Eh+TXan+VPZnL1WkwGT87JCJiDmsQn5Ecp8AtsLHJUGycAC3cvHGZ13DeJWnlDCThkkZqsf63x0rauAFMA1bncmCv/vf8+lZ2WHDerY4RNQZTIvFCOWpatNAEzpq4Qh8yksw0Xv5mKpPJV2/cY7j6m6KxTSLFr+tn9mOoe0KANVrwbg1eE3jTDmLG4MajT/LpAzBxMoGqaI3nbJFfRH43DRWPgancQfPmQB+cw4I1e8vwGST2EZuCII+uNMs1ZLBJ57utvRZuX7SRx35CxsUUV8giRSQ5VG6W26OaIAQl0l3Qr azanella@mandiga
diff --git a/tcwg-base/home-data/alex.bennee/.ssh/authorized_keys b/tcwg-base/home-data/alex.bennee/.ssh/authorized_keys
new file mode 100644
index 00000000..f51ceb2e
--- /dev/null
+++ b/tcwg-base/home-data/alex.bennee/.ssh/authorized_keys
@@ -0,0 +1,3 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCyVywkk+VvhgT/FIeeW0RMv2L+VjklgDZawWqwnRKibbgXO7cNx9gAM+vLZd1lwUsAs6b3pecyJKuPGPLTQwQ/8RcWE0/rIqLyaqRYJGjlPYLtPgRm12d4eEvXDK7hQs/KGmc+rVQCk4cu9SBvdqJtvPuE68o2xV5SEKv0JUwSnXxQhScqa3/Zf+bKiVxWxBfaOfsZtdb6qECG4hhL5w9Z9Skviz5Hw7RWDqnXrKeCAiCCpZRhE10++6NhHpdLQtFWbGhyJ9Xmuq6OaDWofHkC2YfUSQ/VL8dKQoo1oltnH4FHlDmtvfqHzslJMpwXu0iHREu4T93tnZcpi89xcw6P alex@zen
+ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArnlSBm0os7ulw7YhTU84c+wMCoNmxaoabxUFx6vDq4VXNla6ZPGsKQmSOAUAmAeYenQnAk5eWlgxOt6QSUVCZcKXct+TLjWojKwXZ75jlCjFsIkv4f1ff9bEjvoqhvVLlKXteM2l4KVAB1/xjWrrl95WUpMzkrVrLR7y+HMImxRz+q6upAy9PUVfjdKoGI/xUPQ+8ob1aNY1OuxVraaZt1nbYb2CbHGuPfuq41EKHBDUhEfb1z2qaRfq4lqa3CQTtAUr7PGmMbGDRPvejhIQw3VTn28zRoGaDPH1TYw0cVF2BHjHtnwaorAemxRxo2X619qxcMd1Dx3U+KM0AQH2iw== alex@danny
+ssh-dss AAAAB3NzaC1kc3MAAACBAPR7IFQ+tr0WmHSoZf4hhBcBsUPr5X/oRP7/AtNEOhzzMGDpZjv43FNom98KnEwo/CFOpIb4AOZmaWJfxvtIHuq2501riATSWPTDAiPJVuWfCwasxrWuTYd74Ft14q2WrNWOQRfq8QVzX/DmKZFjlBTQ5pnczESK51H89vLQDCtNAAAAFQDNfFYgHqtSwp3kF6sRDsLKSxM15QAAAIEAkV716nHegoRqYlPemvIIUfcyuoAL2zkQaq4NMd481owzNLVmxXQloDT1x49bR43jd8V10DYLZPaU8p50M2FdI/SzAha7JoRmHTeiATeWoB9M6PkeNllTAP3qtKq5w5Tdl6HGVuRScXNzMEC/SIKFaj7bZD6WqZxraYpsfHtD68QAAACBANDzYWx7U489zikATO7gpyKnOP1Gxuuc3cBKJx0sMGIg0kiipf5G6azsptRPSyu4e/iST4JtaH2tnPx50zsPm0XGpAjHw4cUgYtUnruSTP/G7Di2dig2MOelxX/SKprdblZob573eMd64OMmeaJfMM0OAHVvzBqCXs16qKdBZCUZ alex@danny
diff --git a/tcwg-base/home-data/alex.bennee/bootstrap.sh b/tcwg-base/home-data/alex.bennee/bootstrap.sh
new file mode 100644
index 00000000..e5de885a
--- /dev/null
+++ b/tcwg-base/home-data/alex.bennee/bootstrap.sh
@@ -0,0 +1,78 @@
+#!/bin/bash
+#
+# Bootstrap a new system
+# wget -O - https://raw.githubusercontent.com/stsquad/dotfiles/master/bootstrap.sh | bash
+# curl -s https://raw.githubusercontent.com/stsquad/dotfiles/master/bootstrap.sh | bash
+#
+set -e
+
+if [ -n "$SSH_AUTH_SOCK" ] && [ -S "$SSH_AUTH_SOCK" ] && [ "ssh-add -l > /dev/null" ]; then
+ SSH_CONFIG=${HOME}/.ssh
+ mkdir -p ${SSH_CONFIG}
+ # You kinda have to take it on trust that these are the github finger-prints
+ cat > ${SSH_CONFIG}/known_hosts <<EOF
+|1|clnLL0mD6yeybmELLpJW0Z3hSUU=|GYO6eB1F0D+HVTeLlP7edbabPiA= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==
+|1|Ckc80vuVSIfn10uM74pb4jfDBS8=|lSc7LGFPlKVXCpmJF7EcHTVUlsg= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==
+EOF
+ MYGITHUB=git@github.com:stsquad
+else
+ MYGITHUB=https://github.com/stsquad
+fi
+
+GIT=`which git`
+if [[ ! -f ${GIT} ]]; then
+ # Are we on an dpkg/apt based system?
+ DPKG=`which dpkg-query`
+ if [[ ! -f ${DPKG} ]]; then
+ if [[ ! `dpkg-query --status git` ]]; then
+ echo "Fetching git"
+ if [ `id -u` = 0 ] ; then
+ apt-get update
+ apt-get install -y git
+ else
+ sudo apt-get update
+ sudo apt-get install -y git
+ fi
+ fi
+ else
+ echo "Don't know how to install git on this system"
+ exit 1
+ fi
+else
+ echo "Already have git, good"
+fi
+
+# keep my stff here
+MYSRC=${HOME}/mysrc
+mkdir -p ${MYSRC}
+cd ${MYSRC}
+
+# Clone dotfiles and elisp
+if [ ! -d dotfiles.git ]; then
+ echo "Fetching dotfiles"
+ git clone ${MYGITHUB}/dotfiles.git dotfiles.git
+ cd dotfiles.git
+ ./setup_dotfiles.sh
+ cd -
+fi
+
+if [ ! -d elisp.git ]; then
+ echo "Fetching elisp"
+ git clone ${MYGITHUB}/my-emacs-stuff.git elisp.git
+ cd elisp.git
+ ./setup_emacs.sh
+ cd -
+fi
+
+cd $HOME
+
+# Account for running under sudo
+if [ ! -z "${SUDO_USER}" ]; then
+ echo "Fixing up ${HOME} permissions to ${SUDO_USER}:${SUDO_GID}"
+ chown -R ${SUDO_USER}:${SUDO_GID} ${HOME}
+fi
+
+# Done (for now)
+echo "Done!"
+
+
diff --git a/tcwg-base/home-data/anthony.roberts/.ssh/authorized_keys b/tcwg-base/home-data/anthony.roberts/.ssh/authorized_keys
new file mode 100644
index 00000000..a304661c
--- /dev/null
+++ b/tcwg-base/home-data/anthony.roberts/.ssh/authorized_keys
@@ -0,0 +1 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCivmwJC4LTwL7zrrwZ/MX8VQoZtO7FUmPUdj87upqSw5Yz0LhGCjwwHthsCOjS5Rv9Pacbb+r5nxnCTmbgCb5wFhIwvJyy0VhpmF/5H259uvCyAlwRS1cKbj32laQS+j0XXXrmLArGj9TK8lRBlUFetcDzEXQWVATG0MeWeME+fkM16P9R0fN+ndZHnv+1THK8o9M6oCK24qt48IiZ7oVX/LKJ/GiwYWm1rpjSMuzoQMPCsKhpoDGBUfGSGwbu31eBQYYMbapOcZ1kwuNbb4+aw8LKu7IMyhAoRj0y+bc3le+i1QZmYj53jk+v50DrslS46MXrYDD36bVkbLjiVDxYe/pBYwzZYZVQkmGdA5+gTG3OgsaryqxW5xQj+73vGPttz9SdxNXMK26scqv/BJv9Y5gK9ZqlpuwCpMZZXfWLBxbKWVqQ/WCIBY59H0Bc9cBSvlPjxZDbfIQYYvxur6c48MBo+s3boTUyJ2tmG0NnAjQTh8cEEfqwbl+1t98qdvM= anthony@E128101
diff --git a/tcwg-base/home-data/anthony.roberts/.ssh/config b/tcwg-base/home-data/anthony.roberts/.ssh/config
new file mode 120000
index 00000000..5f9d8251
--- /dev/null
+++ b/tcwg-base/home-data/anthony.roberts/.ssh/config
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/config \ No newline at end of file
diff --git a/tcwg-base/home-data/anthony.roberts/.ssh/config.d b/tcwg-base/home-data/anthony.roberts/.ssh/config.d
new file mode 120000
index 00000000..1af9bec1
--- /dev/null
+++ b/tcwg-base/home-data/anthony.roberts/.ssh/config.d
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/config.d \ No newline at end of file
diff --git a/tcwg-base/home-data/anthony.roberts/.ssh/known_hosts b/tcwg-base/home-data/anthony.roberts/.ssh/known_hosts
new file mode 120000
index 00000000..936136a2
--- /dev/null
+++ b/tcwg-base/home-data/anthony.roberts/.ssh/known_hosts
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/known_hosts \ No newline at end of file
diff --git a/tcwg-base/home-data/anthony.roberts/.ssh/ssh-tcwglab-nc.sh b/tcwg-base/home-data/anthony.roberts/.ssh/ssh-tcwglab-nc.sh
new file mode 120000
index 00000000..6eddeb50
--- /dev/null
+++ b/tcwg-base/home-data/anthony.roberts/.ssh/ssh-tcwglab-nc.sh
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/ssh-tcwglab-nc.sh \ No newline at end of file
diff --git a/tcwg-base/home-data/antoine.moynault/.ssh/authorized_keys b/tcwg-base/home-data/antoine.moynault/.ssh/authorized_keys
new file mode 100644
index 00000000..181cdb75
--- /dev/null
+++ b/tcwg-base/home-data/antoine.moynault/.ssh/authorized_keys
@@ -0,0 +1,2 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDizgV143g/EjA5G4kWpbs84q91+vO5/xSB56+v177fb3z+kaIr9NttVnrzVB5A3AEJrPEoD9CzXgiD0wz6jzMrsL9kWmC2vorHtjUQM2qB9GgtHynkY9X/9y6+q4HU6rmVq/Kq27fjaN73nZk2dm6RUpve6DKhKq/J77JOo/zANssFtZjqwwFYr3Hrr7P6vbTKpTrzX8E31FZnC8s90/ZMqw8l72qTmecjaVB1EWjtku6rdcbQVNkOoYhLUrnSAwYQG5baKUGy1dWlRJ6se+gKsPzRSWeph62hpAxRux+Nj1iFeRoAwntw3kHX0z4aLOTJcMfSN4Rz/r8wdsoVacBb7SmLJ09hHayajTvZLJUmyqaJfrvAWo/I8oeOgiTUiGkX+WklhoP3zVLTrS5QWsh3xkUiwaGpeevHn1RCwloQyWdZqsSlyFhqBmEUpl0Q9xlHQXSLAGnhlaqv9OoAXD7/Sh/T0FRAnGeYZxz/pzphPy5GHd8ZBWnshgjOlCo7uDk= antoine@hoth
+ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAicBxGjO+zJfZy286DkSfhd5Dh9imOAtlGJ01jZ0kqX antoine@hoth
diff --git a/tcwg-base/home-data/antoine.moynault/.ssh/config b/tcwg-base/home-data/antoine.moynault/.ssh/config
new file mode 120000
index 00000000..5f9d8251
--- /dev/null
+++ b/tcwg-base/home-data/antoine.moynault/.ssh/config
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/config \ No newline at end of file
diff --git a/tcwg-base/home-data/antoine.moynault/.ssh/config.d b/tcwg-base/home-data/antoine.moynault/.ssh/config.d
new file mode 120000
index 00000000..1af9bec1
--- /dev/null
+++ b/tcwg-base/home-data/antoine.moynault/.ssh/config.d
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/config.d \ No newline at end of file
diff --git a/tcwg-base/home-data/antoine.moynault/.ssh/known_hosts b/tcwg-base/home-data/antoine.moynault/.ssh/known_hosts
new file mode 120000
index 00000000..936136a2
--- /dev/null
+++ b/tcwg-base/home-data/antoine.moynault/.ssh/known_hosts
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/known_hosts \ No newline at end of file
diff --git a/tcwg-base/home-data/antoine.moynault/.ssh/ssh-tcwglab-nc.sh b/tcwg-base/home-data/antoine.moynault/.ssh/ssh-tcwglab-nc.sh
new file mode 120000
index 00000000..6eddeb50
--- /dev/null
+++ b/tcwg-base/home-data/antoine.moynault/.ssh/ssh-tcwglab-nc.sh
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/ssh-tcwglab-nc.sh \ No newline at end of file
diff --git a/tcwg-base/home-data/carlos.seo/.screenrc b/tcwg-base/home-data/carlos.seo/.screenrc
new file mode 100644
index 00000000..ddeecd33
--- /dev/null
+++ b/tcwg-base/home-data/carlos.seo/.screenrc
@@ -0,0 +1,4 @@
+# Add a status line to the screen sessions. Copy to your $HOME/.screenrc file.
+# # This will show: | List of Shells | username@hostname | CPU Load | Date | Time |
+hardstatus alwayslastline "%{wk}%?%-Lw%?%{=b kR}(%{W}%n*%f %t%?(%u)%?%{=b kR})%{= kw}%?%+Lw%?%? %= %{C}$USER@%{W}%H %{K}load{%l} %{kR} %d/%m %{Yk}%C%a %{g}"
+
diff --git a/tcwg-base/home-data/carlos.seo/.ssh/authorized_keys b/tcwg-base/home-data/carlos.seo/.ssh/authorized_keys
new file mode 100644
index 00000000..6c2096b6
--- /dev/null
+++ b/tcwg-base/home-data/carlos.seo/.ssh/authorized_keys
@@ -0,0 +1,2 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDbGhz5nfY/qYBaDB69OTE711xEGnnI8lLD0D5/+i0VnsXAAXPyrzri8ohOsEdbGfz05aPjl5JfbDCRgcfNJnhosGiLa2noPs/MygssNY37OXn9LbGkaQQl6tz2moTPFndL9QcY0uehyXpdrjxv3PMdcuhaL7B8Qz/TfGKzABVSGZ25TeOBTkUetgaM8PHtuBFTe82BJ4zrw0sxpdq9A1G+Jifu01RgRTpN1TBk3hLZEYInUbjzRUxtziMU/CfSyC6KA4S1H8W8J4VqVGYO3FSg98NB/2zt/KXjk9cwvviJ8B9SNlusFfU4NyfDh4xaLg/UXvviyFa39ubjzgfbetCiA4oA/mnRWiH3vgULRaqQmoyCDOn/6o5KQjN3tI62TcfVbIt1aplBOC1xjoYbec29V+pBRP89fD6EjJ+fSNiNr9fW/mOXK7u0FOXLez9DfRXtt54LqgIbEl16uTfQjUDIDi+zeZ7KeicZknc1sh+BbRm9mB0MeLgWctH3a7J8xoucLtwTOQHMaZl80HLQzovsMoLYYRf1rfrO4H2pNnq1Ao/v2E14+WFyGdduYlyq/satfpsV7Ox1eyD9BWtDL63daYetCeBPwAywwqe0LJtK8Z6Erahz1UVC4+kWZYgqvxUENESXkQ/7nOmHf+vkrdf6AfVNC98XXgT9scgzPE3UHw== carlos.seo@linaro.org
+ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK/aNyU4LPj0pXCAzxIbBXrSm/qKJv386pKhyp0X6yq/ carlos.seo@linaro.org
diff --git a/tcwg-base/home-data/carlos.seo/.ssh/config b/tcwg-base/home-data/carlos.seo/.ssh/config
new file mode 120000
index 00000000..5f9d8251
--- /dev/null
+++ b/tcwg-base/home-data/carlos.seo/.ssh/config
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/config \ No newline at end of file
diff --git a/tcwg-base/home-data/carlos.seo/.ssh/config.d b/tcwg-base/home-data/carlos.seo/.ssh/config.d
new file mode 120000
index 00000000..1af9bec1
--- /dev/null
+++ b/tcwg-base/home-data/carlos.seo/.ssh/config.d
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/config.d \ No newline at end of file
diff --git a/tcwg-base/home-data/carlos.seo/.ssh/known_hosts b/tcwg-base/home-data/carlos.seo/.ssh/known_hosts
new file mode 120000
index 00000000..936136a2
--- /dev/null
+++ b/tcwg-base/home-data/carlos.seo/.ssh/known_hosts
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/known_hosts \ No newline at end of file
diff --git a/tcwg-base/home-data/carlos.seo/.ssh/ssh-tcwglab-nc.sh b/tcwg-base/home-data/carlos.seo/.ssh/ssh-tcwglab-nc.sh
new file mode 120000
index 00000000..6eddeb50
--- /dev/null
+++ b/tcwg-base/home-data/carlos.seo/.ssh/ssh-tcwglab-nc.sh
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/ssh-tcwglab-nc.sh \ No newline at end of file
diff --git a/tcwg-base/home-data/carlos.seo/.vimrc b/tcwg-base/home-data/carlos.seo/.vimrc
new file mode 100644
index 00000000..53ec06b9
--- /dev/null
+++ b/tcwg-base/home-data/carlos.seo/.vimrc
@@ -0,0 +1,18 @@
+" Config file for Vim
+
+" Syntax highlighting
+syntax on
+
+" For identation with hard tabs:
+" Set \t to eight spaces
+set tabstop=8
+
+" For identation with spaces / mixed tabs and spaces
+" Set soft \t to two spaces
+set softtabstop=2
+set shiftwidth=2
+set noexpandtab
+set smarttab
+
+" Create a marker at the 80th column (useful for GNU projects)
+set colorcolumn=80
diff --git a/tcwg-base/home-data/christophe.lyon/.gitconfig b/tcwg-base/home-data/christophe.lyon/.gitconfig
new file mode 100644
index 00000000..c07d4d51
--- /dev/null
+++ b/tcwg-base/home-data/christophe.lyon/.gitconfig
@@ -0,0 +1,18 @@
+[user]
+ email = christophe.lyon@linaro.org
+ name = Christophe Lyon
+
+[core]
+ editor = emacs
+[alias]
+ co = checkout
+ br = branch
+ st = status
+ ci = commit
+[sendemail]
+ smtpencryption = tls
+ smtpserver = smtp.gmail.com
+ smtpuser = christophe.lyon@linaro.org
+ smtpserverport = 587
+[credential]
+ helper = store
diff --git a/tcwg-base/home-data/christophe.lyon/.ssh/authorized_keys b/tcwg-base/home-data/christophe.lyon/.ssh/authorized_keys
new file mode 100644
index 00000000..2784fa89
--- /dev/null
+++ b/tcwg-base/home-data/christophe.lyon/.ssh/authorized_keys
@@ -0,0 +1 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDH+cTuP929qfreLhscv8F2Ot3NjaT1YVtyq6/gOqpCNIXPvPUIa/H9vacBHL7XxbtZoZhI6Ma/rlokjfriupldtzh9UQ4asEVRIpFTw6g8gGJx1RE00PUp2uCT1FZpMNFkuJQ1teI3o+ttMMLTKLdMbqzrzijH2Ev+RRGxveE91G/giRyGuyPdPO07XjNqfKXM8yWFUQg/P+rmSbNlomJ8JKxrg9xifnXBYXLKIiM3EfXwbOiqAxQvFp7KAMka2RrHb1RuZ3D94T8tqVNWPkSc09MX0BB6IAUxGdUYYQ5UTGukGL9OqsaOYlrJusrWW2eZ3lamUZfhGB1VFGPaXv+z lyon@gnx2504
diff --git a/tcwg-base/home-data/christophe.lyon/.ssh/config b/tcwg-base/home-data/christophe.lyon/.ssh/config
new file mode 120000
index 00000000..5f9d8251
--- /dev/null
+++ b/tcwg-base/home-data/christophe.lyon/.ssh/config
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/config \ No newline at end of file
diff --git a/tcwg-base/home-data/christophe.lyon/.ssh/config.d b/tcwg-base/home-data/christophe.lyon/.ssh/config.d
new file mode 120000
index 00000000..1af9bec1
--- /dev/null
+++ b/tcwg-base/home-data/christophe.lyon/.ssh/config.d
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/config.d \ No newline at end of file
diff --git a/tcwg-base/home-data/christophe.lyon/.ssh/known_hosts b/tcwg-base/home-data/christophe.lyon/.ssh/known_hosts
new file mode 120000
index 00000000..936136a2
--- /dev/null
+++ b/tcwg-base/home-data/christophe.lyon/.ssh/known_hosts
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/known_hosts \ No newline at end of file
diff --git a/tcwg-base/home-data/christophe.lyon/.ssh/ssh-tcwglab-nc.sh b/tcwg-base/home-data/christophe.lyon/.ssh/ssh-tcwglab-nc.sh
new file mode 120000
index 00000000..6eddeb50
--- /dev/null
+++ b/tcwg-base/home-data/christophe.lyon/.ssh/ssh-tcwglab-nc.sh
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/ssh-tcwglab-nc.sh \ No newline at end of file
diff --git a/tcwg-base/home-data/david.spickett/.ssh/authorized_keys b/tcwg-base/home-data/david.spickett/.ssh/authorized_keys
new file mode 100644
index 00000000..9706dd72
--- /dev/null
+++ b/tcwg-base/home-data/david.spickett/.ssh/authorized_keys
@@ -0,0 +1,2 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCf7urQs7/xG0kFtnr31TgZb3cQpBqT42EFpPPkJtiMfoMcgVTacZqWCGo8pcxb34O8+zi1MiEM3ZlEJXapY+rQ8TINlxQG3JwllCR+bEVkql8jjZ3SR6ilvwi9Q88AiD4BorTvnuqEjRC1RF26X4yIrDBvGLKSimAsavsufFI4cYujbK6Rs6SqIj9RohbUnrGDEX/O8zl0zX4lnKpCwRL+tIhhES+uc44QlyLVdKZjxgSB3w5faqnjy8XicKFh5GLcQvcL/LFUP7Ut5ZmAAlGgTldNplgFEA7CxOXtDlaOLY6l/jOjqTC9Pr2n2K5PNfXpJchBoEZbwgozpNOxOkkt davspi01@e113826-lin
+ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBH3r1EO2AbXNc6LSpjbWOWjuAQdXR7xRxZRxydzQpUS david.spickett@linaro.org
diff --git a/tcwg-base/home-data/david.spickett/.vimrc b/tcwg-base/home-data/david.spickett/.vimrc
new file mode 100644
index 00000000..052a0621
--- /dev/null
+++ b/tcwg-base/home-data/david.spickett/.vimrc
@@ -0,0 +1,10 @@
+set number
+set tabstop=2
+set shiftwidth=2
+set expandtab
+
+set undodir=~/.vim/undodir
+set undofile
+
+highlight ExtraWhitespace ctermbg=red guibg=red
+match ExtraWhitespace /\s\+$/
diff --git a/tcwg-base/home-data/everton.constantino/.ssh/authorized_keys b/tcwg-base/home-data/everton.constantino/.ssh/authorized_keys
new file mode 100644
index 00000000..136addd1
--- /dev/null
+++ b/tcwg-base/home-data/everton.constantino/.ssh/authorized_keys
@@ -0,0 +1 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC5cVLsJD6LC96FhufdR8eHXqnALWxAnk9M344bS+TmLMm/XQk2+A8Ym9skSToBCcorFGhNb4AGjmeAndcUa5I+3t7lxLvRBDTllrW+/m/yVH79ylVH+h7sqap7gJsBwODVoYmdThZaOgMT1V8LLmm36MwBLYM9Ws//Go1kBV/zwF1J9Un1/Xu9b7/02bUbu0nBJykDht9pIlqm9lkXsCgy/LalWM55bN/zskVf9pLGoPMLY3QNiYBA+T6TaV93QaSSzU5T/Ar1J0myTROGFZQWdrnaepR+pI8MJ44tzmNfVA8ONK0a48AbKioTexE4uGvLQbwN30oVnv1VhpoU7shsAu2noO+nhuYtOoDpJ3pC+2ZwwVGfXj3zSy6kfkCXlkfl93iU+u205GEbu6tOT+lm3Uc9qrQaloohOAZm2YH/+D8bamA55mLLIWu78/wiI83fFFDPf/gNJLt/pWj78gmlSWmAwB16fwlMUZWJFrZPM97V25Eb/ugl6H3w35ni96fiiLc+CBxd8yymKp+nMNded4xwa5h806g9gkFIAjpRJLHCMA0fMzKgosM0RU8HDQdNfaQXsYrnxGBg7z1xNpGcz7tzTYjYPZw2yVmlXs/goq4E9vcByl3KkDpSPfH5jbMWqkWjtADTpZAPlNRaT0wjLQW7M+OzkEQ88sW34NDdhw== everton.constantino@ibm.com
diff --git a/tcwg-base/home-data/everton.constantino/.ssh/config b/tcwg-base/home-data/everton.constantino/.ssh/config
new file mode 120000
index 00000000..5f9d8251
--- /dev/null
+++ b/tcwg-base/home-data/everton.constantino/.ssh/config
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/config \ No newline at end of file
diff --git a/tcwg-base/home-data/everton.constantino/.ssh/config.d b/tcwg-base/home-data/everton.constantino/.ssh/config.d
new file mode 120000
index 00000000..1af9bec1
--- /dev/null
+++ b/tcwg-base/home-data/everton.constantino/.ssh/config.d
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/config.d \ No newline at end of file
diff --git a/tcwg-base/home-data/everton.constantino/.ssh/known_hosts b/tcwg-base/home-data/everton.constantino/.ssh/known_hosts
new file mode 120000
index 00000000..936136a2
--- /dev/null
+++ b/tcwg-base/home-data/everton.constantino/.ssh/known_hosts
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/known_hosts \ No newline at end of file
diff --git a/tcwg-base/home-data/everton.constantino/.ssh/ssh-tcwglab-nc.sh b/tcwg-base/home-data/everton.constantino/.ssh/ssh-tcwglab-nc.sh
new file mode 120000
index 00000000..6eddeb50
--- /dev/null
+++ b/tcwg-base/home-data/everton.constantino/.ssh/ssh-tcwglab-nc.sh
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/ssh-tcwglab-nc.sh \ No newline at end of file
diff --git a/tcwg-base/home-data/group b/tcwg-base/home-data/group
new file mode 100644
index 00000000..41f29159
--- /dev/null
+++ b/tcwg-base/home-data/group
@@ -0,0 +1,10 @@
+tcwg-root:x:x:maxim.kuvyrkov,david.spickett,thiago.bauermann,tcwg-benchmark,laurent.alfonsi,adhemerval.zanella,christophe.lyon
+tcwg-infra:x:9000:tcwg-buildslave,tcwg-benchmark,tcwg-buildbot,tcwg-ci-bot
+tcwg-users:x:10000:maxim.kuvyrkov,alex.bennee,christophe.lyon,richard.henderson,omair.javaid,adhemerval.zanella,david.spickett,laurent.alfonsi,thiago.bauermann,pierrick.bouvier,antoine.moynault,carlos.seo,leandro.lupori
+tcwg-llvm:x:9001:tcwg-buildslave,tcwg-buildbot,maxim.kuvyrkov,omair.javaid,adhemerval.zanella,david.spickett,thiago.bauermann,antoine.moynault,carlos.seo,leandro.lupori
+tcwg-llvm-root:x:x:maxim.kuvyrkov,omair.javaid,david.spickett,adhemerval.zanella,laurent.alfonsi
+tcwg-guests:x:9002:everton.constantino,anthony.roberts,lina.iyer
+tcwg-build-group:x:9003:
+tcwg-sudo:x:9004:maxim.kuvyrkov,alex.bennee,christophe.lyon,richard.henderson,omair.javaid,adhemerval.zanella,david.spickett,laurent.alfonsi,thiago.bauermann,pierrick.bouvier,antoine.moynault,carlos.seo,leandro.lupori,tcwg-benchmark,tcwg-buildslave,tcwg-buildbot,tcwg-ci-bot
+tcwg-bmk:x:9005:tcwg-benchmark,maxim.kuvyrkov,laurent.alfonsi,antoine.moynault,leandro.lupori,carlos.seo
+tcwg-bmk-root:x:x:tcwg-benchmark,maxim.kuvyrkov,laurent.alfonsi
diff --git a/tcwg-base/home-data/laurent.alfonsi/.ssh/authorized_keys b/tcwg-base/home-data/laurent.alfonsi/.ssh/authorized_keys
new file mode 100644
index 00000000..7cb5b648
--- /dev/null
+++ b/tcwg-base/home-data/laurent.alfonsi/.ssh/authorized_keys
@@ -0,0 +1 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8kf1cm7kY8ecDQ3DJ7UfGSIKxBAs0ga+Gi8kkDZag1ItZsKWlKNB+FIx9NtSW5vZBewlOHDv46zWaJLNRE2ZCLbAt3WIEtWTC3ppQD64no8WJvb3XcGoae6uWksrsF5d84958M0t4BND504/bukFi0t03loWrnfsOnwZuRF/7BxOIwGrTawoHMUVFKoY76GL2rAYPv1Yg+twR3n+m6kyeis2GPOfVbspc3P9PiQo01oslzPvUlu954jJFFEeevY+TlILDtkjIdozcZfMOaxhBfsv7M9DlK3kpdtepu7peyxyJUwdKTo5g1zDaS8ssP3WCfR+/WQi5OVbvEasxK2BH laurent_linaro@laurent-XPS-13-9360
diff --git a/tcwg-base/home-data/laurent.alfonsi/.ssh/config b/tcwg-base/home-data/laurent.alfonsi/.ssh/config
new file mode 120000
index 00000000..5f9d8251
--- /dev/null
+++ b/tcwg-base/home-data/laurent.alfonsi/.ssh/config
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/config \ No newline at end of file
diff --git a/tcwg-base/home-data/laurent.alfonsi/.ssh/config.d b/tcwg-base/home-data/laurent.alfonsi/.ssh/config.d
new file mode 120000
index 00000000..1af9bec1
--- /dev/null
+++ b/tcwg-base/home-data/laurent.alfonsi/.ssh/config.d
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/config.d \ No newline at end of file
diff --git a/tcwg-base/home-data/laurent.alfonsi/.ssh/known_hosts b/tcwg-base/home-data/laurent.alfonsi/.ssh/known_hosts
new file mode 120000
index 00000000..936136a2
--- /dev/null
+++ b/tcwg-base/home-data/laurent.alfonsi/.ssh/known_hosts
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/known_hosts \ No newline at end of file
diff --git a/tcwg-base/home-data/laurent.alfonsi/.ssh/ssh-tcwglab-nc.sh b/tcwg-base/home-data/laurent.alfonsi/.ssh/ssh-tcwglab-nc.sh
new file mode 120000
index 00000000..6eddeb50
--- /dev/null
+++ b/tcwg-base/home-data/laurent.alfonsi/.ssh/ssh-tcwglab-nc.sh
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/ssh-tcwglab-nc.sh \ No newline at end of file
diff --git a/tcwg-base/home-data/leandro.lupori/.ssh/authorized_keys b/tcwg-base/home-data/leandro.lupori/.ssh/authorized_keys
new file mode 100644
index 00000000..99b2fab1
--- /dev/null
+++ b/tcwg-base/home-data/leandro.lupori/.ssh/authorized_keys
@@ -0,0 +1,2 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDN/YYE01YIh30u8xQBfGGDU178Fncq+Qfb6WeGENqLrm5C+/mR8sPHFHHEWCbpKBZajB5aorB9YRDv2TLTD1JGcrpoo+iEYXOK2pSM/l8dVZqDhEWzJQ5DlQ07L+7kdOTK0Y2i/yPDpBY2BNflmo13AW0wPK2M0qvd/cGgzNJHYnweIZ7R4yGyhHdwBv+Ax51va6YzcdmpEo4atZmdlqAIdj11ruhDb0eXVoQX/DEODmO64fUs2osS++FTsbuUUbm9nv1W50SJw8GXvWnXEqcfoJgtwxUV020GCk83/qXwiX8BLMhZ5mo2NDzbMp0tLUOfCWl49xRlJwli+KiFIkegzNK7JWuxSL+m2ICH6cWkqSphc9VxtY8hOu5n4DYwe3zmKji7PC0BlriEUEj9+BBnFI1rIlAKhO1hZWf4eIU72AS64End5MKqQh8zxF7sli6KNsWVRru3HrYngXGFYyhJjt6y9OWAQrN0714PaDKTw69nsA3eLVxfzx8EVM4DADGr8df+tJs5pPpuFi6DekSRhA5gNC12UkiwFbIekU+oJNq3IH96SMliNpSy8akRXtsPnLWd1YVxzIVpeMOe39xTCBklFwCPQx/zd1ZVRmO/PCkCNfb4Udfy4boYOobuq1caCBbJO487t99ZNhGpPF69p0Rmdi3mpqh5CM/WtpmmqQ== luporl@inspiron
+ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO+l1RUosDOyT36drUF8AOJFBZthfPtQZdiNEOAxosUP leandro.lupori@linaro.org
diff --git a/tcwg-base/home-data/leandro.lupori/.ssh/config b/tcwg-base/home-data/leandro.lupori/.ssh/config
new file mode 120000
index 00000000..5f9d8251
--- /dev/null
+++ b/tcwg-base/home-data/leandro.lupori/.ssh/config
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/config \ No newline at end of file
diff --git a/tcwg-base/home-data/leandro.lupori/.ssh/config.d b/tcwg-base/home-data/leandro.lupori/.ssh/config.d
new file mode 120000
index 00000000..1af9bec1
--- /dev/null
+++ b/tcwg-base/home-data/leandro.lupori/.ssh/config.d
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/config.d \ No newline at end of file
diff --git a/tcwg-base/home-data/leandro.lupori/.ssh/known_hosts b/tcwg-base/home-data/leandro.lupori/.ssh/known_hosts
new file mode 120000
index 00000000..936136a2
--- /dev/null
+++ b/tcwg-base/home-data/leandro.lupori/.ssh/known_hosts
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/known_hosts \ No newline at end of file
diff --git a/tcwg-base/home-data/leandro.lupori/.ssh/ssh-tcwglab-nc.sh b/tcwg-base/home-data/leandro.lupori/.ssh/ssh-tcwglab-nc.sh
new file mode 120000
index 00000000..6eddeb50
--- /dev/null
+++ b/tcwg-base/home-data/leandro.lupori/.ssh/ssh-tcwglab-nc.sh
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/ssh-tcwglab-nc.sh \ No newline at end of file
diff --git a/tcwg-base/home-data/lina.iyer/.ssh/authorized_keys b/tcwg-base/home-data/lina.iyer/.ssh/authorized_keys
new file mode 100644
index 00000000..9c0aa9da
--- /dev/null
+++ b/tcwg-base/home-data/lina.iyer/.ssh/authorized_keys
@@ -0,0 +1 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDv/5+aWNajFBOO6kLQ/2s5I3/O8dcf1UpsqwoDXgUp1I+HUw0RutM3uCYIu28gAnX8qYfOg38kEO188zJ+dSi6n6q7feXpkRDWFcB4iFARik+jMXL7tWG2ndB8+hpFwE0HfnHmYm/IhAKFeLW3vjoHBblrQzYupG6h/ri1hfVXhVqQe/W0T0lIs3XmgB38S0DyuHgmNEC4EeIH3H6fMAQPittAe9pxr4hvUd7vtPFOUVgijbbT/DrnQOUtialUiAdQzLNSpDI/4qwF/xNg4sLb39+l1Rbsorvn3QwGS4sCCB2heKNiNZB5pSDcbG55ftGpEKRwHV7tA3OK4baobPdysyXavvAhQUK+QJRMbGR+rtHn3JHcbleM2zl6LkbbMU93YtJksPGq+hkezDIPMUaU9S3LUuKCUFqW89ANlLhFCETB2e/Ci826ddn5JnBIxZXenrPn64rs5/+gQgSKpIBSnJStrdD+Y9Wr6GybH0dUy+COQCHEYLin64lb4FIkx4c= ilina@primo.lan
diff --git a/tcwg-base/home-data/lina.iyer/.ssh/config b/tcwg-base/home-data/lina.iyer/.ssh/config
new file mode 120000
index 00000000..5f9d8251
--- /dev/null
+++ b/tcwg-base/home-data/lina.iyer/.ssh/config
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/config \ No newline at end of file
diff --git a/tcwg-base/home-data/lina.iyer/.ssh/config.d b/tcwg-base/home-data/lina.iyer/.ssh/config.d
new file mode 120000
index 00000000..1af9bec1
--- /dev/null
+++ b/tcwg-base/home-data/lina.iyer/.ssh/config.d
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/config.d \ No newline at end of file
diff --git a/tcwg-base/home-data/lina.iyer/.ssh/known_hosts b/tcwg-base/home-data/lina.iyer/.ssh/known_hosts
new file mode 120000
index 00000000..936136a2
--- /dev/null
+++ b/tcwg-base/home-data/lina.iyer/.ssh/known_hosts
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/known_hosts \ No newline at end of file
diff --git a/tcwg-base/home-data/lina.iyer/.ssh/ssh-tcwglab-nc-sh b/tcwg-base/home-data/lina.iyer/.ssh/ssh-tcwglab-nc-sh
new file mode 120000
index 00000000..6eddeb50
--- /dev/null
+++ b/tcwg-base/home-data/lina.iyer/.ssh/ssh-tcwglab-nc-sh
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/ssh-tcwglab-nc.sh \ No newline at end of file
diff --git a/tcwg-base/home-data/maxim.kuvyrkov/.bashrc b/tcwg-base/home-data/maxim.kuvyrkov/.bashrc
new file mode 100644
index 00000000..67102dc6
--- /dev/null
+++ b/tcwg-base/home-data/maxim.kuvyrkov/.bashrc
@@ -0,0 +1,122 @@
+# ~/.bashrc: executed by bash(1) for non-login shells.
+# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
+# for examples
+
+# If not running interactively, don't do anything
+case $- in
+ *i*) ;;
+ *) return;;
+esac
+
+# don't put duplicate lines or lines starting with space in the history.
+# See bash(1) for more options
+HISTCONTROL=ignoreboth
+
+# append to the history file, don't overwrite it
+shopt -s histappend
+
+# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
+HISTSIZE=1000
+HISTFILESIZE=2000
+
+# check the window size after each command and, if necessary,
+# update the values of LINES and COLUMNS.
+shopt -s checkwinsize
+
+# If set, the pattern "**" used in a pathname expansion context will
+# match all files and zero or more directories and subdirectories.
+#shopt -s globstar
+
+# make less more friendly for non-text input files, see lesspipe(1)
+[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
+
+# set variable identifying the chroot you work in (used in the prompt below)
+if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
+ debian_chroot=$(cat /etc/debian_chroot)
+fi
+
+# set a fancy prompt (non-color, unless we know we "want" color)
+case "$TERM" in
+ xterm-color) color_prompt=yes;;
+esac
+
+# uncomment for a colored prompt, if the terminal has the capability; turned
+# off by default to not distract the user: the focus in a terminal window
+# should be on the output of commands, not on the prompt
+#force_color_prompt=yes
+
+if [ -n "$force_color_prompt" ]; then
+ if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
+ # We have color support; assume it's compliant with Ecma-48
+ # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
+ # a case would tend to support setf rather than setaf.)
+ color_prompt=yes
+ else
+ color_prompt=
+ fi
+fi
+
+if [ "$color_prompt" = yes ]; then
+ PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
+else
+ PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
+fi
+unset color_prompt force_color_prompt
+
+# If this is an xterm set the title to user@host:dir
+case "$TERM" in
+xterm*|rxvt*)
+ PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
+ ;;
+*)
+ ;;
+esac
+
+# enable color support of ls and also add handy aliases
+if [ -x /usr/bin/dircolors ]; then
+ test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
+ alias ls='ls --color=auto'
+ #alias dir='dir --color=auto'
+ #alias vdir='vdir --color=auto'
+
+ alias grep='grep --color=auto'
+ alias fgrep='fgrep --color=auto'
+ alias egrep='egrep --color=auto'
+fi
+
+# colored GCC warnings and errors
+#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
+
+# some more ls aliases
+alias ll='ls -alF'
+alias la='ls -A'
+alias l='ls -CF'
+
+# Add an "alert" alias for long running commands. Use like so:
+# sleep 10; alert
+alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
+
+# Alias definitions.
+# You may want to put all your additions into a separate file like
+# ~/.bash_aliases, instead of adding them here directly.
+# See /usr/share/doc/bash-doc/examples in the bash-doc package.
+
+if [ -f ~/.bash_aliases ]; then
+ . ~/.bash_aliases
+fi
+
+# enable programmable completion features (you don't need to enable
+# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
+# sources /etc/bash.bashrc).
+if ! shopt -oq posix; then
+ if [ -f /usr/share/bash-completion/bash_completion ]; then
+ . /usr/share/bash-completion/bash_completion
+ elif [ -f /etc/bash_completion ]; then
+ . /etc/bash_completion
+ fi
+fi
+
+export EDITOR=emacs
+export SHELLCHECK_OPTS='-S warning'
+
+PS1="\h:\W\$ "
diff --git a/tcwg-base/home-data/maxim.kuvyrkov/.emacs b/tcwg-base/home-data/maxim.kuvyrkov/.emacs
new file mode 100644
index 00000000..928984d1
--- /dev/null
+++ b/tcwg-base/home-data/maxim.kuvyrkov/.emacs
@@ -0,0 +1,110 @@
+;; .emacs
+
+;;; uncomment this line to disable loading of "default.el" at startup
+;; (setq inhibit-default-init t)
+
+;; turn on font-lock mode
+(when (fboundp 'global-font-lock-mode)
+ (global-font-lock-mode t))
+
+;; enable visual feedback on selections
+(setq transient-mark-mode t)
+
+;; default to better frame titles
+(setq frame-title-format
+ (concat "%b - " (system-name)))
+
+;; default to unified diffs
+(setq diff-switches "-u")
+
+;; always end a file with a newline
+;(setq require-final-newline 'query)
+
+(global-set-key [f3] `auto-revert-mode)
+(global-set-key [f4] `auto-revert-tail-mode)
+(global-set-key [f5] 'goto-line)
+(global-set-key [f6] 'next-multiframe-window)
+(global-set-key "\M-p" `grep-find)
+(global-set-key "\M-g" 'goto-line)
+(custom-set-variables
+ ;; custom-set-variables was added by Custom.
+ ;; If you edit it by hand, you could mess it up, so be careful.
+ ;; Your init file should contain only one such instance.
+ ;; If there is more than one, they won't work right.
+ '(auto-compression-mode t nil (jka-compr))
+ '(blink-cursor-mode nil)
+ '(case-fold-search t)
+ '(current-language-environment "UTF-8")
+ '(default-frame-alist (quote ((width . 80) (height . 70))))
+ '(default-input-method "rfc1345")
+ '(global-font-lock-mode t nil (font-lock))
+ '(inhibit-startup-screen t)
+ '(initial-frame-alist (quote ((width . 80) (height . 70))))
+ '(show-paren-mode t nil (paren))
+ '(tool-bar-mode nil)
+ '(menu-bar-mode nil))
+
+(defun my-java-mode-hook ()
+ (setq c-basic-offset 4)
+ (setq tab-width 4))
+(add-hook 'java-mode-hook 'my-java-mode-hook)
+(add-hook 'c-mode-hook (which-func-mode))
+
+(setq-default header-line-format '(which-func-mode which-func-format))
+
+(add-to-list 'load-path "~/share/emacs/site-lisp")
+;(require 'git)
+;(require 'git-blame)
+
+(defun c-lineup-arglist-tabs-only (ignored)
+ "Line up argument lists by tabs, not spaces"
+ (let* ((anchor (c-langelem-pos c-syntactic-element))
+ (column (c-langelem-2nd-pos c-syntactic-element))
+ (offset (- (1+ column) anchor))
+ (steps (floor offset c-basic-offset)))
+ (* (max steps 1)
+ c-basic-offset)))
+
+(add-hook 'c-mode-common-hook
+ (lambda ()
+ ;; Add kernel style
+ (c-add-style
+ "linux-tabs-only"
+ '("linux" (c-offsets-alist
+ (arglist-cont-nonempty
+ c-lineup-gcc-asm-reg
+ c-lineup-arglist-tabs-only))))))
+
+(add-hook 'c-mode-hook
+ (lambda ()
+ (let ((filename (buffer-file-name)))
+ ;; Enable kernel mode for the appropriate files
+ (when (and filename
+ (string-match (expand-file-name "/scratch/maxim/cf/src/linux-2.6.git")
+ filename))
+ (setq indent-tabs-mode t)
+ (c-set-style "linux-tabs-only")))))
+
+(normal-erase-is-backspace-mode 1)
+(custom-set-faces
+ ;; custom-set-faces was added by Custom.
+ ;; If you edit it by hand, you could mess it up, so be careful.
+ ;; Your init file should contain only one such instance.
+ ;; If there is more than one, they won't work right.
+ '(default ((t (:inherit nil :stipple nil :background "white" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :height 90 :width normal :foundry "unknown" :family "DejaVu Sans Mono")))))
+;;(custom-set-faces
+ ;; custom-set-faces was added by Custom.
+ ;; If you edit it by hand, you could mess it up, so be careful.
+ ;; Your init file should contain only one such instance.
+ ;; If there is more than one, they won't work right.
+;; '(default ((t (:inherit nil :stipple nil :background "#ffffff" :foreground "#1a1a1a" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :height 116 :width normal :foundry "bitstream" :family "Courier 10 Pitch")))))
+
+(setq grep-find-command "find . -type f -a ! '(' -name 'ChangeLog*' ')' -print0 | \"xargs\" -0 -e grep -nH -e ")
+
+(require 'yaml-mode)
+(add-to-list 'auto-mode-alist '("\\.yaml\\'" . yaml-mode))
+(add-hook 'yaml-mode-hook
+ '(lambda ()
+ (define-key yaml-mode-map "\C-m" 'newline-and-indent)))
+
+(add-hook 'after-init-hook #'global-flycheck-mode)
diff --git a/tcwg-base/home-data/maxim.kuvyrkov/.gitconfig b/tcwg-base/home-data/maxim.kuvyrkov/.gitconfig
new file mode 100644
index 00000000..49fec6a5
--- /dev/null
+++ b/tcwg-base/home-data/maxim.kuvyrkov/.gitconfig
@@ -0,0 +1,23 @@
+[user]
+ name = Maxim Kuvyrkov
+ email = maxim.kuvyrkov@linaro.org
+[core]
+ editor = emacs
+[alias]
+ co = checkout
+ br = branch
+ st = status
+ ci = commit
+[color]
+ diff = auto
+ status = auto
+ branch = auto
+[gui]
+ fontui = -family \"DejaVu Sans\" -size 9 -weight normal -slant roman -underline 0 -overstrike 0
+[sendemail]
+ smtpencryption = tls
+ smtpserver = smtp.gmail.com
+ smtpuser = maxim.kuvyrkov@linaro.org
+ smtpserverport = 587
+[push]
+ default = simple
diff --git a/tcwg-base/home-data/maxim.kuvyrkov/.profile b/tcwg-base/home-data/maxim.kuvyrkov/.profile
new file mode 100644
index 00000000..c9db4591
--- /dev/null
+++ b/tcwg-base/home-data/maxim.kuvyrkov/.profile
@@ -0,0 +1,22 @@
+# ~/.profile: executed by the command interpreter for login shells.
+# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
+# exists.
+# see /usr/share/doc/bash/examples/startup-files for examples.
+# the files are located in the bash-doc package.
+
+# the default umask is set in /etc/profile; for setting the umask
+# for ssh logins, install and configure the libpam-umask package.
+#umask 022
+
+# if running bash
+if [ -n "$BASH_VERSION" ]; then
+ # include .bashrc if it exists
+ if [ -f "$HOME/.bashrc" ]; then
+ . "$HOME/.bashrc"
+ fi
+fi
+
+# set PATH so it includes user's private bin if it exists
+if [ -d "$HOME/bin" ] ; then
+ PATH="$HOME/bin:$PATH"
+fi
diff --git a/tcwg-base/home-data/maxim.kuvyrkov/.ssh/authorized_keys b/tcwg-base/home-data/maxim.kuvyrkov/.ssh/authorized_keys
new file mode 100644
index 00000000..21b84647
--- /dev/null
+++ b/tcwg-base/home-data/maxim.kuvyrkov/.ssh/authorized_keys
@@ -0,0 +1 @@
+ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBFNV3JYhc3eDiT4D5mPbVM6tDX4PL2lEgdUx2T64wDf maxim.kuvyrkov@linaro.org-20221125
diff --git a/tcwg-base/home-data/maxim.kuvyrkov/.ssh/config b/tcwg-base/home-data/maxim.kuvyrkov/.ssh/config
new file mode 120000
index 00000000..5f9d8251
--- /dev/null
+++ b/tcwg-base/home-data/maxim.kuvyrkov/.ssh/config
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/config \ No newline at end of file
diff --git a/tcwg-base/home-data/maxim.kuvyrkov/.ssh/config.d b/tcwg-base/home-data/maxim.kuvyrkov/.ssh/config.d
new file mode 120000
index 00000000..1af9bec1
--- /dev/null
+++ b/tcwg-base/home-data/maxim.kuvyrkov/.ssh/config.d
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/config.d \ No newline at end of file
diff --git a/tcwg-base/home-data/maxim.kuvyrkov/.ssh/known_hosts b/tcwg-base/home-data/maxim.kuvyrkov/.ssh/known_hosts
new file mode 120000
index 00000000..936136a2
--- /dev/null
+++ b/tcwg-base/home-data/maxim.kuvyrkov/.ssh/known_hosts
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/known_hosts \ No newline at end of file
diff --git a/tcwg-base/home-data/maxim.kuvyrkov/.ssh/ssh-tcwglab-nc.sh b/tcwg-base/home-data/maxim.kuvyrkov/.ssh/ssh-tcwglab-nc.sh
new file mode 120000
index 00000000..6eddeb50
--- /dev/null
+++ b/tcwg-base/home-data/maxim.kuvyrkov/.ssh/ssh-tcwglab-nc.sh
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/ssh-tcwglab-nc.sh \ No newline at end of file
diff --git a/tcwg-base/home-data/maxim.kuvyrkov/share/emacs/site-lisp/yaml-mode.el b/tcwg-base/home-data/maxim.kuvyrkov/share/emacs/site-lisp/yaml-mode.el
new file mode 100644
index 00000000..9274a5bb
--- /dev/null
+++ b/tcwg-base/home-data/maxim.kuvyrkov/share/emacs/site-lisp/yaml-mode.el
@@ -0,0 +1,439 @@
+;;; yaml-mode.el --- Major mode for editing YAML files
+
+;; Copyright (C) 2010-2014 Yoshiki Kurihara
+
+;; Author: Yoshiki Kurihara <clouder@gmail.com>
+;; Marshall T. Vandegrift <llasram@gmail.com>
+;; Maintainer: Vasilij Schneidermann <v.schneidermann@gmail.com>
+;; Package-Requires: ((emacs "24.1"))
+;; Keywords: data yaml
+;; Version: 0.0.12
+
+;; This file is not part of Emacs
+
+;; This file is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; This file is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License along
+;; with this program; if not, write to the Free Software Foundation, Inc.,
+;; 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+;;; Commentary:
+
+;; This is a major mode for editing files in the YAML data
+;; serialization format. It was initially developed by Yoshiki
+;; Kurihara and many features were added by Marshall Vandegrift. As
+;; YAML and Python share the fact that indentation determines
+;; structure, this mode provides indentation and indentation command
+;; behavior very similar to that of python-mode.
+
+;;; Installation:
+
+;; To install, just drop this file into a directory in your
+;; `load-path' and (optionally) byte-compile it. To automatically
+;; handle files ending in '.yml', add something like:
+;;
+;; (require 'yaml-mode)
+;; (add-to-list 'auto-mode-alist '("\\.yml\\'" . yaml-mode))
+;;
+;; to your .emacs file.
+;;
+;; Unlike python-mode, this mode follows the Emacs convention of not
+;; binding the ENTER key to `newline-and-indent'. To get this
+;; behavior, add the key definition to `yaml-mode-hook':
+;;
+;; (add-hook 'yaml-mode-hook
+;; '(lambda ()
+;; (define-key yaml-mode-map "\C-m" 'newline-and-indent)))
+
+;;; Known Bugs:
+
+;; YAML is easy to write but complex to parse, and this mode doesn't
+;; even really try. Indentation and highlighting will break on
+;; abnormally complicated structures.
+
+;;; Code:
+
+
+;; User definable variables
+
+;;;###autoload
+(defgroup yaml nil
+ "Support for the YAML serialization format"
+ :group 'languages
+ :prefix "yaml-")
+
+(defcustom yaml-mode-hook nil
+ "*Hook run by `yaml-mode'."
+ :type 'hook
+ :group 'yaml)
+
+(defcustom yaml-indent-offset 2
+ "*Amount of offset per level of indentation."
+ :type 'integer
+ :safe 'natnump
+ :group 'yaml)
+
+(defcustom yaml-backspace-function 'backward-delete-char-untabify
+ "*Function called by `yaml-electric-backspace' when deleting backwards.
+It will receive one argument, the numeric prefix value."
+ :type 'function
+ :group 'yaml)
+
+(defcustom yaml-block-literal-search-lines 100
+ "*Maximum number of lines to search for start of block literals."
+ :type 'integer
+ :group 'yaml)
+
+(defcustom yaml-block-literal-electric-alist
+ '((?| . "") (?> . "-"))
+ "*Characters for which to provide electric behavior.
+The association list key should be a key code and the associated value
+should be a string containing additional characters to insert when
+that key is pressed to begin a block literal."
+ :type 'alist
+ :group 'yaml)
+
+(defface yaml-tab-face
+ '((((class color)) (:background "red" :foreground "red" :bold t))
+ (t (:reverse-video t)))
+ "Face to use for highlighting tabs in YAML files."
+ :group 'faces
+ :group 'yaml)
+
+(defcustom yaml-imenu-generic-expression
+ '((nil "^\\(:?[a-zA-Z_-]+\\):" 1))
+ "The imenu regex to parse an outline of the yaml file."
+ :type 'string
+ :group 'yaml)
+
+
+;; Constants
+
+(defconst yaml-mode-version "0.0.12" "Version of `yaml-mode'.")
+
+(defconst yaml-blank-line-re "^ *$"
+ "Regexp matching a line containing only (valid) whitespace.")
+
+(defconst yaml-directive-re "^\\(?:--- \\)? *%\\(\\w+\\)"
+ "Regexp matching a line contatining a YAML directive.")
+
+(defconst yaml-document-delimiter-re "^ *\\(?:---\\|[.][.][.]\\)"
+ "Rexexp matching a YAML document delimiter line.")
+
+(defconst yaml-node-anchor-alias-re "[&*][a-zA-Z0-9_-]+"
+ "Regexp matching a YAML node anchor or alias.")
+
+(defconst yaml-tag-re "!!?[^ \n]+"
+ "Rexexp matching a YAML tag.")
+
+(defconst yaml-bare-scalar-re
+ "\\(?:[^-:,#!\n{\\[ ]\\|[^#!\n{\\[ ]\\S-\\)[^#\n]*?"
+ "Rexexp matching a YAML bare scalar.")
+
+(defconst yaml-hash-key-re
+ (concat "\\(?:^\\(?:--- \\)?\\|{\\|\\(?:[-,] +\\)+\\) *"
+ "\\(?:" yaml-tag-re " +\\)?"
+ "\\(" yaml-bare-scalar-re "\\) *:"
+ "\\(?: +\\|$\\)")
+ "Regexp matching a single YAML hash key.")
+
+(defconst yaml-scalar-context-re
+ (concat "\\(?:^\\(?:--- \\)?\\|{\\|\\(?: *[-,] +\\)+\\) *"
+ "\\(?:" yaml-bare-scalar-re " *: \\)?")
+ "Regexp indicating the begininng of a scalar context.")
+
+(defconst yaml-nested-map-re
+ (concat ".*: *\\(?:&.*\\|{ *\\|" yaml-tag-re " *\\)?$")
+ "Regexp matching a line beginning a YAML nested structure.")
+
+(defconst yaml-block-literal-base-re " *[>|][-+0-9]* *\\(?:\n\\|\\'\\)"
+ "Regexp matching the substring start of a block literal.")
+
+(defconst yaml-block-literal-re
+ (concat yaml-scalar-context-re
+ "\\(?:" yaml-tag-re "\\)?"
+ yaml-block-literal-base-re)
+ "Regexp matching a line beginning a YAML block literal.")
+
+(defconst yaml-nested-sequence-re
+ (concat "^\\(?:\\(?: *- +\\)+\\|\\(:? *-$\\)\\)"
+ "\\(?:" yaml-bare-scalar-re " *:\\(?: +.*\\)?\\)?$")
+ "Regexp matching a line containing one or more nested YAML sequences.")
+
+(defconst yaml-constant-scalars-re
+ (concat "\\(?:^\\|\\(?::\\|-\\|,\\|{\\|\\[\\) +\\) *"
+ (regexp-opt
+ '("~" "null" "Null" "NULL"
+ ".nan" ".NaN" ".NAN"
+ ".inf" ".Inf" ".INF"
+ "-.inf" "-.Inf" "-.INF"
+ "y" "Y" "yes" "Yes" "YES" "n" "N" "no" "No" "NO"
+ "true" "True" "TRUE" "false" "False" "FALSE"
+ "on" "On" "ON" "off" "Off" "OFF") t)
+ " *$")
+ "Regexp matching certain scalar constants in scalar context.")
+
+
+;; Mode setup
+
+(defvar yaml-mode-map
+ (let ((map (make-sparse-keymap)))
+ (define-key map "|" 'yaml-electric-bar-and-angle)
+ (define-key map ">" 'yaml-electric-bar-and-angle)
+ (define-key map "-" 'yaml-electric-dash-and-dot)
+ (define-key map "." 'yaml-electric-dash-and-dot)
+ (define-key map [backspace] 'yaml-electric-backspace)
+ map)
+ "Keymap used in `yaml-mode' buffers.")
+
+(defvar yaml-mode-syntax-table
+ (let ((syntax-table (make-syntax-table)))
+ (modify-syntax-entry ?\' "\"" syntax-table)
+ (modify-syntax-entry ?\" "\"" syntax-table)
+ (modify-syntax-entry ?# "<" syntax-table)
+ (modify-syntax-entry ?\n ">" syntax-table)
+ (modify-syntax-entry ?\\ "\\" syntax-table)
+ (modify-syntax-entry ?- "w" syntax-table)
+ (modify-syntax-entry ?_ "_" syntax-table)
+ (modify-syntax-entry ?\( "." syntax-table)
+ (modify-syntax-entry ?\) "." syntax-table)
+ (modify-syntax-entry ?\{ "(}" syntax-table)
+ (modify-syntax-entry ?\} "){" syntax-table)
+ (modify-syntax-entry ?\[ "(]" syntax-table)
+ (modify-syntax-entry ?\] ")[" syntax-table)
+ syntax-table)
+ "Syntax table in use in `yaml-mode' buffers.")
+
+;;;###autoload
+(define-derived-mode yaml-mode text-mode "YAML"
+ "Simple mode to edit YAML.
+
+\\{yaml-mode-map}"
+ :syntax-table yaml-mode-syntax-table
+ (set (make-local-variable 'comment-start) "# ")
+ (set (make-local-variable 'comment-start-skip) "#+ *")
+ (set (make-local-variable 'indent-line-function) 'yaml-indent-line)
+ (set (make-local-variable 'indent-tabs-mode) nil)
+ (set (make-local-variable 'fill-paragraph-function) 'yaml-fill-paragraph)
+
+ (set (make-local-variable 'syntax-propertize-function)
+ 'yaml-mode-syntax-propertize-function)
+ (setq font-lock-defaults '(yaml-font-lock-keywords)))
+
+
+;; Font-lock support
+
+(defvar yaml-font-lock-keywords
+ `((,yaml-constant-scalars-re . (1 font-lock-constant-face))
+ (,yaml-tag-re . (0 font-lock-type-face))
+ (,yaml-node-anchor-alias-re . (0 font-lock-function-name-face))
+ (,yaml-hash-key-re . (1 font-lock-variable-name-face))
+ (,yaml-document-delimiter-re . (0 font-lock-comment-face))
+ (,yaml-directive-re . (1 font-lock-builtin-face))
+ (yaml-font-lock-block-literals 0 font-lock-string-face)
+ ("^[\t]+" 0 'yaml-tab-face t))
+ "Additional expressions to highlight in YAML mode.")
+
+(defun yaml-mode-syntax-propertize-function (beg end)
+ "Unhighlight foo#bar tokens between BEG and END."
+ (save-excursion
+ (goto-char beg)
+ (while (search-forward "#" end t)
+ (save-excursion
+ (forward-char -1)
+ ;; both ^# and [ \t]# are comments
+ (when (and (not (bolp))
+ (not (memq (preceding-char) '(?\s ?\t))))
+ (put-text-property (point) (1+ (point))
+ 'syntax-table (string-to-syntax "_")))))))
+
+(defun yaml-font-lock-block-literals (bound)
+ "Find lines within block literals.
+Find the next line of the first (if any) block literal after point and
+prior to BOUND. Returns the beginning and end of the block literal
+line in the match data, as consumed by `font-lock-keywords' matcher
+functions. The function begins by searching backwards to determine
+whether or not the current line is within a block literal. This could
+be time-consuming in large buffers, so the number of lines searched is
+artificially limitted to the value of
+`yaml-block-literal-search-lines'."
+ (if (eolp) (goto-char (1+ (point))))
+ (unless (or (eobp) (>= (point) bound))
+ (let ((begin (point))
+ (end (min (1+ (point-at-eol)) bound)))
+ (goto-char (point-at-bol))
+ (while (and (looking-at yaml-blank-line-re) (not (bobp)))
+ (forward-line -1))
+ (let ((nlines yaml-block-literal-search-lines)
+ (min-level (current-indentation)))
+ (forward-line -1)
+ (while (and (/= nlines 0)
+ (/= min-level 0)
+ (not (looking-at yaml-block-literal-re))
+ (not (bobp)))
+ (set 'nlines (1- nlines))
+ (unless (looking-at yaml-blank-line-re)
+ (set 'min-level (min min-level (current-indentation))))
+ (forward-line -1))
+ (cond
+ ((and (< (current-indentation) min-level)
+ (looking-at yaml-block-literal-re))
+ (goto-char end) (set-match-data (list begin end)) t)
+ ((progn
+ (goto-char begin)
+ (re-search-forward (concat yaml-block-literal-re
+ " *\\(.*\\)\n")
+ bound t))
+ (set-match-data (nthcdr 2 (match-data))) t))))))
+
+
+;; Indentation and electric keys
+
+(defun yaml-compute-indentation ()
+ "Calculate the maximum sensible indentation for the current line."
+ (save-excursion
+ (beginning-of-line)
+ (if (looking-at yaml-document-delimiter-re) 0
+ (forward-line -1)
+ (while (and (looking-at yaml-blank-line-re)
+ (> (point) (point-min)))
+ (forward-line -1))
+ (+ (current-indentation)
+ (if (looking-at yaml-nested-map-re) yaml-indent-offset 0)
+ (if (looking-at yaml-nested-sequence-re) yaml-indent-offset 0)
+ (if (looking-at yaml-block-literal-re) yaml-indent-offset 0)))))
+
+(defun yaml-indent-line ()
+ "Indent the current line.
+The first time this command is used, the line will be indented to the
+maximum sensible indentation. Each immediately subsequent usage will
+back-dent the line by `yaml-indent-offset' spaces. On reaching column
+0, it will cycle back to the maximum sensible indentation."
+ (interactive "*")
+ (let ((ci (current-indentation))
+ (cc (current-column))
+ (need (yaml-compute-indentation)))
+ (save-excursion
+ (beginning-of-line)
+ (delete-horizontal-space)
+ (if (and (equal last-command this-command) (/= ci 0))
+ (indent-to (* (/ (- ci 1) yaml-indent-offset) yaml-indent-offset))
+ (indent-to need)))
+ (if (< (current-column) (current-indentation))
+ (forward-to-indentation 0))))
+
+(defun yaml-electric-backspace (arg)
+ "Delete characters or back-dent the current line.
+If invoked following only whitespace on a line, will back-dent to the
+immediately previous multiple of `yaml-indent-offset' spaces."
+ (interactive "*p")
+ (if (or (/= (current-indentation) (current-column)) (bolp))
+ (funcall yaml-backspace-function arg)
+ (let ((ci (current-column)))
+ (beginning-of-line)
+ (delete-horizontal-space)
+ (indent-to (* (/ (- ci (* arg yaml-indent-offset))
+ yaml-indent-offset)
+ yaml-indent-offset)))))
+
+(defun yaml-electric-bar-and-angle (arg)
+ "Insert the bound key and possibly begin a block literal.
+Inserts the bound key. If inserting the bound key causes the current
+line to match the initial line of a block literal, then inserts the
+matching string from `yaml-block-literal-electric-alist', a newline,
+and indents appropriately."
+ (interactive "*P")
+ (self-insert-command (prefix-numeric-value arg))
+ (let ((extra-chars
+ (assoc last-command-event
+ yaml-block-literal-electric-alist)))
+ (cond
+ ((and extra-chars (not arg) (eolp)
+ (save-excursion
+ (beginning-of-line)
+ (looking-at yaml-block-literal-re)))
+ (insert (cdr extra-chars))
+ (newline-and-indent)))))
+
+(defun yaml-electric-dash-and-dot (arg)
+ "Insert the bound key and possibly de-dent line.
+Inserts the bound key. If inserting the bound key causes the current
+line to match a document delimiter, de-dent the line to the left
+margin."
+ (interactive "*P")
+ (self-insert-command (prefix-numeric-value arg))
+ (save-excursion
+ (beginning-of-line)
+ (if (and (not arg) (looking-at yaml-document-delimiter-re))
+ (delete-horizontal-space))))
+
+(defun yaml-narrow-to-block-literal ()
+ "Narrow the buffer to block literal if the point is in it,
+otherwise do nothing."
+ (interactive)
+ (save-excursion
+ (goto-char (point-at-bol))
+ (while (and (looking-at-p yaml-blank-line-re) (not (bobp)))
+ (forward-line -1))
+ (let ((nlines yaml-block-literal-search-lines)
+ (min-level (current-indentation))
+ beg)
+ (forward-line -1)
+ (while (and (/= nlines 0)
+ (/= min-level 0)
+ (not (looking-at-p yaml-block-literal-re))
+ (not (bobp)))
+ (set 'nlines (1- nlines))
+ (unless (looking-at-p yaml-blank-line-re)
+ (set 'min-level (min min-level (current-indentation))))
+ (forward-line -1))
+ (when (and (< (current-indentation) min-level)
+ (looking-at-p yaml-block-literal-re))
+ (set 'min-level (current-indentation))
+ (forward-line)
+ (setq beg (point))
+ (while (and (not (eobp))
+ (or (looking-at-p yaml-blank-line-re)
+ (> (current-indentation) min-level)))
+ (forward-line))
+ (narrow-to-region beg (point))))))
+
+(defun yaml-fill-paragraph (&optional justify region)
+ "Fill paragraph.
+This behaves as `fill-paragraph' except that filling does not
+cross boundaries of block literals."
+ (interactive "*P")
+ (save-restriction
+ (yaml-narrow-to-block-literal)
+ (let ((fill-paragraph-function nil))
+ (fill-paragraph justify region))))
+
+(defun yaml-set-imenu-generic-expression ()
+ (make-local-variable 'imenu-generic-expression)
+ (make-local-variable 'imenu-create-index-function)
+ (setq imenu-create-index-function 'imenu-default-create-index-function)
+ (setq imenu-generic-expression yaml-imenu-generic-expression))
+
+(add-hook 'yaml-mode-hook 'yaml-set-imenu-generic-expression)
+
+
+(defun yaml-mode-version ()
+ "Diplay version of `yaml-mode'."
+ (interactive)
+ (message "yaml-mode %s" yaml-mode-version)
+ yaml-mode-version)
+
+;;;###autoload
+(add-to-list 'auto-mode-alist '("\\.e?ya?ml\\'" . yaml-mode))
+
+(provide 'yaml-mode)
+
+;;; yaml-mode.el ends here
diff --git a/tcwg-base/home-data/maxim.kuvyrkov/share/emacs/site-lisp/yaml-mode.elc b/tcwg-base/home-data/maxim.kuvyrkov/share/emacs/site-lisp/yaml-mode.elc
new file mode 100644
index 00000000..c80c6bfd
--- /dev/null
+++ b/tcwg-base/home-data/maxim.kuvyrkov/share/emacs/site-lisp/yaml-mode.elc
Binary files differ
diff --git a/tcwg-base/home-data/omair.javaid/.ssh/authorized_keys b/tcwg-base/home-data/omair.javaid/.ssh/authorized_keys
new file mode 100644
index 00000000..cec2efa9
--- /dev/null
+++ b/tcwg-base/home-data/omair.javaid/.ssh/authorized_keys
@@ -0,0 +1,2 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCoBhUsmuHUwZtRdaZ2Fm8IOTlrCKdz/wxoczhhWufb3Oy9/pNftVcWlrvn3glg+PfCpVFeXvp/7jbFyeJTbrxdli+N0NyZCH5CXHiYTsIHnJngveoxvHe9kGCbqEDtGk+xXsCglyNhGz255sO99e+z0yBGRpZDC1nk4fileaAqm1SoaUbd64swijGFLOyd6KmQnNH4AmQRSBzZJe4vJl2P3kLJ/I5aSZZWWqoeX5bY3LaeNoTGBIfCLwIT4whzkV/V46SpIu0UyS4NSRxXX4cmh3J4cPnPD0zbbWKPCrz3PCBkoo0tnip1Ytw3S7UDCglnCBY+cLKu2AFORTiEzflp9oe3Q/UQQBcxLGibhH+06yw3EZgxejamG4wQ363xiFrRbJDqzdZJAW+WlmCkl+uLD6DaU9gR4iA+OIl5EBlKucnnzPEIybMPVQJ3YTbL+YCisxJ3Qmr8UdIrbtwGsYNMVC1OuM0dP3VznDJ9JzD94/7H3uLI61zSqJdk/B6S0NnsGjtJ++aMyVLjb9swWWBeK7pWZSGmVE+sQYLkf9aitzjJaDaakWoj1pRKSEHSzgJHPq7Hibh/1rxiWxftwP6fE5wy/kfSxfV0Z54PbtrnD6SK92Rtkbfjq2J0klsyo4sWGI5ta9VvqF19PiFfClKgbmef6VucLkvxhQD885qcsw== omair.javaid@linaro.org
+ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII68Ck8ycVNMNkSf7OQNaDB6637LMgMkDMlioWWZlPUv omair.javaid@linaro.org
diff --git a/tcwg-base/home-data/passwd b/tcwg-base/home-data/passwd
new file mode 100644
index 00000000..176454b7
--- /dev/null
+++ b/tcwg-base/home-data/passwd
@@ -0,0 +1,21 @@
+tcwg-build:x:9003:9003:TCWG Builder::/bin/bash
+tcwg-buildslave:x:11827:9000:TCWG Buildslave::/bin/bash
+tcwg-buildbot:x:15703:9000:TCWG Buildbot::/bin/bash
+tcwg-benchmark:x:12326:9000:TCWG Benchmark::/bin/bash
+tcwg-ci-bot:x:15849:9000:CI Bot::/bin/bash
+alex.bennee:x:10583:10000:Alex Bennée::/bin/bash
+christophe.lyon:x:15923:10000:Christophe Lyon::/bin/bash
+maxim.kuvyrkov:x:10967:10000:Maxim Kuvyrkov::/bin/bash
+richard.henderson:x:13410:10000:Richard Henderson::/bin/bash
+omair.javaid:x:10174:10000:Omair Javaid::/bin/bash
+adhemerval.zanella:x:11706:10000:Adhemerval Zanella::/bin/bash
+david.spickett:x:15194:10000:David Spickett::/bin/bash
+everton.constantino:x:15437:9002:Everton Constantino::/bin/bash
+laurent.alfonsi:x:15734:10000:Laurent Alfonsi:/home/laurent.alfonsi:/bin/bash
+thiago.bauermann:x:15744:10000:Thiago Jung Bauermann:/home/thiago.bauermann:/bin/bash
+pierrick.bouvier:x:15752:10000:Pierrick Bouvier:/home/pierrick.bouvier:/bin/bash
+anthony.roberts:x:15751:9002:Anthony Roberts:/home/anthony.roberts:/bin/bash
+antoine.moynault:x:15825:10000:Antoine Moynault:/home/antoine.moynault:/bin/bash
+carlos.seo:x:15430:10000:Carlos Eduardo Seo:/home/carlos.seo:/bin/bash
+leandro.lupori:x:15854:10000:Leandro Lupori:/home/leandro.lupori:/bin/bash
+lina.iyer:x:15978:9002:Lina Iyer::/bin/bash
diff --git a/tcwg-base/home-data/pierrick.bouvier/.ssh/authorized_keys b/tcwg-base/home-data/pierrick.bouvier/.ssh/authorized_keys
new file mode 100644
index 00000000..3ad01c01
--- /dev/null
+++ b/tcwg-base/home-data/pierrick.bouvier/.ssh/authorized_keys
@@ -0,0 +1 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDE6pIRBAIT7u96O9YviJN5R64qzbTcuhfE0Q2NnSu7awZF6OEB+p3Xb0FMomn7tJ79a2u2AkXQL7MkrxjVcre6WaUIPqqqMguWrNDM4YHKV+4AUBAiK1uJSw4An0Ct/ohyjEjDqwzywu1KFO2v5QSkmLTM1ITwLz5miyZPWW4HxQ2hK5NnhjkMClaXrEErXR2pmJAd72t2tswsPqQ4KEJSB2ZHIW7mJ3G7SMJfiiWqdll37LiEU42oTtdzJehH6G7i9vy6BfkF4MTyaf3SimZQ9lxeVc+tg94Lv0HPnNM8mkWx1oP/0GhPO7Eo2jm7PCVujB8x2sT9z79AVeS4OEgP pibouvier@linaro
diff --git a/tcwg-base/home-data/pierrick.bouvier/.ssh/config b/tcwg-base/home-data/pierrick.bouvier/.ssh/config
new file mode 120000
index 00000000..5f9d8251
--- /dev/null
+++ b/tcwg-base/home-data/pierrick.bouvier/.ssh/config
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/config \ No newline at end of file
diff --git a/tcwg-base/home-data/pierrick.bouvier/.ssh/config.d b/tcwg-base/home-data/pierrick.bouvier/.ssh/config.d
new file mode 120000
index 00000000..1af9bec1
--- /dev/null
+++ b/tcwg-base/home-data/pierrick.bouvier/.ssh/config.d
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/config.d \ No newline at end of file
diff --git a/tcwg-base/home-data/pierrick.bouvier/.ssh/known_hosts b/tcwg-base/home-data/pierrick.bouvier/.ssh/known_hosts
new file mode 120000
index 00000000..936136a2
--- /dev/null
+++ b/tcwg-base/home-data/pierrick.bouvier/.ssh/known_hosts
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/known_hosts \ No newline at end of file
diff --git a/tcwg-base/home-data/pierrick.bouvier/.ssh/ssh-tcwglab-nc-sh b/tcwg-base/home-data/pierrick.bouvier/.ssh/ssh-tcwglab-nc-sh
new file mode 120000
index 00000000..6eddeb50
--- /dev/null
+++ b/tcwg-base/home-data/pierrick.bouvier/.ssh/ssh-tcwglab-nc-sh
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/ssh-tcwglab-nc.sh \ No newline at end of file
diff --git a/tcwg-base/home-data/richard.henderson/.gitconfig b/tcwg-base/home-data/richard.henderson/.gitconfig
new file mode 100644
index 00000000..71aec4f6
--- /dev/null
+++ b/tcwg-base/home-data/richard.henderson/.gitconfig
@@ -0,0 +1,7 @@
+[user]
+ email = richard.henderson@linaro.org
+[push]
+ default = simple
+[diff]
+ renames = true
+ algorithm = histogram
diff --git a/tcwg-base/home-data/richard.henderson/.ssh/authorized_keys b/tcwg-base/home-data/richard.henderson/.ssh/authorized_keys
new file mode 100644
index 00000000..fa804c95
--- /dev/null
+++ b/tcwg-base/home-data/richard.henderson/.ssh/authorized_keys
@@ -0,0 +1 @@
+ssh-dss AAAAB3NzaC1kc3MAAACBAJEOzwysCMZtF04TdGQ54HrGqtahlznDG8oiBlX9GpISY0mRSUB1i6B2KXF3pfCvtr3VWdEO7YO6hQ7Rg+wxXns0qB7lVOoMbGvnFB7ygR439NILPuNntDfzBqAxxMP2JQusZeIPHTYDrJqRo9YxFe+Uk+PjTUVm9AvfbFMAcMz3AAAAFQCq5wr83MxfnZ+DeU9YvPyilFcpIQAAAIAFEnXMZyq4cqgO7/zXosZonRu8eGgzECQcXUVn4aBWxEolhQxtHmJWe8c0kTbY1Neo6VZ7CD5oSlFQ/d0O78oY+625f1VVGwtebSq4fThZJEm0XMuxj5V/0jhyP5TcTE1AvSHfV03ZpGDP7IbNMuVYp42lxJMs+MTjp82AUDMxGwAAAIA6pWdbmPjFwkWWtsY3VDVpZTPkD5Q3qpGMWCcpUsBT9eQh/CjmqU7ei3GaiDogwxy/Q41orfTmlZfjaSyDDyWgXCSdMF3WoekFAcsIRRRRJ5Nnek+Lhd60EueitdSQKgtbSwCXd9sXDE1eYiTozLfXIeFIZ0hhrQEW2I5NuaNX5A== rth@are.twiddle.net
diff --git a/tcwg-base/tcwg-build/tcwg-benchmark/.gitconfig b/tcwg-base/home-data/tcwg-benchmark/.gitconfig
index d0ea2be3..d0ea2be3 100644
--- a/tcwg-base/tcwg-build/tcwg-benchmark/.gitconfig
+++ b/tcwg-base/home-data/tcwg-benchmark/.gitconfig
diff --git a/tcwg-base/tcwg-build/tcwg-benchmark/.ssh/authorized_keys b/tcwg-base/home-data/tcwg-benchmark/.ssh/authorized_keys
index 536483eb..54fcd903 100644
--- a/tcwg-base/tcwg-build/tcwg-benchmark/.ssh/authorized_keys
+++ b/tcwg-base/home-data/tcwg-benchmark/.ssh/authorized_keys
@@ -1 +1,2 @@
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC1u4GVTRNPWVnU9YRUZPeUql0vjm3sD4F6KG68OpMAtbR8F8q1dCOgeOjPOipznJP4ghVakPrEQSOPnbnlMhNg9FQbScwXctmLknKsXrKSCuef+PEs7YRCmb+mD1RBXaoOChaNV1O7dt5tnRbqYT4k97ojwbLqIBwHWF0l8+3kY0R83LJBK2JCdZN2zfzg7xnumx700uGICPRozFMLszuIRu/oDC14bJnOFd9htcW2KzU1/oPPUhDScmVTYKjyRm8QGudElHTy1wGMroApnuc+NCCY8iy8A7GfxIX48aghnb3kh57P0W6jyc8bpBtMieYCwBRMR/imyvbpWF8Tlbnu0C0uMg4mSU15daJLrdv446xmcb2WB/xxz437fpVchAOz0H+Hao24DQFIzzCOnkgDXixP/43kybRi/8IqAXjJhCRO+8bHVXOESDhH6kidERIaSAiT+LG2uTgufxoWuFWm8fftLj7oKBx+SpMymSNofDHRWa4XGBO66dP1Ijmu2jRH5Z4Pnxy25tVPReOVSXyT/fkzd0+kpFUR0mEjl9ahZliZMFSSMdm3vDqqt7oQWxlMc6Dl1MMQ1iWzvRWRVSyofw6Fp2rretVbDmW+kavxxGRrWFr73EWrn47yC+mqR7DouaQ8wC/baU1GXZ6ouoY1kalNMSmGLTMMrLlclpz2mw== tcwg-benchmark
+ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICGp3175gYsucw1DgO/+VmEAwlUhGqK89qJfmK/jhV1P tcwg-benchmark@linaro.org-20220725
diff --git a/tcwg-base/home-data/tcwg-benchmark/.ssh/config b/tcwg-base/home-data/tcwg-benchmark/.ssh/config
new file mode 120000
index 00000000..5f9d8251
--- /dev/null
+++ b/tcwg-base/home-data/tcwg-benchmark/.ssh/config
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/config \ No newline at end of file
diff --git a/tcwg-base/home-data/tcwg-benchmark/.ssh/config.d b/tcwg-base/home-data/tcwg-benchmark/.ssh/config.d
new file mode 120000
index 00000000..1af9bec1
--- /dev/null
+++ b/tcwg-base/home-data/tcwg-benchmark/.ssh/config.d
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/config.d \ No newline at end of file
diff --git a/tcwg-base/home-data/tcwg-benchmark/.ssh/known_hosts b/tcwg-base/home-data/tcwg-benchmark/.ssh/known_hosts
new file mode 120000
index 00000000..936136a2
--- /dev/null
+++ b/tcwg-base/home-data/tcwg-benchmark/.ssh/known_hosts
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/known_hosts \ No newline at end of file
diff --git a/tcwg-base/home-data/tcwg-benchmark/.ssh/ssh-tcwglab-nc.sh b/tcwg-base/home-data/tcwg-benchmark/.ssh/ssh-tcwglab-nc.sh
new file mode 120000
index 00000000..6eddeb50
--- /dev/null
+++ b/tcwg-base/home-data/tcwg-benchmark/.ssh/ssh-tcwglab-nc.sh
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/ssh-tcwglab-nc.sh \ No newline at end of file
diff --git a/tcwg-base/home-data/tcwg-build/.gitconfig b/tcwg-base/home-data/tcwg-build/.gitconfig
new file mode 100644
index 00000000..51ec486b
--- /dev/null
+++ b/tcwg-base/home-data/tcwg-build/.gitconfig
@@ -0,0 +1,3 @@
+[user]
+ name = TCWG Build
+ email = linaro-toolchain@lists.linaro.org
diff --git a/tcwg-base/home-data/tcwg-build/.ssh/authorized_keys b/tcwg-base/home-data/tcwg-build/.ssh/authorized_keys
new file mode 100644
index 00000000..b7148fbf
--- /dev/null
+++ b/tcwg-base/home-data/tcwg-build/.ssh/authorized_keys
@@ -0,0 +1 @@
+ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILSW/oV/XFlGxI0WdLfI+kU7YwR2TPAxqUJCQQn/779f tcwg-build@linaro.org-20220725
diff --git a/tcwg-base/home-data/tcwg-build/README b/tcwg-base/home-data/tcwg-build/README
new file mode 100644
index 00000000..d5a95bf5
--- /dev/null
+++ b/tcwg-base/home-data/tcwg-build/README
@@ -0,0 +1,65 @@
+This automation user -- tcwg-build -- is designed for robust-isolation
+testing and, in particular, pre-commit testing. It is used in environments
+where we need to assume presence of malicious actors.
+
+This user is configured (aka "new-user.sh --user tcwg-build" is called)
+only inside a particular build/test container -- this is done by
+"jenkins-scripts/start-container-docker.sh --task precommit". Therefore,
+someone with access only to the private key of this user can't access
+any of TCWG machines outside of currently-running containers for
+pre-commit testing. See Note #1 below.
+
+The two primary methods of isolation is that
+1. tcwg-build has no sudo access,
+2. tcwg-build has no access to ssh agent.
+
+Lack of sudo access is configured by the fact that tcwg-build is not
+a member of tcwg-sudo group in home-data/group.
+
+Lack of access to ssh agent is configured by
+"jenkins-scripts/start-container-docker.sh --task precommit"
+disabling ssh agent forwarding.
+FIXME: Drop tcwg-buildslave's key from ssh agent once container for tcwg-build
+is created.
+
+Secondary method of isolation is that "--task precommit" containers are
+allowed to mount read-write only scratch volumes. All other mounts must
+be readonly. We then take care when handling data produced by precommit
+containers, and we do all non-trivial handling of this data only inside
+other "--task precommit" containers.
+
+With the above safeguards we are able to put tcwg-build inside a privileged
+docker container, and tcwg-build should not be able to escape without
+escalating privileges. A potential privilege escalation in our docker
+containers can happen by exploiting:
+1. kernel,
+2. sshd,
+3. docker,
+4. sudo or another setuid binary.
+Assuming we stay on top of updating both bare machines and our docker images,
+all of the above are too costly to exploit.
+
+Note #1: We provide access to tcwg-* machines via "host" containers,
+which allow access for groups of users defined in home-data/group.
+!!! It is important that tcwg-build is NOT a member of ANY group in
+!!! home-data/group. This prevents it from accessing TCWG machines.
+
+We have a dedicated group with the matching GID for tcwg-build to have
+a primary group. The group name does not match the user name to avoid
+using umask 002 when most other users have 022. This can cause
+differences in builds/tests which depend on file permissions, leading
+to bogus regression reports (see USERGROUPS_ENAB description in
+/etc/login.defs). This is it's entry in home-data/group:
+===
+tcwg-build-group:x:9003:
+===
+!!! It is important that tcwg-build is NOT specified as a member of this
+!!! group because, otherwise, "tcwg-host/run.sh all" will configure access
+!!! for tcwg-build on most TCWG machines. This is the same point as above,
+!!! but I am just concerned about temptation to specify tcwg-build as member
+!!! of tcwg-build.
+
+Note that tcwg-build cannot access *.tcwglab machines from outside of
+Cambridge Lab. This is due to tcwg-build having no account in TCWG ssh proxy
+container running on ci.linaro.org.
+
diff --git a/tcwg-base/home-data/tcwg-buildbot/.ssh/.keep b/tcwg-base/home-data/tcwg-buildbot/.ssh/.keep
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/tcwg-base/home-data/tcwg-buildbot/.ssh/.keep
diff --git a/tcwg-base/tcwg-build/tcwg-buildslave/.gitconfig b/tcwg-base/home-data/tcwg-buildslave/.gitconfig
index d91df92c..d91df92c 100644
--- a/tcwg-base/tcwg-build/tcwg-buildslave/.gitconfig
+++ b/tcwg-base/home-data/tcwg-buildslave/.gitconfig
diff --git a/tcwg-base/home-data/tcwg-buildslave/.jipdate.yml b/tcwg-base/home-data/tcwg-buildslave/.jipdate.yml
new file mode 100644
index 00000000..b7fab431
--- /dev/null
+++ b/tcwg-base/home-data/tcwg-buildslave/.jipdate.yml
@@ -0,0 +1,5 @@
+server:
+ url: https://linaro.atlassian.net
+ token: #TCWG_JIRA_TOKEN#
+text-editor: False
+username: team-toolchain+tcwg-jira@linaro.org
diff --git a/tcwg-base/tcwg-build/tcwg-buildslave/.mailrc b/tcwg-base/home-data/tcwg-buildslave/.mailrc
index cae73d9b..cae73d9b 100644
--- a/tcwg-base/tcwg-build/tcwg-buildslave/.mailrc
+++ b/tcwg-base/home-data/tcwg-buildslave/.mailrc
diff --git a/tcwg-base/tcwg-build/tcwg-buildslave/.ssh/authorized_keys b/tcwg-base/home-data/tcwg-buildslave/.ssh/authorized_keys
index bb7e338b..473e1855 100644
--- a/tcwg-base/tcwg-build/tcwg-buildslave/.ssh/authorized_keys
+++ b/tcwg-base/home-data/tcwg-buildslave/.ssh/authorized_keys
@@ -1 +1,2 @@
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCvo00oFPW9t4OOylGA2hpBFu/3S7xjMWolmzZoS234Hej/Y8RvMgyG+jAg/hdG8aMG+PRmCRDDk2R5HSceSTG/51x3DyVkpjiFHaWdafCvy63Okalhu0vLAXHi8pbpSjHv7c5KPorBWdG2L5D2LSv/zwDGm+aXvHOrfE6WDraipYML7lUuruTwpg7Fs+NMPqghroslD+gIWeIr897aFug4Enj4oYJSitHqIHwBuPha//bFJpBHakP2PmnB0hFIBDpHq0QYfyHechm6iO+VOOooKG1MMmsPlPfT5kOZkSo/pIgpBILXwFx+BnVhtvNRhN1a8FyLL5V4fb34HXT7Qyq6bA3qGs+cgjy+ZQtHIOyo2rZmBD5uZNjaUdpJFMpMQs9g+h9dIit57bMJBc1anE3BhOhRzd+bsKhsXkhlioaVKMwPyXbkKgGkRsrLn3VEWgF4f2lO2LyBc6HNdm5t5xnh2u1MxnxmSgw3co+86lSvhh5o36Kth7ebi06OLnJDuborq/uBv33G/6dargIz5ZaMySpQIgO6mo+mTMdJr6QpWGek93MFE0N0tbAAXADkk0hpA7if1UJwmCmBAifFDeAMt0QV+taA9jtHMHHgSZC+a4i4EO06L1u0e9qX9ciQJbqXt65Ynjumo2uZfnK1aBSrWX5zaT0Z0LIwxY2HISA06w== tcwg@linaro.org
+ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK5/Q9u6/oaa6J322ZEKnwxe5nwGQXPQRcEjUvAwcz81 tcwg-buildslave@linaro.org-20220725
diff --git a/tcwg-base/home-data/tcwg-buildslave/.ssh/config b/tcwg-base/home-data/tcwg-buildslave/.ssh/config
new file mode 100644
index 00000000..4f6a872b
--- /dev/null
+++ b/tcwg-base/home-data/tcwg-buildslave/.ssh/config
@@ -0,0 +1,2 @@
+Match All
+ Include ~/.ssh/config.d/*.conf
diff --git a/tcwg-base/home-data/tcwg-buildslave/.ssh/config.d/01-tcwg.conf b/tcwg-base/home-data/tcwg-buildslave/.ssh/config.d/01-tcwg.conf
new file mode 100644
index 00000000..69cdfb35
--- /dev/null
+++ b/tcwg-base/home-data/tcwg-buildslave/.ssh/config.d/01-tcwg.conf
@@ -0,0 +1,269 @@
+# === BEGIN: TCWG SSH configuration ===
+#
+# This must be included or copied at the start of your ~/.ssh/config file.
+# Ssh uses the first matching occurrence for a setting, so the farther
+# this is from the top, the more likely it is that some other stanza
+# will take precedence.
+
+# If you want to use the Include directive to include this file from
+# your ~/.ssh/config file, make sure to add a 'Match All' directive
+# just before the 'Include' one, otherwise this file will only be
+# taken into account if the ssh invocation matches the preceding
+# 'Host' directive:
+# Host bla
+# Hostname blabla
+#
+# Match All
+# Include /path/to/this/file
+#
+
+# Add this into your local ~/.ssh/config.d/00-local.conf
+#Host tcwg-* *.tcwglab people.linaro.org lab.validation.linaro.org ci.linaro.org
+# User first.last
+
+# Access to Cambridge Lab. E.g., ssh dev-01.tcwglab
+Host *.tcwglab
+ ProxyCommand ~/.ssh/ssh-tcwglab-nc.sh -q0 %h %p
+
+Host tcwg-* *.tcwglab
+ # Forward authentication agent and keep private keys in one place.
+ ForwardAgent yes
+ # Enable automatic multiplexing.
+ ControlMaster auto
+ # Soften up potential problems with killing master connection by using
+ # ControlPersist (which puts the master connection in background).
+ # Also ControlPersist has an undocumented feature that it will clean-up
+ # and replace stale ssh socket from a zombie connection.
+ ControlPersist 5m
+ # Put the ssh socket on /tmp. Note that overlayfs can't host sockets,
+ # so we always arrange /tmp to be on a ext4 or equivalent FS.
+ ControlPath /tmp/ssh-%u-%r@%h:%p
+
+Host *.tcwglab
+ # Disable checking of host keys for boards behind gateways.
+ # !!! BE CAREFUL TO ONLY DO THIS FOR MACHINES BEHIND SSH GATEWAY OR VPN !!!
+ StrictHostKeyChecking no
+ # Don't store host keys for one-time containers
+ UserKnownHostsFile /dev/null
+ # Don't warn about "adding" host keys to /dev/null
+ LogLevel FATAL
+
+Host ci.linaro.org
+ Port 2020
+
+# The verison of Apache MINA SSHD used by Gerrit < 3.6 does not
+# enumerate supported key types properly. This workaround allows
+# ssh-rsa keys to still work.
+Host review.linaro.org
+ Port 29418
+ PubkeyAcceptedKeyTypes +ssh-rsa
+
+# VM to provide PDU control and serial access for LAB-hosted machines
+Host services.tcwglab
+ Hostname 192.168.16.2
+ Port 22
+
+# VM to provide PDU control for LAB-hosted machines. It seems that from TCWG
+# only maxim.kuvyrkov has access to this machine. Information from
+# support.tcwglab:/usr/local/bin/pcycle-* is collated in nvidia-power-cycle.sh .
+Host support.tcwglab
+ Hostname 192.168.17.160
+ Port 22
+
+Host git*.linaro.org dev-private-git.linaro.org
+ User git
+
+# Connect to "host" container by default.
+# Users in "root" groups can also ssh as root on the bare machine on port 22.
+Host tcwg-* *.tcwglab
+ Port 2222
+
+Host *
+ # There is little point in forwarding X11 to machines outside of local network.
+ ForwardX11 no
+ # Ping server every 5min to avoid routers dropping connection.
+ # This matches -o BatchMode=yes setting used in cross-testing (see ABE)
+ ServerAliveInterval 300
+
+# When connecting to a container on an AWS machine, use the ".tcwglab" name instead.
+# (access to any port is only allowed when going via ci.linaro.org)
+
+# AWS Graviton3 instances for LLVM Buildbot SVE testing
+# Spec: 32x Graviton3, 64GB RAM, 512GB disk
+# Service: AWS dashboard for TCWG (David and Maxim have access)
+# PDU, serial: via AWS dashboard
+Host tcwg-g3-01 tcwg-g3-01.tcwglab
+ # Has 1TB disk; can be used by developers for investigations.
+ Hostname 34.247.40.177
+Host tcwg-g3-02 tcwg-g3-02.tcwglab
+ # 8 core 256GB disk, used for AArch64 LLDB bot.
+ Hostname 34.244.87.161
+Host tcwg-g3-04 tcwg-g3-04.tcwglab
+ # Spec: 64x Graviton3, 128GB RAM, 1TB disk
+ Hostname 52.48.47.199
+
+# ARMv8.2+SVE Fujitsu FX700 (Cambridge Colo)
+# Service: kevin.zhao@linaro.org
+# PDU: no; serial: no
+Host tcwg-fx-01 # Tiny VM for SVE cross-testing # 6x A64FX
+ Hostname 213.146.141.69
+Host tcwg-fx-02 tcwg-bmk-fx-02 # Benchmarking machine # 48x A64FX
+ Hostname 213.146.155.110
+Host tcwg-fx-03 tcwg-bmk-fx-03 # Benchmarking machine # 48x A64FX
+ Hostname 213.146.155.6
+Host tcwg-fx-04 tcwg-bmk-fx-04 # Benchmarking machine # 48x A64FX
+ Hostname 213.146.141.8
+
+# ARMv8.2 Ampere Altra Mt. Jade (Packet.net): # 160x Neoverse-N1
+# Service: maxim.kuvyrkov@linaro.org
+# PDU: via Packet.net dashboard; serial: via Packet.net dashboard
+Host tcwg-jade-01 # LLVM Buildbot
+ Hostname 139.178.86.199
+Host tcwg-snow-02 tcwg-snow_bmk-02 # Jenkins builder
+ Hostname 139.178.86.6
+Host tcwg-jade-03 # Dev Box
+ Hostname 139.178.84.207
+Host tcwg-jade-04 # LLVM Buildbot
+ Hostname 145.40.80.173
+Host tcwg-jade-05 # Jenkins builder
+ Hostname 147.75.55.117
+Host tcwg-jade-06 # Jenkins builder
+ Hostname 139.178.86.193
+
+# ARMv8 SynQuacer dev boxes (Cambridge Lab): # 24x Cortex-A53
+# Service: ticket for LAB; https://linaro.atlassian.net/issues/?filter=10146
+# PDU: nvidia-power-cycle.sh; serial: yes
+Host tcwg-sq-01.tcwglab tcwg-bmk-sq-01.tcwglab
+ Hostname 192.168.16.41
+Host tcwg-sq-02.tcwglab tcwg-bmk-sq-02.tcwglab
+ Hostname 192.168.16.42
+
+# ARMv7 dev / bmk boxes (Cambridge Lab):
+# Service: ticket for LAB; https://linaro.atlassian.net/issues/?filter=10146
+# PDU: nvidia-power-cycle.sh; serial: yes
+Host tcwg-tk1-10.tcwglab # 4x Cortex-A15
+ Hostname 192.168.18.199
+# PDU: nvidia-power-cycle.sh; serial: no
+Host tcwg-x15-01.tcwglab # 2x Cortex-A15
+ Hostname 192.168.16.31
+
+# X86_64 dev box (Hetzner):
+# Service: ticket for Systems; https://linaro.atlassian.net/issues/?filter=10146
+# PDU: via Hetzner dashboard; serial: via Hetzner dashboard
+Host tcwg-ex42-01 ex42-01 # 8x Core i7
+ Hostname 95.216.72.225
+
+# X86_64 dev boxes (Cambridge Lab):
+# Service: ticket for LAB; https://linaro.atlassian.net/issues/?filter=10146
+# PDU: nvidia-power-cycle.sh; serial: no
+Host dev-01.tcwglab tcwg-x86_64-dev-01.tcwglab # 32x Xeon
+ Hostname 192.168.17.10
+
+# Backup server and bmk coordinator (Cambridge Lab): # 4x Xeon
+# Service: ticket for LAB; https://linaro.atlassian.net/issues/?filter=10146
+Host bkp.tcwglab bkp-01.tcwglab
+ Hostname 192.168.17.22
+
+# X86_64 builders (Cambridge Lab): # 4-32x Xeon
+# Service: ticket for LAB; https://linaro.atlassian.net/issues/?filter=10146
+# PDU: nvidia-power-cycle.sh; serial: no
+Host build-01.tcwglab tcwg-x86_64-build-01.tcwglab
+ Hostname 192.168.16.5
+Host build-02.tcwglab tcwg-x86_64-build-02.tcwglab
+ Hostname 192.168.16.6
+Host build-03.tcwglab tcwg-x86_64-build-03.tcwglab
+ Hostname 192.168.16.7
+Host build-04.tcwglab tcwg-x86_64-build-04.tcwglab
+ Hostname 192.168.16.8
+Host build-05.tcwglab tcwg-x86_64-build-05.tcwglab
+ Hostname 192.168.16.9
+Host build-07.tcwglab tcwg-x86_64-build-07.tcwglab
+ Hostname 192.168.16.11
+Host build-08.tcwglab tcwg-x86_64-build-08.tcwglab
+ Hostname 192.168.16.12
+Host build-10.tcwglab tcwg-x86_64-build-10.tcwglab
+ Hostname 192.168.16.14
+
+# ARMv8 Ampere boards (Cambridge Lab):
+# Service: ticket for LAB; https://linaro.atlassian.net/issues/?filter=10146
+# PDU: BMC; serial: BMC
+Host tcwg-amp-01.tcwglab tcwg-bmk-amp256-01.tcwglab # 256x Neoverse-N1
+ Hostname 192.168.17.78
+Host tcwg-amp-02.tcwglab tcwg-bmk-amp80-02.tcwglab # 80x Neoverse-N1
+ Hostname 192.168.17.79
+
+# ARMv8 APM benchmarking boards (Cambridge Lab): # 8x X-Gene1
+# Service: ticket for LAB; https://linaro.atlassian.net/issues/?filter=10146
+# PDU: nvidia-power-cycle.sh; serial: no
+Host tcwg-apm-01.tcwglab tcwg-bmk-apm-01.tcwglab
+ Hostname 192.168.16.20
+# PDU: nvidia-power-cycle.sh; serial: no
+Host tcwg-apm-02.tcwglab tcwg-bmk-apm-02.tcwglab
+ Hostname 192.168.16.21
+# PDU: nvidia-power-cycle.sh; serial: nvidia-serial.sh
+Host tcwg-apm-05.tcwglab tcwg-bmk-apm-05.tcwglab
+ Hostname 192.168.16.70
+
+# ARMv8 APM builder/tester boards (Cambridge Lab): # 8x X-Gene1
+# This one has different CPU frequency settings, than -01, -02 and -05.
+# Service: ticket for LAB; https://linaro.atlassian.net/issues/?filter=10146
+# PDU: nvidia-power-cycle.sh; serial: no
+Host tcwg-apm-03.tcwglab
+ Hostname 192.168.16.24
+
+# ARMv7 and ARMv8 benchmarking boxes (Cambridge Lab): # 4x Cortex-A15/A57
+# Service: ticket for LAB; https://linaro.atlassian.net/issues/?filter=10146
+# PDU: nvidia-power-cycle.sh; serial: nvidia-serial.sh
+Host tcwg-tk1-01.tcwglab tcwg-bmk-tk1-01.tcwglab
+ Hostname 192.168.18.151
+Host tcwg-tk1-02.tcwglab tcwg-bmk-tk1-02.tcwglab
+ Hostname 192.168.18.152
+Host tcwg-tk1-03.tcwglab tcwg-bmk-tk1-03.tcwglab
+ Hostname 192.168.18.153
+Host tcwg-tk1-04.tcwglab tcwg-bmk-tk1-04.tcwglab
+ Hostname 192.168.18.154
+Host tcwg-tk1-05.tcwglab tcwg-bmk-tk1-05.tcwglab
+ Hostname 192.168.18.155
+Host tcwg-tk1-06.tcwglab tcwg-bmk-tk1-06.tcwglab
+ Hostname 192.168.18.156
+Host tcwg-tk1-07.tcwglab tcwg-bmk-tk1-07.tcwglab
+ Hostname 192.168.18.157
+Host tcwg-tk1-08.tcwglab tcwg-bmk-tk1-08.tcwglab
+ Hostname 192.168.18.158
+Host tcwg-tk1-09.tcwglab tcwg-bmk-tk1-09.tcwglab
+ Hostname 192.168.18.159
+Host tcwg-tx1-01.tcwglab tcwg-bmk-tx1-01.tcwglab
+ Hostname 192.168.18.101
+Host tcwg-tx1-02.tcwglab tcwg-bmk-tx1-02.tcwglab
+ Hostname 192.168.18.102
+Host tcwg-tx1-03.tcwglab tcwg-bmk-tx1-03.tcwglab
+ Hostname 192.168.18.103
+Host tcwg-tx1-04.tcwglab tcwg-bmk-tx1-04.tcwglab
+ Hostname 192.168.18.104
+Host tcwg-tx1-05.tcwglab tcwg-bmk-tx1-05.tcwglab
+ Hostname 192.168.18.105
+Host tcwg-tx1-06.tcwglab tcwg-bmk-tx1-06.tcwglab
+ Hostname 192.168.18.106
+Host tcwg-tx1-08.tcwglab tcwg-bmk-tx1-08.tcwglab
+ Hostname 192.168.18.108
+Host tcwg-tx1-09.tcwglab tcwg-bmk-tx1-09.tcwglab
+ Hostname 192.168.18.198
+
+# ARMv9+SVE benchmarking boxes (Cambridge Lab):
+# Cores: 1x Cortex-X2 + 3x Cortex-A710 + 4x Cortex-A510
+# PDU: nvidia-power-cycle.sh; serial: no
+# Installation details: https://linaro.atlassian.net/browse/STG-3331
+# Service: ticket for LAB; https://linaro.atlassian.net/issues/?filter=10146
+Host tcwg-qc-01.tcwglab tcwg-bmk-qc-01.tcwglab
+ Hostname 192.168.17.121
+Host tcwg-qc-02.tcwglab tcwg-bmk-qc-02.tcwglab
+ Hostname 192.168.17.122
+
+# WoA ans WSL2 jenkins builder (Cambridge Lab): # 8x Cortex-A78C
+# RDP on port 3389; ssh leads to WSL2 VM (port 22) and to docker "host"
+# container on port 2222.
+# Service: ticket for LAB; https://linaro.atlassian.net/issues/?filter=10146
+Host tcwg-volterra-13.tcwglab
+ Hostname 192.168.17.73
+
+# === END: TCWG SSH configuration ===
diff --git a/tcwg-base/home-data/tcwg-buildslave/.ssh/known_hosts b/tcwg-base/home-data/tcwg-buildslave/.ssh/known_hosts
new file mode 100644
index 00000000..8ff08f0c
--- /dev/null
+++ b/tcwg-base/home-data/tcwg-buildslave/.ssh/known_hosts
@@ -0,0 +1,96 @@
+# This file is generated automatically with known_hosts-regen.sh. DO NOT EDIT
+139.178.84.207 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEwVcZP/lQpACRoeHPRI2JZeMLEUGFgQG+fnwEXITAeZ0ZUgq8998wWtGHtvhTiuSgUEKqZiBLeLRlk7IQjrm6c=
+139.178.84.207 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMSyaDoJ0gPcoAMLdxyxSSB54DgB3dbTpC5ONZke+SZ0
+139.178.84.207 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDgeTsNNwPvT4p3eQxzLgmvsBWtcPY/C7olK7ML0tke2J7TKuSyKOYEV32vZGd0mxpAjZyfvxh7NOGp4olzwzhdbdSqn4Ofz227CtdN/uHyKaOao0nh74zHEIdAKfxRHCBEZnsEXUPDhzrR6lkYttBl3qMgODr2Ey6MwQsY4Vbsq443PG0KY+O2114OYO5+YCjpa945e59mcfWextsfNd5KmAhH0YudYnyb8sOhxhcMiYV5MsIkg3huecz4LD1vYDnTSoFiJv7GYx8UQspKqZjP1CPVvlOcRLZRNro2w08oU2GLr0oVUlodmr2UxG3cjrROf2nLic9P8PgzrRbQq7Z6efN7RlR9ZtMhESiO17mfMvNYVNtEHYrdO1ynwryqL4KuzX7HqOEX3uUCaMkn8CXaKnav2Nc70Gz1LNM13+r5usBxkIHAeRxIoLy5/WZSLe1mT6a1y0i/+cuZgr/eBZpyMesMTvFNTzHalzQgF2fdUx3qvZz+hyD6CQs1fJtNM0k=
+139.178.86.193 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKd33+qJbJn2lOhmG3H71gPUmhTIOd86X9O2QhB+go+0NkVpRi9xf4DqHPxzbLWthrC80rSlnHC/tjoulZEOcyA=
+139.178.86.193 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMpxwD2Iyu1HF5FbaKw+Olxhv1ET3TYfdisT2NJSJQ3D
+139.178.86.193 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC/gTPoz+7PQVU4HAMxNjOqZFiCN2zYb/zi0DkFtYeQiIVEagMIzRiVCaUU93YjslElo60lnqI9Iy0Cbj1hGYolBT8UIo8GRLSAJ5T1U419TnwxQV2Kp5Dj+5a+6eEvXpuqPMO66cJE6JH/NnUqYuuDuOaUTQlyRbhPMhu9zBxLT1/M86h9225B40rBiOX6XcxQ9iYH1KJkNwmKmIpXlKfIUWljfeBLVlUlo5Oj921UOnbejBuh9YOEb7/8RQ7xpoAYDafbVO4ALNNZ5fdB5OGESL/HmHS+jz1Ah1XOWj2PbcD/tSCD/fI/CBHL238WTp7icmOyRskyBPK6hC1I6/Z+KQAgLaZHEswQL5sqP3WXCZ8a6TyhRFy2UXjO8JRsuoAACqZ0NT705nbvaSEF86FKInThTd1bId9pd96WjfiV3HU7fUYtS+bSIXQnBeKo1SOi5LCQJeWubawU7TfXcslsNmNYVGRI+8qIBRT30pqoTIbm9YBnS25WwsdqndAi/AU=
+139.178.86.199 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHX0GPbyXy5YKhpdY9mjXL4Fmq2kNOq1cXRw9C06WwhJCmiokmnP5yNPwBC1LepBlwDrUYk070EUgs6uzMWIm3c=
+139.178.86.199 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEVVhsqL521BaIrKw3e1mDxgP80GLZewpl2Qn+g7kA5u
+139.178.86.199 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDfwx2g5M7/R/YePdn00tVVRhIeBoAA5O8EJLW8srwHCKyU4wWyKC8JnqtXGSPpjOZmtOfw73MRCEsrzRTk/o+Nt/+m2MqjhjLPA4REicAMp5Yt8+RzIY4S4QrxK4F0Ed0cWz6YeyZP/7KUgXXw5Ckl1cTVkuRK3TgtLKbUMrTw1wGkCJ6Fpfv7aXFWDHTRaj1ictULwqBs8VF0naFH78ko0P17ooC4hDO7KfsAcWkSTsSJMUrskYFVBEzU9vRUFkp7kyFu2n/7KGQVqpDccxZ9k3v8xeI6Gu1wV/SkQIlCs/wLVaK9nqzTgFFksBAk3FM1Y/ErptOf7q5SV8kHRdwiNL35rc2O6JrbwUZw+XkZsQkqhg0qPOqgpCImGWUWX8pB63f/Yrt4q6p048OKhXMg7C+F5+Vnljbpx1AA5QSSMHLLmg20s+XZqzjZpFNyCWALFb1CmWSx4oh0onKwv1OBXazbTL7vLUydBzZcaRYHkDij2cwfsDKDBt/8BuSu9Gk=
+139.178.86.6 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBP7oqsAM4pK7ItTLsboeh7tBEeCXF+IzuhJQHv5o3pIj4wRt3yMqvpXb22NXXp6BsiY6xtZA1TsHaeb5qWyKJcg=
+139.178.86.6 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBCz2CzWXUoqeCbwUpuUrvZDUYLkRCynMiowMdF+vlPx
+139.178.86.6 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCIr3/4ocXmKigqwUNhAAr/M5mG1IdIzD84h9n72xenmDe1pcHSfcZLZ3KX7nwS69LrIj0d7fjuDBHcxkrH4kg6bY2fSsINrAUBLbElj8oGVDMOKP98CKaUQGaSsoirg5ZiYvX5Ak2P/E7f7pY9ojxMHCT0Oe4cF1v8aHHgtAhJVxaBgLTxv0Rrr5k0zqFgKyvwht4/8gnyPDVUJ1masKYILbVa+IEJD4gvXw9H1pCOCh22jA5MvHzLzoVdJ4z8GhCwUjkTHJx2Bir7rhUqNJvSdLE9svbYm4OxCMpr/GHaS+4Xg6ReADOaJ+njJ/9e4mYvz7kFEWu7UNtI+AY2R6ZPEjzHL5DXz4rT0ctXQzZ5HBTok75nV1NLIF2w0IOAsFal7DefYVReTLMyMnR1HniiZY9jlN6+ZrBbiqeZi0do2DGkb3HzzNhVBE8lhUmIXf4UwELUsF8jqVAbUOR08YJ7FQWPEH/tSz4km5O9VNv8MDqgRFSKhR7phNa/YFFCy00=
+145.40.80.173 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBK2vLkUVJjfGQq5iC7OSR37feVodWTcxzFDw6H2BH4KM66PMkdHgYBmFZgcSGr31vl21UJGlPnAas/wAeetfN+o=
+145.40.80.173 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDiGHoZz3lt++sc6dpYgA371g2H78czHkV9MwTigXqXz
+145.40.80.173 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDS3zmQLdApWx2EY2YVyt8iAHdgf66qdDEQct/SvQdf3ONXvhQtyVdE03iD3/BTNOdqMmAvZOxpw5PSJkjJS/ANTVKlXsg+QnBtvrVPVtEaYOt6vQlwDH4qLeJ2LS7x4Dl0f4uKseUSIMZkqTyJpUBaYqI2uRdDs0ZIoIQCnK4RsLx9m3SWQrm9yiOotxUZWxnjbwmu3BcOfd7rTSTEpqn3ye0A3fk74xNBeJB6eIazvnCu/AWjLICYMfULZkYlQW5gblfkUoGqvfqN4S52aHn9+RsTv6PExMWQnkGE89+Fs34pYX5ObV4DNZwV4nkLYByFMXSkP7Ya+rP5CbGxUgmWNTZai77hgZflwpCP+XfOYXo/lpBDnVYBKo6jQn4JcqOj4pWDBHZHl6Dp5k37PZRglDq9IioZldCATQ2kp9Z7lVVCtJCS5zhWWMOjXv7GKq1ZnKJdAEHgXTMdrt6OwCTzp2TcIePls3DCiOKM5wKpf/Wck6MQzQT0QjKC5HW0RLs=
+147.75.55.117 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBNcl1wRkIhaQLrBRDvolVrqUkn7sQ+PNx/tCGTjt+/Y0naDSS2lT1Mj7O6JjZb9QF2T1EkUMe/bsTHZ5ZK4xzrA=
+147.75.55.117 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFt1SBbFC9iaYlCPsTY49Ex5sinT4jCg5FvcjRKcZ+gr
+147.75.55.117 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCyRo6YqehgxKfiklciR92paC1JSRuHFsQmTTinwNtPT34VfV6PBEZo5Yg3s11tEIdEMulMwCnllNmjZxHTkQ//IXBWclbObUyUp497Db+q+EHCAsfRJwohPLIpQOsQHcyLxcC6q/PDFsnEYo1vRTszZzBJvqeq365EGF4wmX3F8YSzejsZppoZMnKyfax/Y1/I0eUhOTzD2/m5KjzD5JEtE8efm+G58IT+zR/fEgcGfz/4SsqDbAVJBFDTfy+bIXVIjAyhguOAoXxEVB9wwJE1sZLl9Ky21jspWp8aIlJ8QxdtutAgwMklBuHK92+hxtvsmRu++DQBHPO0dHD1MzbJSyDWfi8XzCA2G7ulzW28r7+w2Jl4daFt1UHM9H54ihafIw7YQGxIGoB9fzx6yOpCmDV3r8o3JOAv1SEJZv8pXz2f++p20qpQZBsxeaYgns/zDCLPNCfUF4RCcsFpsglfxk/WUqF8ebasqqBB+QnY61pJglTSM8sn3LonDXw0bnM=
+213.146.141.8 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMKXyjegAfI0hTq5BeyyadSAHqTesU8dJ0bAdkelxD8dlhDbotwgmzcr7zMc1PmqgaIwNG+xbuyaxb/i4ZuSqAs=
+213.146.141.8 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIML7xBR/YNUcZdEtUb00jutZdfrrDDGfSdOR966NUhwj
+213.146.141.8 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCf/7MgO3+uP90vMFimh7m8zavbz2lp5D0soHaDAFl2vVcLBP3RiYVl5zBRJ+ZCRn1p5/Ps8TluLcN5q65GlFhOSiD5jEQ9zWu3FhRWGdlyxqcH9tLJe7vFM3vahEjMRSsgbNneJYkEeLkceXTuonLaz0kojYe1so0fIHULnmUUxx47BDm9wdOY+TEMvH7Qndlzzb4bFC9uKDw5beWtNsoNExZRCa48KiMbCemE5UY3/kZSwgaGE567WBfSkFw8XTqkfmf8+MH6og1mjozOpUcz3DP/7tua3Q1nvoExO9ZnZjz2qatQ+C2TKXByeGXbgdiEzCW68ilyNawCCt66neolO9hrmWCZV2p4i9ANJLiOM6ndq9eGEooxUWhYxHXeZMrd40qvyjFyOoqoM9W65SIfgYoGLOa+Jj98WEj8K4exX4bgNDkujZlSer4hNu4OlAIDDsGC1PrXFk+2e6Z5RCTEF87Xb6FFjGVZT3yOV6XixiJ2NQdYdAz7LKgijcqBqIE=
+213.146.155.110 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBNQwCttokw9xIRj85gVfbQWlmkMTOzyelOgalaxG/wiCyjtjocoCl9E+XofpI0+znHo8Z/bjxOpopjjPvEw6uNI=
+213.146.155.110 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFodAlH4aiGQ0ZqOSM20KDYgspzkKkZNaiAUf/pCHdwN
+213.146.155.110 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC2NMLStRsAbLAto5RwstHcQWBcDvV6uog+BUapW70fQWIr0vVwJwN+rLVtWB8emBaPqo+kffXIza8li5+1CoptnWPLwf3uLnqb0v5xz2Mxtcl4iS8v+lB1NMBMJ0dcErXb/tCk9XriFRgMd+GYcR3cPSnl2Sx9JDxbrVBs7HxFbTZvXI6uMvxTFAZHT2S7yJZsjyWhAzUdy33g/AXWu/ken2A4wdW18hKJWJ5gwyQ8mHo6vh+xl/+AVlvx4blQTHBvVdTaXg3TCkWmDD8RU9qsAiCEdm4yJBwlkNCHUIx+sbserKGAZmnSM+LDpPfMgCXyEDlfmS+9DxMPRqLL3F8ca0Bn61SABoe0ZICJu/d+e2kcWX0qL0aq5dbu2MXW14Nfxg5QSSgzv4cO89R8TXip4GgF56kPn63oGcpB1WGlbpK0Py0z8fHlDysUk9b1p+zgOnJUv3cdL/8T4aAdITIWl8hYuYGKw+6XfqJIETsrMsll/qDBE1AXc/R7BpNUCG8=
+213.146.155.6 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBL1U75+fA6MTKuBc0ENLo2IOqeaAYMrrG7Spcylh8xdbnH5ZrgEHqVpDmS+ad5MGD8a7daN9p5yFgR9hIvocsh4=
+213.146.155.6 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICuhOCNwJmaCswoGRIWi1eDafT+iPMoXl3FmiKj+nE+q
+213.146.155.6 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDiV2qemtMnLb5Bx8miWCB5nqkHft/0AAeIaKlo3FchESmmeZOwEEIqJwiSKuoxkHzBBmlDx6EAj5yteSEPHFjZbzRwLFqEJf7ZD0p83rJnD0xSNPkGrBlXfqPVoWg11/zj8uy/JfvKUKRNHIdjKfTndVvap2PKT5A0bagcaNTKsYh1GehIdVy3eWfyNxDPPuQ7VCNiW3nwEzRWUQjJKdooPK+BzIz1gOI/KXQpfJwU+QLEu+tUwAUl+K2BsYYOf3nVFDXp8zkwKlv7CPOpPQ5e4XCxBNJmdfz0nR5j847Jw08IicS0ah2ooZbzqWwI/mYrkyNveo/DQt4NJW3cYBN2Hy4I4yslGdH86WSOnMOMwyWZcSxOhQ35Tk3qwOndzXUUGffchXvQ+QF2hN4zZL60Nd1RSl9JWkGrG8yZ4+JHrnNvDVF7J9zZM7I3msstgQ7V16a2OtcuCplmPgUQhLbP/k+6imE7mBjpiemHuZOHjo6fOzKhSmUGUIxspSgxtwU=
+[3.223.170.243]:29418 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBDZ6AQ2WyZSO43657/fFpxGgVY73kUwh1R1eXpZp27T6lAI5XFQ7YS8HjQ2O7e4edGSpJHHrqVuZphKpqu11Lz8=
+[3.223.170.243]:29418 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDqjPck6EM0H0tlZSKAnleuvhvhhB+jrcGPCt/DD8PB2
+[3.223.170.243]:29418 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCofUDWYYwzE4YWotCffwCxLoRuVCMb6DP+eObwbTPHMe5asK94Y1jPNeK1yUVJIuIAUO8aA6pIq3uLKlusyGLZe1YBpM+7YX3HMOBfCOeOemHFxETlj/HC7islYLYT7Sm/DweiN1kxgP8Q/PhPIA5czCZGHS/+T/VLbMApyyzdTmswaqfgJejyK9juHAcmxT3Tupj2SGOuOamyKfhfsPxGwIchivy/mt7xBTk5cNiSDeLAfMn2rHsilfLjb+IoeE6EvtqG3+rTh+ttulHp2vSeZkK79tuyVWt+XOZjD4RDfk1taW9JjaafkyOW0VCF4gqOMfJU24u88xTCgqkgT1bN
+3.223.170.243 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOvq8E5HPzrBlxmckzsE3rz9LAx9c0faEfofALaO+UGC4HAst9fMaZcHaCqu+b8SVY/2VcBvMYMwO1ZPgOn0rXs=
+3.223.170.243 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJg3tqy2kRCUbweyn8abttwt3Yoh9c+ncNTzRFe+zSnT
+3.223.170.243 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC34bjTOKJIq8MVSeC5gddQlbR0hyvvTZbrpW7KXgCzkLTFZxa05wbz8VC1l7ruPotQBgrICgLYmrbjrASqcY//9OPLDa1Pf/MUIu2F2lA1W/5E3psGYmyC9GTvmjKgu39Rad5ujXMeMLjuzVPCmo+WhewgugDSV4Fcggd6B6YXHGtoE15ctSw4moerUq1+2BXVgFxUyMoGcpSCeLnbvWpmi6xWoGQOSnrQ4Z/VmZ5WZ87vQsiiWEAsqmMOHHacunnSph7uzQXJlHNajdeGnr2NF+EgcmQ0N6vivZDRLmRYuSmizjCOHSRZxSm/0UJC/ewVzp9BwRepiNKWsjb4gTMb
+34.229.169.30 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCvoDYbs7ax/5aYtXPFgkBLVGZSV73A6yqC5vKpFwo9dO84ZEbKjEn1UsGrBIbmlTyxOeR0i/YO/7jYmuDwya8k=
+34.229.169.30 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOhfsxmFSqRafTEUFsSAmu+rhU7TJqIadigy69shtg7Q
+34.229.169.30 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC4rQUZonhfreNKqM7SKKcpYpMUZNgS79hAcZbF62VUQheyoebfJCfvBxwMMdwcXKZgLuqpkYyCzJzjVeWzIr3MN0mJn6ZQuADlPVCNrhQTbSxOU404MLjwkUyy52RAq4nJ2JBwQ+SM3pjjEl+daeoWPpqfZdBI1PewXlsSpLxjTFXAj77sz8Vawu4xBnKW8n42lkINzG+gHPmxQtVXHNM/UQPsq90t8qFTeEg/Puax69Q90KqdQNiCRv1cqQV1kAB9t3AwkuvSgb32cpWCv1eVOXqbUwg4YpWYp6QfmqRra6KYEwG6KhBP3F8UGsYzZ9OWeSgf9i3r5zeJShbFEKY8JA2xleZhCLcKgaN3TDhmrOQwWYUJ6O8VkpkeZGoxt+3Tq8rV5pODnI5tm8m3nOqACYcsioeG4XFIVWc0muonIQSnNFu13mnLvb+uiIjDifyBFIHyZHfKXz7EsstIMXV+KOiRaBcBFpzMVJozcmbbDV6uO7yzrgYy4fLLBIsezU0=
+34.244.87.161 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBPrB7aWWCaIR0oTtp9NMIP8gx1U/08E8GMpP4SDlVHOBeuycYT9dQJc5x37VKa3WWMyzTbgXDYnTbAB6U2emprs=
+34.244.87.161 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIE1k89Vqj0069BBdER0pE2WX5wutfvaEk/IdmYaqNrLP
+34.244.87.161 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCe9/OJMm+bZHPGJ+rc9WrrKseZGyS3kGAgY2e3/ji7jcNM/PNlk3ttcAUJJmoBd5r1Cj1UMN3zRLQLAtBNKX4DdYEWUJOuT/AtVNsrA4fkGRKvWVH32DR14g8k4FzFEQsLb3CYYGCeK4qT0DsoGrttt3e8F7BEOiw9ThH5GpuMVyZsyf832wHHsWlCP5tFYCIdNT5A7codyAKMIXgN1XIN2aHrtvsi5I+n8Be5Qr2Qaj3A3wfQ7aRTc1clhyVHFW5aPcDOoQslPlXBbHUmW/MKJUhpqphihMHqhFSUEN1d9oOuUKrWlhIGuExmYe3CJ4sZK39OXbRcEp8uYI6pgCuGUDG1RjDj+3vnLjNOKZyCxjNIgsKB/vbFSYyelW6Uijd6JNAAaw3+gYxbwsaCz/yutojPUpedAfYVDVx0/O+qpzLhqzMGsao5ziA4kW/w7feoWmFDcA+T0uxTwxnLs/Y+6vJOIzFdfbVYd4tUTio9yD2UjGVu2lP2ACI53nLFeU8=
+34.247.40.177 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFI6OKdllpFDI+F1CBkJNWP/jqxnJxdWYz1Y9kPFv7vUWZyncnJa/9BzaeTfL6sosJP3LNINcrluALVxF4NT/dU=
+34.247.40.177 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIE6a0BgpDjRvZ28HDfPkToSntvoq+1T5aI5KRilxhEX+
+34.247.40.177 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDB+qxE4yhAOtOf1OwAbSJGr5QNrYwfKaeap4dadn1O4rncxBw/BKwe1z/NAkJwct0amAlpFWZbUGX+T6tAW+iT1WPaSlBj78RR2UfqBl6ChAsdUtUlCEBCQZoNvq69r2ByCiwTsg333vqbmwMBdUGPA7VZNXE5s4IpZzCF/rtSwsHj4mkAOFhZTgpyWpal4L1CU8eRxKshOXgCLxSLpkz2fjFbJtRfMboWJZcKeTrE4OnWDrhV44o3jAGMm/beyy+B0ZDpgdpYFVAKjSKCWvpB5FCQ++s2Ab92Babko8dX/ELf7Pjwi/N7Z6Y+IYJCZ1DlLdmTjFYRcKpwk6bCejdr4IZPXZAoe2tbtENigk1LaS7u+sRUrZGF2O9/WgkbuF8vnxo9Id60zf0teKefnHr95kyCNMG3HiETl3OZRMHUySAlcr2f7BEexPos6MxSM/SDSDHp2E2LR9VgSK1Y+RuBIOFft/Hgvg7vwlOvcq3LIJm5msm7xeqOFYxM3/jKOpc=
+# 51.148.40.55:22 SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.3
+51.148.40.55 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBA5AV6b3iGfuCZbQJb3woinW7oJfKXPZTcABlTA1Pbp1gJD/oQ1+om8iiuEx9n3AkrMCMGwAeiJyNLHqwNcG9Y8=
+51.148.40.55 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDfJTJpNI5XQJawxfTHN0/D4CVZQoHm5hXizOleND8BAELbjlwU3+Xru8OFXPcANPj8THnbeWA5H2/DD6Fr8zu74Jc5+nHSotssSpsNHlqV/H/CkAQlHLT5YnMrD9u5RCVK3q3reHmzl/GXVB+3/Gwm/TGemdesIz2lzdUQ4WNRKCVDxAbJoSg0+J+mX0CQhxBeYBre3/J/hlhhdU7IGcYVEFEGkJjrK15QqOJftdOCiQWyj7vLTxjcqKh1KgOXrA8KJltjlbyWzSeN5Z9gY+wmLV/105Ed09XjcelYaz3IzKHPpkdRYwB/NXJ6vJkYSyM9IsWIXyTs/iNNzqgoEqU3
+51.148.40.7 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFZDLd4f9cph9A64+kXUpGvuRmInB3HAtHU9T6wVIsp4HkYLLZD59I4lF/u2VLfM7j10XMNPO7ybOJMM+1zIZlM=
+51.148.40.7 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDtto5bsPJ3NuXsWtwMR8bsAzLvkBstmF1QP+eC6jUBsCDHMtBW/zAWJYNPDr30vRkV7J8D64Pd91rgjbqF8mOPDlyVlln03dYtOV3hzVuXLZfxodslJsw4lB+ZhxLfcZAKqqFURJEhrJNJmtFBprxFRbdS1iQHJHJohg3zS9zlLFvUpZGWooLFEM2z2NdUfSiR12ePvdW1YsEimJR/b3h1it/Wot0uEB6VONZGyMrrWvsntJV1NdQFxJR8waTz1sBvQQBJGX+SgEXY1CB3AUiF4yIy5WZ/4YCOk0kO9qABvV0Ks357OU5uY5GMgalAy2RJyvceNf6erlR4vwmpdnDH
+52.48.47.199 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBACn8WeXlKoxlo6yuUCiBKkMqzihfPSXT8YXRSgzKlb+DuIjUbCDFhDG1shuLZHYoAfPvK2JWbFuLpUUvuT0xSs=
+52.48.47.199 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA5mlYTdVDhmzNre4w3lwI20H+XTMgotCBEF0KvK6CMa
+52.48.47.199 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCiMV58ZeUkBVY8AE1QIqU528fu5JcJoWvKmJzxklyu2X+g1SrQ4hlXQWHwdhv+kfZZ4sjqkik7f/DCroZr2SV/sDwSDVS8COTdHf0Fd/ytsRFhzWnMiEOIvIoT99H0CS6gOt0AStI6ceGIX0xICzmnOI/+hO++NWxRdErNXZTsNTfcDZoFUSnXYQh3vSiBNJYzlFjMz/crWSQkLOvzJfnX/JqQA1vk1KPda9YgTFq8XSTpkuVjOKveQyM1gcp1QRVI/zzmyOc3rJDBtPKZJjwz8RHn0qIbVPeLxPWm7Refjf93Q4iZe0ZwiR4Ge4svp78NX9zLlkwmFgUoTnrkDdo5KCav3QzvuZ1QhObC9xz1P5OC3Sb8vhZBXhNUW5vRMKXdLnlhjyTaC9Fw1VW1/qbvOvsplUiXKr7CAzbAXlcw98S4tU42j1XeRz7RQMnSVg6WuKGf/7diJw2TQuvKR71QIoAwl8UKRj8f9fTQrmvSkbPQqU5XHmWyGa1ChJa8NkE=
+[54.152.253.35]:29418 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBPzkmW4axU/BXRtRkR42I8FVvWjGhB4CUtTC3cSkhu6L0Oo9i+ija/hahkPT0DC+S0k/vEL7s4mC5SrdNCeJO/0=
+[54.152.253.35]:29418 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFc6ZLtKFrdDI1dYcnYnfrZ9aZDSEVuYvjrsuGDXE0hj
+[54.152.253.35]:29418 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMfTLkTmsbtahAiVJTKXRFbR9MQ/vDH/JPj4QN3XPHJuubxLhUf8WObEBtML7J11uvVM1oDTwM5YG5yjyBnc+85OaQaB9tMPDheGhfMG40F4vxdSnQL29ihyrls0hrFTY9UZ4Y2FmJwYL0rOnGU7iPyNuExQwfg2bkdw67aH9nEGjSd2eXYl2bI4DHujy5GJiV3dR9TlUF0iaSeHVSIX5t9I/BXK+AiSqHTrvwdGGi9XvL6xEWYMOZOpJnCH8Q4OSibsFfQXnCMgIFeO7J/ZMGXqltXOtztgQMr8VvRRD3S+Lcp8yKb5aUjWwoCxb4YzEUbQE04SRVeAGjsfNJcXgT
+54.152.253.35 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBONeIVl09BaG0iDOqF/qZjDun8fktYdD0Zl2fRAkSGT6Q7ULAXWJZA7IwstvcSs5w9SRV6x/lNc3CqlHwMFaABc=
+54.152.253.35 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJhG84gKI+louuRb3NVPABVjr81G7v1RebFeMNvfPPNv
+54.152.253.35 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8Q8j887I9mBD2va9C7gWl4Cr8agHWxuFHfDUWaqiygI9jA4w2YC7mo5oJMqwUk2DsvPDLuU5Z6yyKSA7Cko+L0MnKfNMzQ8e00ZXGDBq8bh1tRKstFselAFmmg+5DhM9q9HPjpKYzbAxU6rxmdFbSc+ktE0rhtmciThVT3YW3bMs3g+D+6sf6ER9UkSpbdZ7skKFXBHw2t1BWaPrvW4L8GMFAokgXUKOE8e1WZkQuCcseIz8J9Hz1p/liyiiTPVQnjGyleUnUY0pZA3ViB6pS317BH5Kvd8aX8x0vSwCIs30rpkmBam9C0b2uj2jWk3GrmHYjVHebMAW376VSLTZV
+[88.99.136.175]:2020 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMA/tHxYJryx7PsMzCnuxYOBbmmMqBf9f0RSZb9qkmzntt5qefSVz+r3XDQ6LRZ5UoduyFyWgdzo6dKU8dd9RD4=
+[88.99.136.175]:2020 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOXxLWEYkr0ySiZmxV4UuS3XHobxP7nStX95MOYU2vSa
+[88.99.136.175]:2020 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+DSj5pflQQ2Y3zhJD0TnewNmiiRSrmrlTgXABHIuzTdyYag8qrZi+bOar1SLqW7KZRKCs9nPFlJj1/FanCcjDRFZaRLfIP2SfuPdtp7dUy3SvIMEsvFVbbZn3Qt32G6I5XoT+3ijQBJ2dYaVFvAY8K8bloGdzb1APSfD37rt+H+VPHaVUDaE/jkOX3R3EYJdIBFG5NumbvbyjpBfW5XQ7twJDSL+5DQLf7ZcNQyW6JyD5QLNPUdrIyyFb8f+EKl+MiqEes91HzpB3t47wKyEwgSTzt7ta6KCc+14G2E8zzzf8nRs41bHEtPlw+gPz9U97PH1R96pW6loGYF9UPKq1
+[88.99.136.175]:2222 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCAxH/zCl/clVrd2Q8Tai5wea0homs6uPPf57qemRP/MFHOz4cIYKEbEczLD87b8u2dK+qfjKsr33jSmW8NbJbvJZ6bFhVUcpXl2BxAYbFQVZJq5YDsDEmRFbvkjzEjiRGHMKCl8ouh1c5lTLkLAKZMu2cKc7X0sIMqwrwOPn/RE8cCrDYkhxTZy2IJ8O8MrJoXmwjiT5mJpe5y7kGVzzESvHBbhtknLa5HuYuyzU88Zyi8m6LjJc9OOTxPBuXiO1c7Oblq7q2Sjk7X+iDld1+m+uUkI2Bro5P2oxneapx2As6R9IUc3zd+YGWcjSiI1CnCb1EykIBzS+yKDfoPg+M7
+95.216.72.225 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBDoNsO0Ezk8tG93KPIgMWAfbTx8eynh0qPM1y4MUHAhrVWRk8k4KZZGjYJGoEFQ77AGLPChW/6KaXx39aVj72fI=
+95.216.72.225 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIG29nDm7o/I4IaKFC8JDC+3D6grkEZ+ZB3hFzaBvP/qu
+95.216.72.225 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDaQu7WKvLkz2ljwuisd/hRckTML3cs3riRMIsXXeFeWpwI/B1FNC2JOaOao6KiOBw/kvbaaPzC2zQ/izff2TbMdC/L98qBtT3bcZw8Sa4ZkmD89/uec9Ot0gpX0tIl0PWi93NH1LZXYaM+/hLP+ypQ0TZovxr9+ORQEutnLdkedVYCIGRr9EEcQ+QbQ7wd4L2p6YYy0y2cbTGFG5sEj5RpXGKqJ/Zp9JwVYC2VPsr1/y25brgrnXH/7inN7sbh4zhDNFfjnZrbhWlUlnuQM6520+UV7zTMFaPrtEg2BdlCd32QzbcnDprYn82M6x3qxC5mt/RKaK9UK7Pj6kemNbDZzt4L9rJBnYij75PBIkxfK53QzNE40EyVKe+p2e/xmVrsSp1hyLZNkKLeD38qTVxF0j5iziywDvDLdZbYUf3zLLZabD2tfbewO6ruX10+Bxo/rKXD12kAkwp0CrAI2y7deIEI5CYvLUd6FaJAw81jlWdTV2gYONgxrf1f1a6yA1s=
+# bkp-01.tcwglab.linaro.org:22 SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.3
+bkp-01.tcwglab.linaro.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBA5AV6b3iGfuCZbQJb3woinW7oJfKXPZTcABlTA1Pbp1gJD/oQ1+om8iiuEx9n3AkrMCMGwAeiJyNLHqwNcG9Y8=
+bkp-01.tcwglab.linaro.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDfJTJpNI5XQJawxfTHN0/D4CVZQoHm5hXizOleND8BAELbjlwU3+Xru8OFXPcANPj8THnbeWA5H2/DD6Fr8zu74Jc5+nHSotssSpsNHlqV/H/CkAQlHLT5YnMrD9u5RCVK3q3reHmzl/GXVB+3/Gwm/TGemdesIz2lzdUQ4WNRKCVDxAbJoSg0+J+mX0CQhxBeYBre3/J/hlhhdU7IGcYVEFEGkJjrK15QqOJftdOCiQWyj7vLTxjcqKh1KgOXrA8KJltjlbyWzSeN5Z9gY+wmLV/105Ed09XjcelYaz3IzKHPpkdRYwB/NXJ6vJkYSyM9IsWIXyTs/iNNzqgoEqU3
+[ci.linaro.org]:2020 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMA/tHxYJryx7PsMzCnuxYOBbmmMqBf9f0RSZb9qkmzntt5qefSVz+r3XDQ6LRZ5UoduyFyWgdzo6dKU8dd9RD4=
+[ci.linaro.org]:2020 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOXxLWEYkr0ySiZmxV4UuS3XHobxP7nStX95MOYU2vSa
+[ci.linaro.org]:2020 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+DSj5pflQQ2Y3zhJD0TnewNmiiRSrmrlTgXABHIuzTdyYag8qrZi+bOar1SLqW7KZRKCs9nPFlJj1/FanCcjDRFZaRLfIP2SfuPdtp7dUy3SvIMEsvFVbbZn3Qt32G6I5XoT+3ijQBJ2dYaVFvAY8K8bloGdzb1APSfD37rt+H+VPHaVUDaE/jkOX3R3EYJdIBFG5NumbvbyjpBfW5XQ7twJDSL+5DQLf7ZcNQyW6JyD5QLNPUdrIyyFb8f+EKl+MiqEes91HzpB3t47wKyEwgSTzt7ta6KCc+14G2E8zzzf8nRs41bHEtPlw+gPz9U97PH1R96pW6loGYF9UPKq1
+[ci.linaro.org]:2222 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCAxH/zCl/clVrd2Q8Tai5wea0homs6uPPf57qemRP/MFHOz4cIYKEbEczLD87b8u2dK+qfjKsr33jSmW8NbJbvJZ6bFhVUcpXl2BxAYbFQVZJq5YDsDEmRFbvkjzEjiRGHMKCl8ouh1c5lTLkLAKZMu2cKc7X0sIMqwrwOPn/RE8cCrDYkhxTZy2IJ8O8MrJoXmwjiT5mJpe5y7kGVzzESvHBbhtknLa5HuYuyzU88Zyi8m6LjJc9OOTxPBuXiO1c7Oblq7q2Sjk7X+iDld1+m+uUkI2Bro5P2oxneapx2As6R9IUc3zd+YGWcjSiI1CnCb1EykIBzS+yKDfoPg+M7
+dev-private-git.linaro.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOvq8E5HPzrBlxmckzsE3rz9LAx9c0faEfofALaO+UGC4HAst9fMaZcHaCqu+b8SVY/2VcBvMYMwO1ZPgOn0rXs=
+dev-private-git.linaro.org ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJg3tqy2kRCUbweyn8abttwt3Yoh9c+ncNTzRFe+zSnT
+dev-private-git.linaro.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC34bjTOKJIq8MVSeC5gddQlbR0hyvvTZbrpW7KXgCzkLTFZxa05wbz8VC1l7ruPotQBgrICgLYmrbjrASqcY//9OPLDa1Pf/MUIu2F2lA1W/5E3psGYmyC9GTvmjKgu39Rad5ujXMeMLjuzVPCmo+WhewgugDSV4Fcggd6B6YXHGtoE15ctSw4moerUq1+2BXVgFxUyMoGcpSCeLnbvWpmi6xWoGQOSnrQ4Z/VmZ5WZ87vQsiiWEAsqmMOHHacunnSph7uzQXJlHNajdeGnr2NF+EgcmQ0N6vivZDRLmRYuSmizjCOHSRZxSm/0UJC/ewVzp9BwRepiNKWsjb4gTMb
+[dev-private-review.linaro.org]:29418 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBDZ6AQ2WyZSO43657/fFpxGgVY73kUwh1R1eXpZp27T6lAI5XFQ7YS8HjQ2O7e4edGSpJHHrqVuZphKpqu11Lz8=
+[dev-private-review.linaro.org]:29418 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDqjPck6EM0H0tlZSKAnleuvhvhhB+jrcGPCt/DD8PB2
+[dev-private-review.linaro.org]:29418 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCofUDWYYwzE4YWotCffwCxLoRuVCMb6DP+eObwbTPHMe5asK94Y1jPNeK1yUVJIuIAUO8aA6pIq3uLKlusyGLZe1YBpM+7YX3HMOBfCOeOemHFxETlj/HC7islYLYT7Sm/DweiN1kxgP8Q/PhPIA5czCZGHS/+T/VLbMApyyzdTmswaqfgJejyK9juHAcmxT3Tupj2SGOuOamyKfhfsPxGwIchivy/mt7xBTk5cNiSDeLAfMn2rHsilfLjb+IoeE6EvtqG3+rTh+ttulHp2vSeZkK79tuyVWt+XOZjD4RDfk1taW9JjaafkyOW0VCF4gqOMfJU24u88xTCgqkgT1bN
+dev-private-review.linaro.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOvq8E5HPzrBlxmckzsE3rz9LAx9c0faEfofALaO+UGC4HAst9fMaZcHaCqu+b8SVY/2VcBvMYMwO1ZPgOn0rXs=
+dev-private-review.linaro.org ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJg3tqy2kRCUbweyn8abttwt3Yoh9c+ncNTzRFe+zSnT
+dev-private-review.linaro.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC34bjTOKJIq8MVSeC5gddQlbR0hyvvTZbrpW7KXgCzkLTFZxa05wbz8VC1l7ruPotQBgrICgLYmrbjrASqcY//9OPLDa1Pf/MUIu2F2lA1W/5E3psGYmyC9GTvmjKgu39Rad5ujXMeMLjuzVPCmo+WhewgugDSV4Fcggd6B6YXHGtoE15ctSw4moerUq1+2BXVgFxUyMoGcpSCeLnbvWpmi6xWoGQOSnrQ4Z/VmZ5WZ87vQsiiWEAsqmMOHHacunnSph7uzQXJlHNajdeGnr2NF+EgcmQ0N6vivZDRLmRYuSmizjCOHSRZxSm/0UJC/ewVzp9BwRepiNKWsjb4gTMb
+git.linaro.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBONeIVl09BaG0iDOqF/qZjDun8fktYdD0Zl2fRAkSGT6Q7ULAXWJZA7IwstvcSs5w9SRV6x/lNc3CqlHwMFaABc=
+git.linaro.org ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJhG84gKI+louuRb3NVPABVjr81G7v1RebFeMNvfPPNv
+git.linaro.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8Q8j887I9mBD2va9C7gWl4Cr8agHWxuFHfDUWaqiygI9jA4w2YC7mo5oJMqwUk2DsvPDLuU5Z6yyKSA7Cko+L0MnKfNMzQ8e00ZXGDBq8bh1tRKstFselAFmmg+5DhM9q9HPjpKYzbAxU6rxmdFbSc+ktE0rhtmciThVT3YW3bMs3g+D+6sf6ER9UkSpbdZ7skKFXBHw2t1BWaPrvW4L8GMFAokgXUKOE8e1WZkQuCcseIz8J9Hz1p/liyiiTPVQnjGyleUnUY0pZA3ViB6pS317BH5Kvd8aX8x0vSwCIs30rpkmBam9C0b2uj2jWk3GrmHYjVHebMAW376VSLTZV
+git-us.linaro.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBONeIVl09BaG0iDOqF/qZjDun8fktYdD0Zl2fRAkSGT6Q7ULAXWJZA7IwstvcSs5w9SRV6x/lNc3CqlHwMFaABc=
+git-us.linaro.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8Q8j887I9mBD2va9C7gWl4Cr8agHWxuFHfDUWaqiygI9jA4w2YC7mo5oJMqwUk2DsvPDLuU5Z6yyKSA7Cko+L0MnKfNMzQ8e00ZXGDBq8bh1tRKstFselAFmmg+5DhM9q9HPjpKYzbAxU6rxmdFbSc+ktE0rhtmciThVT3YW3bMs3g+D+6sf6ER9UkSpbdZ7skKFXBHw2t1BWaPrvW4L8GMFAokgXUKOE8e1WZkQuCcseIz8J9Hz1p/liyiiTPVQnjGyleUnUY0pZA3ViB6pS317BH5Kvd8aX8x0vSwCIs30rpkmBam9C0b2uj2jWk3GrmHYjVHebMAW376VSLTZV
+lab.validation.linaro.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFZDLd4f9cph9A64+kXUpGvuRmInB3HAtHU9T6wVIsp4HkYLLZD59I4lF/u2VLfM7j10XMNPO7ybOJMM+1zIZlM=
+lab.validation.linaro.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDtto5bsPJ3NuXsWtwMR8bsAzLvkBstmF1QP+eC6jUBsCDHMtBW/zAWJYNPDr30vRkV7J8D64Pd91rgjbqF8mOPDlyVlln03dYtOV3hzVuXLZfxodslJsw4lB+ZhxLfcZAKqqFURJEhrJNJmtFBprxFRbdS1iQHJHJohg3zS9zlLFvUpZGWooLFEM2z2NdUfSiR12ePvdW1YsEimJR/b3h1it/Wot0uEB6VONZGyMrrWvsntJV1NdQFxJR8waTz1sBvQQBJGX+SgEXY1CB3AUiF4yIy5WZ/4YCOk0kO9qABvV0Ks357OU5uY5GMgalAy2RJyvceNf6erlR4vwmpdnDH
+people.linaro.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCvoDYbs7ax/5aYtXPFgkBLVGZSV73A6yqC5vKpFwo9dO84ZEbKjEn1UsGrBIbmlTyxOeR0i/YO/7jYmuDwya8k=
+people.linaro.org ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOhfsxmFSqRafTEUFsSAmu+rhU7TJqIadigy69shtg7Q
+people.linaro.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC4rQUZonhfreNKqM7SKKcpYpMUZNgS79hAcZbF62VUQheyoebfJCfvBxwMMdwcXKZgLuqpkYyCzJzjVeWzIr3MN0mJn6ZQuADlPVCNrhQTbSxOU404MLjwkUyy52RAq4nJ2JBwQ+SM3pjjEl+daeoWPpqfZdBI1PewXlsSpLxjTFXAj77sz8Vawu4xBnKW8n42lkINzG+gHPmxQtVXHNM/UQPsq90t8qFTeEg/Puax69Q90KqdQNiCRv1cqQV1kAB9t3AwkuvSgb32cpWCv1eVOXqbUwg4YpWYp6QfmqRra6KYEwG6KhBP3F8UGsYzZ9OWeSgf9i3r5zeJShbFEKY8JA2xleZhCLcKgaN3TDhmrOQwWYUJ6O8VkpkeZGoxt+3Tq8rV5pODnI5tm8m3nOqACYcsioeG4XFIVWc0muonIQSnNFu13mnLvb+uiIjDifyBFIHyZHfKXz7EsstIMXV+KOiRaBcBFpzMVJozcmbbDV6uO7yzrgYy4fLLBIsezU0=
+[review.linaro.org]:29418 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBPzkmW4axU/BXRtRkR42I8FVvWjGhB4CUtTC3cSkhu6L0Oo9i+ija/hahkPT0DC+S0k/vEL7s4mC5SrdNCeJO/0=
+[review.linaro.org]:29418 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFc6ZLtKFrdDI1dYcnYnfrZ9aZDSEVuYvjrsuGDXE0hj
+[review.linaro.org]:29418 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMfTLkTmsbtahAiVJTKXRFbR9MQ/vDH/JPj4QN3XPHJuubxLhUf8WObEBtML7J11uvVM1oDTwM5YG5yjyBnc+85OaQaB9tMPDheGhfMG40F4vxdSnQL29ihyrls0hrFTY9UZ4Y2FmJwYL0rOnGU7iPyNuExQwfg2bkdw67aH9nEGjSd2eXYl2bI4DHujy5GJiV3dR9TlUF0iaSeHVSIX5t9I/BXK+AiSqHTrvwdGGi9XvL6xEWYMOZOpJnCH8Q4OSibsFfQXnCMgIFeO7J/ZMGXqltXOtztgQMr8VvRRD3S+Lcp8yKb5aUjWwoCxb4YzEUbQE04SRVeAGjsfNJcXgT
+review.linaro.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBONeIVl09BaG0iDOqF/qZjDun8fktYdD0Zl2fRAkSGT6Q7ULAXWJZA7IwstvcSs5w9SRV6x/lNc3CqlHwMFaABc=
+review.linaro.org ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJhG84gKI+louuRb3NVPABVjr81G7v1RebFeMNvfPPNv
+review.linaro.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8Q8j887I9mBD2va9C7gWl4Cr8agHWxuFHfDUWaqiygI9jA4w2YC7mo5oJMqwUk2DsvPDLuU5Z6yyKSA7Cko+L0MnKfNMzQ8e00ZXGDBq8bh1tRKstFselAFmmg+5DhM9q9HPjpKYzbAxU6rxmdFbSc+ktE0rhtmciThVT3YW3bMs3g+D+6sf6ER9UkSpbdZ7skKFXBHw2t1BWaPrvW4L8GMFAokgXUKOE8e1WZkQuCcseIz8J9Hz1p/liyiiTPVQnjGyleUnUY0pZA3ViB6pS317BH5Kvd8aX8x0vSwCIs30rpkmBam9C0b2uj2jWk3GrmHYjVHebMAW376VSLTZV
diff --git a/tcwg-base/home-data/tcwg-buildslave/.ssh/known_hosts-regen.sh b/tcwg-base/home-data/tcwg-buildslave/.ssh/known_hosts-regen.sh
new file mode 100755
index 00000000..154e2209
--- /dev/null
+++ b/tcwg-base/home-data/tcwg-buildslave/.ssh/known_hosts-regen.sh
@@ -0,0 +1,78 @@
+#!/bin/bash
+
+resolve_ips()
+{
+ local i
+ while [ "$#" -gt 0 ]; do
+ i="$1"
+ shift
+ # Output the original entry
+ echo "$i"
+ # Skip entries that are already IPs
+ if echo "$i" | grep -q "^[0-9\.]\+\$"; then
+ continue
+ fi
+ host "$i" | grep ".* has address " | sed -e "s/.* has address //"
+ done
+}
+
+DEST=$(dirname "$0")/known_hosts
+
+echo "# This file is generated automatically with known_hosts-regen.sh. DO NOT EDIT" > $DEST
+(
+ hosts=(
+ lab.validation.linaro.org
+ people.linaro.org
+ git.linaro.org
+ git-us.linaro.org
+ dev-private-git.linaro.org
+ review.linaro.org
+ dev-private-review.linaro.org
+ 34.247.40.177 # tcwg-g3-01
+ 34.244.87.161 # tcwg-g3-02
+ 52.48.47.199 # tcwg-g3-04
+ 213.146.141.69 # tcwg-fx-01
+ 213.146.155.110 # tcwg-fx-02
+ 213.146.155.6 # tcwg-fx-03
+ 213.146.141.8 # tcwg-fx-04
+ 139.178.86.199 # tcwg-jade-01
+ 139.178.86.6 # tcwg-snow-02
+ 139.178.84.207 # tcwg-jade-03
+ 145.40.80.173 # tcwg-jade-04
+ 147.75.55.117 # tcwg-jade-05
+ 139.178.86.193 # tcwg-jade-06
+ 95.216.72.225 # tcwg-ex42-01
+ )
+ ssh-keyscan -t rsa,dsa,ecdsa,ed25519 $(resolve_ips "${hosts[@]}")
+
+ hosts=(
+ review.linaro.org
+ dev-private-review.linaro.org
+ )
+ ssh-keyscan -p29418 -t rsa,dsa,ecdsa,ed25519 $(resolve_ips "${hosts[@]}")
+
+ hosts=(
+ ci.linaro.org
+ )
+ ssh-keyscan -p2020 -t rsa,dsa,ecdsa,ed25519 $(resolve_ips "${hosts[@]}")
+
+ hosts=(
+ ci.linaro.org
+ )
+ ssh-keyscan -p2222 -t rsa,dsa,ecdsa,ed25519 $(resolve_ips "${hosts[@]}")
+
+ # Finally, hard-code bkp-01.tcwglab's keys, because its ssh port is
+ # accessible only from ci.linaro.org's IP.
+ cat <<EOF
+# bkp-01.tcwglab.linaro.org:22 SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.3
+bkp-01.tcwglab.linaro.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDfJTJpNI5XQJawxfTHN0/D4CVZQoHm5hXizOleND8BAELbjlwU3+Xru8OFXPcANPj8THnbeWA5H2/DD6Fr8zu74Jc5+nHSotssSpsNHlqV/H/CkAQlHLT5YnMrD9u5RCVK3q3reHmzl/GXVB+3/Gwm/TGemdesIz2lzdUQ4WNRKCVDxAbJoSg0+J+mX0CQhxBeYBre3/J/hlhhdU7IGcYVEFEGkJjrK15QqOJftdOCiQWyj7vLTxjcqKh1KgOXrA8KJltjlbyWzSeN5Z9gY+wmLV/105Ed09XjcelYaz3IzKHPpkdRYwB/NXJ6vJkYSyM9IsWIXyTs/iNNzqgoEqU3
+# bkp-01.tcwglab.linaro.org:22 SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.3
+bkp-01.tcwglab.linaro.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBA5AV6b3iGfuCZbQJb3woinW7oJfKXPZTcABlTA1Pbp1gJD/oQ1+om8iiuEx9n3AkrMCMGwAeiJyNLHqwNcG9Y8=
+# bkp-01.tcwglab.linaro.org:22 SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.3
+# 51.148.40.55:22 SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.3
+# 51.148.40.55:22 SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.3
+51.148.40.55 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDfJTJpNI5XQJawxfTHN0/D4CVZQoHm5hXizOleND8BAELbjlwU3+Xru8OFXPcANPj8THnbeWA5H2/DD6Fr8zu74Jc5+nHSotssSpsNHlqV/H/CkAQlHLT5YnMrD9u5RCVK3q3reHmzl/GXVB+3/Gwm/TGemdesIz2lzdUQ4WNRKCVDxAbJoSg0+J+mX0CQhxBeYBre3/J/hlhhdU7IGcYVEFEGkJjrK15QqOJftdOCiQWyj7vLTxjcqKh1KgOXrA8KJltjlbyWzSeN5Z9gY+wmLV/105Ed09XjcelYaz3IzKHPpkdRYwB/NXJ6vJkYSyM9IsWIXyTs/iNNzqgoEqU3
+# 51.148.40.55:22 SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.3
+51.148.40.55 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBA5AV6b3iGfuCZbQJb3woinW7oJfKXPZTcABlTA1Pbp1gJD/oQ1+om8iiuEx9n3AkrMCMGwAeiJyNLHqwNcG9Y8=
+EOF
+) | sort -u >> $DEST
diff --git a/tcwg-base/home-data/tcwg-buildslave/.ssh/ssh-tcwglab-nc.sh b/tcwg-base/home-data/tcwg-buildslave/.ssh/ssh-tcwglab-nc.sh
new file mode 100755
index 00000000..c5e193fa
--- /dev/null
+++ b/tcwg-base/home-data/tcwg-buildslave/.ssh/ssh-tcwglab-nc.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+if grep -q "nameserver 192.168.16.3" /etc/resolv.conf; then
+ # If we are in one of TCWG Cambridge subnetworks, then use straight nc.
+ exec nc "$@"
+else
+ # Otherwise jump through ci.linaro.org
+ exec ssh -Snone ci.linaro.org nc "$@"
+fi
diff --git a/tcwg-base/home-data/tcwg-ci-bot/.ssh/authorized_keys b/tcwg-base/home-data/tcwg-ci-bot/.ssh/authorized_keys
new file mode 100644
index 00000000..dc644d78
--- /dev/null
+++ b/tcwg-base/home-data/tcwg-ci-bot/.ssh/authorized_keys
@@ -0,0 +1 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCVxF0iAVjNCswiwi81LEiJFyrWsyYGF1MuEaMuAk2iE5Zlvwd/JohWQqUhW4+qwFN5tH0jrNxdbLWSmJUOkqHQWyzV3/MOgVeSN3KIZk5z3o9uRoksJWnulAe8n2InAM4IrUpMd6+PDS0zeFUe+0Tuso5JQUYbwjuioMqCOGB7mjyPUF2+bp7Su1XjXDrFSC2LFQHGVW0v+30N+UXIjmi87avqk7mGLlLZgCJLRUI77XEPZLNsPsNVFFnRKP9uJZySB4TO4V0++2HshGeJE7vWPEMYHw42rXD8DN97KdhiihK4c/2xuhtZbS61Od+8HyBw5mF40L1gLNFYfRADX2I2U0fjq8IindbWIbHmV161nil7VRjJahtKQEiX/++lqOVsKzZ1v3MIqFKLLc7vkbTwtWC9D6cxRZkOLwO7Pma73CUAo+ghBP/TrZ89CWlLFnB2oFMuf+MHUq++u3KmuDRVrgCiC1Y06ooNPUyQuC4nQlYzuAaWWbjxScZ5dH0jeT8=
diff --git a/tcwg-base/home-data/thiago.bauermann/.ssh/authorized_keys b/tcwg-base/home-data/thiago.bauermann/.ssh/authorized_keys
new file mode 100644
index 00000000..90de4217
--- /dev/null
+++ b/tcwg-base/home-data/thiago.bauermann/.ssh/authorized_keys
@@ -0,0 +1 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDFku2lxWLlkThFzW2EpLmxB7JXRj4XCyLHbkTrcGDRm8myIQoYAMmtrMyHbN5L/nhuIKD6FIpzh5L1b1UTONUTu0BhqNs5KCFc2uFr5jtayAwI/cIB4jgaJ9QFKTvImKQcOSjnPZBXi267dcWBKRHSASZItXiKIXXDeYxM6zA+N629AaaaEd8U7geZmpkDkREa2QKfqTcxKMOHbAncj1g52IWBzfuAGH/8103n3LdzYx4xf/Ijc4LF6gZdsTQnWO2U56GtfjtskSEuY+yuSA/K32Wig5z3bvNk8SRIrEm0ath6FMLC1SFS8dEh/MfsQjOZoi8QG5RPNFqJ2qGk5MFPzl3/47SqazrJ7lbFTai25BtK2gTxdl+233oY2CU7YJPuo5PojWm3m6l2eGytnqSwAyyZrx4QJ+ElubReUoOVSArdE8Flb55mqA471+em1VcYXNZHaKxdfi255UsxtJyT29HXRXuMOCFPS5asxqMwKmQ0Rp/mzBUiVNtbX/PYbzE= work
diff --git a/tcwg-base/home-data/thiago.bauermann/.ssh/config b/tcwg-base/home-data/thiago.bauermann/.ssh/config
new file mode 120000
index 00000000..5f9d8251
--- /dev/null
+++ b/tcwg-base/home-data/thiago.bauermann/.ssh/config
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/config \ No newline at end of file
diff --git a/tcwg-base/home-data/thiago.bauermann/.ssh/config.d b/tcwg-base/home-data/thiago.bauermann/.ssh/config.d
new file mode 120000
index 00000000..1af9bec1
--- /dev/null
+++ b/tcwg-base/home-data/thiago.bauermann/.ssh/config.d
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/config.d \ No newline at end of file
diff --git a/tcwg-base/home-data/thiago.bauermann/.ssh/known_hosts b/tcwg-base/home-data/thiago.bauermann/.ssh/known_hosts
new file mode 120000
index 00000000..936136a2
--- /dev/null
+++ b/tcwg-base/home-data/thiago.bauermann/.ssh/known_hosts
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/known_hosts \ No newline at end of file
diff --git a/tcwg-base/home-data/thiago.bauermann/.ssh/ssh-tcwglab-nc.sh b/tcwg-base/home-data/thiago.bauermann/.ssh/ssh-tcwglab-nc.sh
new file mode 120000
index 00000000..6eddeb50
--- /dev/null
+++ b/tcwg-base/home-data/thiago.bauermann/.ssh/ssh-tcwglab-nc.sh
@@ -0,0 +1 @@
+../../tcwg-buildslave/.ssh/ssh-tcwglab-nc.sh \ No newline at end of file
diff --git a/tcwg-base/install-armhf-perf-workaround.sh b/tcwg-base/install-armhf-perf-workaround.sh
new file mode 100755
index 00000000..a7b97d0b
--- /dev/null
+++ b/tcwg-base/install-armhf-perf-workaround.sh
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+# In some cases perf report crashes when run from armhf container on
+# ARMv8 machine. It's not clear what it causing this, but running under
+# valgrind seems to workaround the issue.
+
+cd /usr/lib/linux-tools
+
+while read perf_bin; do
+ if [ -f "$perf_bin.real" ]; then
+ continue
+ fi
+
+ mv "$perf_bin" "$perf_bin.real"
+ cat > "$perf_bin" <<'EOF'
+#!/bin/bash
+
+exec valgrind --log-file=/dev/null -- "$0.real" "$@"
+EOF
+ chmod +x "$perf_bin"
+done < <(find -name perf)
diff --git a/tcwg-base/install-gcc-latest.sh b/tcwg-base/install-gcc-latest.sh
new file mode 100755
index 00000000..a05a588c
--- /dev/null
+++ b/tcwg-base/install-gcc-latest.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+set -euf -o pipefail
+set -x
+
+if ! which gcc-latest; then
+ apt-get update
+ DEBIAN_FRONTEND=noninteractive apt-get install -y software-properties-common
+ add-apt-repository -y ppa:ubuntu-toolchain-r/test
+ ver=$(apt-cache search "^gcc-[0-9]+\$" | cut -d- -f2 | sort -g | tail -n1)
+ DEBIAN_FRONTEND=noninteractive apt-get install -y gcc-$ver g++-$ver
+ ln -s $(which gcc-$ver) /usr/bin/gcc-latest
+ ln -s $(which g++-$ver) /usr/bin/g++-latest
+fi
diff --git a/tcwg-base/new-user.sh b/tcwg-base/new-user.sh
new file mode 100755
index 00000000..18cd825f
--- /dev/null
+++ b/tcwg-base/new-user.sh
@@ -0,0 +1,129 @@
+#!/bin/bash
+
+set -euf -o pipefail
+
+usage ()
+{
+ exit 1
+}
+
+passwd_ent=""
+group=""
+home_data="default"
+update=false
+user=""
+verbose=false
+
+while [ $# -gt 0 ]; do
+ case "$1" in
+ --passwd) passwd_ent="$2" ;;
+ --group) group="$2" ;;
+ --home-data) home_data="$2" ;;
+ --update) update="$2" ;;
+ --user) user="$2" ;;
+ --verbose) verbose="$2" ;;
+ *) echo "ERROR: Wrong option: $1"; usage ;;
+ esac
+ shift 2
+done
+
+if $verbose; then set -x; fi
+
+if [ x"$home_data" = x"default" ]; then
+ home_data=""
+ if [ -d /home-data/ ]; then
+ home_data="/home-data"
+ fi
+fi
+
+if [ "$passwd_ent" = "" ] && [ "$home_data" != "" ] && [ "$user" != "" ]; then
+ passwd_ent=$(grep "^${user%%:*}:" "$home_data/passwd")
+fi
+
+if [ x"$group" != x"" ]; then
+ gid=$(echo "$group" | cut -s -d: -f 2)
+ group=$(echo "$group" | cut -d: -f 1)
+
+ if [ x"$gid" != x"" ]; then
+ action="add"
+ if $update && getent group $group >/dev/null; then
+ action="mod"
+ fi
+ group${action} -g $gid $group
+ fi
+
+ group_opt="-g $group"
+elif [ x"$passwd_ent" != x"" ]; then
+ gid=$(echo "$passwd_ent" | cut -d: -f 4)
+ group_opt="-g $gid"
+else
+ group_opt=""
+ gid=""
+fi
+
+if [ x"$user" = x"" ]; then
+ user=$(echo "$passwd_ent" | cut -s -d: -f 1,3)
+fi
+
+uid=$(echo "$user" | cut -s -d: -f 2)
+user=$(echo "$user" | cut -d: -f 1)
+
+if [ "$uid" = "" ] && [ "$passwd_ent" != "" ]; then
+ uid=$(echo "$passwd_ent" | cut -d: -f 3)
+fi
+
+if [ x"$user" != x"" ]; then
+ if [ x"$passwd_ent" != x"" ]; then
+ comment=$(echo "$passwd_ent" | cut -d: -f 5)
+ shell=$(echo "$passwd_ent" | cut -d: -f 7)
+ fi
+
+ aux_groups_opt=""
+ if [ x"$home_data" != x"" ]; then
+ aux_groups=()
+ for g in $(grep "\(:\|,\)$user\(,\|\$\)" "$home_data/group" \
+ | grep -v ":x:x:" | cut -d: -f 1); do
+ if [ x"$g" = x"$group" ]; then
+ continue
+ fi
+ # FIXME: Also skip groups matching $gid.
+ aux_groups+=("$g")
+ done
+ if [ ${#aux_groups[@]} != 0 ]; then
+ aux_groups_opt="-G $(echo "${aux_groups[@]}" | tr ' ' ',')"
+ fi
+ fi
+
+ action="add"
+ if $update && getent passwd $user >/dev/null; then
+ action="mod"
+ fi
+ user${action} $group_opt $aux_groups_opt \
+ -m -d /home/$user \
+ ${uid:+-u $uid} \
+ ${comment:+-c "$comment"} \
+ ${shell:+-s "$shell"} \
+ $user
+
+ for g in "${aux_groups[@]}"; do
+ if [ "$g" != "tcwg-sudo" ]; then
+ continue
+ fi
+
+ sudoers_file=/etc/sudoers.d/$(echo $user | tr "." "-")
+ # Give users ability to become root, tcwg-infra users.
+ cat <<EOF > $sudoers_file
+$user ALL = NOPASSWD: ALL
+$user ALL = (%tcwg-infra) NOPASSWD: ALL
+EOF
+ chmod 0440 $sudoers_file
+ break
+ done
+
+ if [ x"$home_data" != x"" ]; then
+ chown -R $user${gid:+:$gid} $home_data/$user/
+ chmod -R go-w $home_data/$user/
+ chmod -R go-rwx $home_data/$user/.ssh/
+ rsync -ab $home_data/$user/ /home/$user/
+ fi
+fi
diff --git a/tcwg-base/nvidia-power-cycle.sh b/tcwg-base/nvidia-power-cycle.sh
new file mode 100755
index 00000000..db3b5a12
--- /dev/null
+++ b/tcwg-base/nvidia-power-cycle.sh
@@ -0,0 +1,67 @@
+#!/bin/bash
+
+# This script collates PDU routines located in
+# support.tcwglab:/usr/local/bin/pcycle-* .
+
+case "$*" in
+ "tcwg-qc-"*)
+ case "$*" in
+ "tcwg-qc-01")
+ control_usb_id="usb-Linaro_DebugBoard_3b89375175a4451502020223237060ff-if00"
+ # console_usb_id="usb-FTDI_FT232R_USB_UART_AU04FPO2-if00-port0"
+ ;;
+ "tcwg-qc-02")
+ control_usb_id="usb-Linaro_DebugBoard_cfe5b51575a4451502020223e22160ff-if00"
+ # console_usb_id="usb-FTDI_FT232R_USB_UART_AU04FQ0U-if00-port0"
+ ;;
+ *)
+ echo "Unknown board $*"
+ exit 1
+ ;;
+ esac
+ exec ssh -p22 root@dev-01.tcwglab tio-power-cycle.exp "$control_usb_id"
+ ;;
+ "tcwg-apm-"*|"tcwg-sq-"*|"tcwg-x15-"*)
+ pdu=tpdu01
+ case "$*" in
+ "tcwg-apm-01") port="18" ;;
+ "tcwg-apm-02") port="4" ;;
+ "tcwg-apm-03") port="20" ;;
+ "tcwg-apm-05") port="7"; pdu="192.168.16.252" ;;
+ "tcwg-sq-01") port="12" ;;
+ "tcwg-sq-02") port="13" ;;
+ "tcwg-x15-01") port="19" ;;
+ *)
+ echo "Unknown board $*"
+ exit 1
+ ;;
+ esac
+ exec ssh services.tcwglab /usr/local/lab-scripts/snmp_pdu_control \
+ --hostname $pdu --port $port --command reboot
+ ;;
+ "build-"*|"dev-"*)
+ case "$*" in
+ "build-01") ip="192.168.19.23" ;;
+ "build-02") ip="192.168.19.24" ;;
+ "build-03") ip="192.168.19.25" ;;
+ "build-04") ip="192.168.19.26" ;;
+ "build-05") ip="192.168.19.27" ;;
+ "build-07") ip="192.168.19.7" ;;
+ "build-08") ip="192.168.19.8" ;;
+ "build-09") ip="192.168.19.9" ;;
+ "build-10") ip="192.168.19.222" ;;
+ "dev-01") ip="192.168.19.40" ;;
+ *)
+ echo "Unknown board $*"
+ exit 1
+ ;;
+ esac
+ exec ssh services.tcwglab ipmitool \
+ -I lanplus -H $ip -U ADMIN -P ADMIN power cycle
+ ;;
+ *)
+ # nvidia-reset script lives at
+ # https://git.linaro.org/lava/lava-lab.git/tree/shared/tcwg-scripts/nvidia-reset
+ exec ssh -p22 dev-01.tcwglab nvidia-reset "$*"
+ ;;
+esac
diff --git a/tcwg-base/nvidia-serial.sh b/tcwg-base/nvidia-serial.sh
new file mode 100755
index 00000000..2c3433f2
--- /dev/null
+++ b/tcwg-base/nvidia-serial.sh
@@ -0,0 +1,47 @@
+#!/bin/bash
+
+case "$*" in
+ "llvm-tk1-01") port="7001" ;;
+ "llvm-tk1-02") port="7002" ;;
+ "llvm-tk1-03") port="7003" ;;
+ "llvm-tk1-04") port="7004" ;;
+ "llvm-tk1-05") port="7005" ;;
+ "llvm-tk1-06") port="7006" ;;
+ "llvm-tk1-07") port="7007" ;;
+ "llvm-tk1-08") port="7008" ;;
+ "llvm-tk1-09") port="7009" ;;
+ "tcwg-apm-05") port="7017" ;;
+ "tcwg-sq-01") port="7011" ;;
+ "tcwg-sq-02") port="7012" ;;
+ "tcwg-tk1-01") port="7025" ;;
+ "tcwg-tk1-02") port="7026" ;;
+ "tcwg-tk1-03") port="7027" ;;
+ "tcwg-tk1-04") port="7013" ;;
+ "tcwg-tk1-05") port="7014" ;;
+ "tcwg-tk1-06") port="7015" ;;
+ "tcwg-tk1-07") port="7019" ;;
+ "tcwg-tk1-08") port="7020" ;;
+ "tcwg-tk1-09") port="7021" ;;
+ "tcwg-tk1-10") port="7016" ;;
+ "tcwg-tx1-01") port="7001" ;;
+ "tcwg-tx1-02") port="7002" ;;
+ "tcwg-tx1-03") port="7003" ;;
+ "tcwg-tx1-04") port="7004" ;;
+ "tcwg-tx1-05") port="7005" ;;
+ "tcwg-tx1-06") port="7006" ;;
+ "tcwg-tx1-07") port="7007" ;;
+ "tcwg-tx1-08") port="7008" ;;
+ "tcwg-tx1-09") port="7101" ;;
+ *)
+ echo "Unknown board $*"
+ exit 1
+esac
+
+case "$*" in
+ *"-apm-"*) serial_host=192.168.16.255 ;;
+ *"-sq-"*) serial_host=192.168.16.2 ;;
+ *"-tk1-"*) serial_host=192.168.16.255 ;;
+ *"-tx1-"*) serial_host=localhost ;;
+esac
+
+exec ssh -p22 -t dev-01.tcwglab telnet "$serial_host" "$port"
diff --git a/tcwg-base/postfix-main.cf.in b/tcwg-base/postfix-main.cf.in
deleted file mode 100644
index 78a9b695..00000000
--- a/tcwg-base/postfix-main.cf.in
+++ /dev/null
@@ -1,50 +0,0 @@
-# See /usr/share/postfix/main.cf.dist for a commented, more complete version
-
-
-# Debian specific: Specifying a file name will cause the first
-# line of that file to be used as the name. The Debian default
-# is /etc/mailname.
-#myorigin = /etc/mailname
-
-smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
-biff = no
-
-# appending .domain is the MUA's job.
-append_dot_mydomain = no
-
-# Uncomment the next line to generate "delayed mail" warnings
-#delay_warning_time = 4h
-
-readme_directory = no
-
-# TLS parameters
-smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
-smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
-smtpd_use_tls=yes
-smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
-smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
-
-# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
-# information on enabling SSL in the smtp client.
-
-smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
-myhostname = @@MYHOSTNAME@@
-alias_maps = hash:/etc/aliases
-alias_database = hash:/etc/aliases
-myorigin = /etc/mailname
-mydestination = @@MYHOSTNAME@@, localhost.localdomain, localhost
-relayhost = [@@MAILHOST@@]:@@MAILPORT@@
-mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
-mailbox_size_limit = 0
-recipient_delimiter = +
-inet_interfaces = loopback-only
-inet_protocols = all
-
-smtp_sasl_auth_enable = yes
-smtp_sasl_security_options = noanonymous
-smtp_sasl_password_maps = hash:/etc/postfix/sasl_password
-smtp_use_tls = yes
-smtp_tls_security_level = encrypt
-smtp_tls_note_starttls_offer = yes
-
-smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
diff --git a/tcwg-base/postfix-sasl_password.in b/tcwg-base/postfix-sasl_password.in
deleted file mode 100644
index 580f5cf7..00000000
--- a/tcwg-base/postfix-sasl_password.in
+++ /dev/null
@@ -1 +0,0 @@
-[@@MAILHOST@@]:@@MAILPORT@@ @@MAILUSER@@:@@MAILPASSWORD@@
diff --git a/tcwg-base/tcwg-build/Dockerfile.in b/tcwg-base/tcwg-build/Dockerfile.in
index 9810a860..db34a084 100644
--- a/tcwg-base/tcwg-build/Dockerfile.in
+++ b/tcwg-base/tcwg-build/Dockerfile.in
@@ -1,16 +1,52 @@
FROM linaro/ci-#{ARCH}-tcwg-base-ubuntu:#{DISTRO}
-RUN groupadd -g 9000 tcwg-infra \
- && useradd -m -g tcwg-infra -G kvm -u 11827 tcwg-buildslave \
- && useradd -m -g tcwg-infra -G kvm -u 12326 tcwg-benchmark \
- && echo '%tcwg-infra ALL = NOPASSWD: ALL' > /etc/sudoers.d/jenkins \
- && chmod 0440 /etc/sudoers.d/jenkins \
- && mkdir -p /home/tcwg-buildslave/workspace
+RUN while read line; do \
+ if [ x"$(echo "$line" | cut -d: -f 4)" != x"9000" ]; then \
+ continue; \
+ fi; \
+ new-user.sh --passwd "$line"; \
+ user=$(echo "$line" | cut -d: -f 1); \
+ sudo -i -u $user ccache -p; \
+ done </home-data/passwd
-COPY tcwg-buildslave /home/tcwg-buildslave
-COPY tcwg-benchmark /home/tcwg-benchmark
+# We create ccache directory as tcwg-buildslave, because otherwise
+# "docker run -v ccache-volume:/home/tcwg-buildslave/.ccache" will create
+# it owned by root:root, which will break builds. We set ccache size:
+# - 50G is a bare minimum to ccache the gnu/llvm builds
+# - The aa64/amd64 build machines have enough disk to support 50G
+# - TK1s have small disk, so try to get by with 10G.
+RUN sudo -i -u tcwg-buildslave mkdir -p /home/tcwg-buildslave/.ccache \
+#if ARCH_amd64 || ARCH_arm64
+ && sudo -i -u tcwg-buildslave ccache -M 50G
+#else
+ && sudo -i -u tcwg-buildslave ccache -M 10G
+#endif
-RUN chown -R tcwg-buildslave:tcwg-infra /home/tcwg-buildslave/ \
- && chown -R tcwg-benchmark:tcwg-infra /home/tcwg-benchmark/ \
- && chmod 0700 /home/tcwg-buildslave/.ssh/ /home/tcwg-benchmark/.ssh/ \
- && chmod 0600 /home/tcwg-buildslave/.ssh/* /home/tcwg-benchmark/.ssh/*
+#if ARCH_amd64
+# Install wine.
+RUN \
+ apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ wine-stable \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+#endif
+
+#if DISTRO_focal
+# Add llvm 11 to get llvm-objdump with support for --disassemble-symbols.
+# We need this in bmk-scripts.git/symbol_md5sum.sh.
+RUN \
+ apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ llvm-11 \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/* \
+ # This will override llvm-objdump installed by tcwg-base's llvm package.
+ && ln -s `which llvm-objdump-11` /usr/local/bin/llvm-objdump
+#endif
diff --git a/tcwg-base/tcwg-build/build.sh b/tcwg-base/tcwg-build/build.sh
index 8624b7fd..1feb8c41 100755
--- a/tcwg-base/tcwg-build/build.sh
+++ b/tcwg-base/tcwg-build/build.sh
@@ -2,11 +2,15 @@
set -e
+# Can't run multiple copies of this script
+exec 9<Dockerfile
+flock -x 9
+
trap cleanup_exit INT TERM EXIT
cleanup_exit()
{
- rm -rf tcwg-buildslave tcwg-benchmark
+ :
}
export LANG=C
@@ -16,11 +20,7 @@ name=$(basename ${PWD} | cut -f3- -d '-')
image=linaro/ci-${arch}-${name}-ubuntu:${distro}
top=$(git rev-parse --show-toplevel)
-rsync -a $top/tcwg-base/tcwg-build/tcwg-buildslave/ ./tcwg-buildslave/
-rsync -a $top/tcwg-base/tcwg-build/tcwg-benchmark/ ./tcwg-benchmark/
-
(cd ..; ./build.sh)
-"$top"/tcwg-base/validate-dockerfile.sh Dockerfile
-docker pull $image 2>/dev/null || true
+"$top"/tcwg-base/validate-checksum.sh Dockerfile
docker build --tag=$image .
echo $image > .docker-tag
diff --git a/tcwg-base/tcwg-build/gerrit-branches b/tcwg-base/tcwg-build/gerrit-branches
deleted file mode 120000
index 11f6d349..00000000
--- a/tcwg-base/tcwg-build/gerrit-branches
+++ /dev/null
@@ -1 +0,0 @@
-../gerrit-branches \ No newline at end of file
diff --git a/tcwg-base/tcwg-build/tcwg-benchmark/.ssh/config b/tcwg-base/tcwg-build/tcwg-benchmark/.ssh/config
deleted file mode 100644
index 47e5dbf0..00000000
--- a/tcwg-base/tcwg-build/tcwg-benchmark/.ssh/config
+++ /dev/null
@@ -1,60 +0,0 @@
-# === BEGIN: TCWG SSH configuration ===
-#
-# !!! THIS MUST BE COPIED TO THE START OF YOUR ~/.SSH/CONFIG FILE. !!!
-# !!! IF YOU REPORT A PROBLEM WITH SSH, AND THIS CONFIGURATION IS NOT !!!
-# !!! AT THE START OF YOUR FILE -- YOU HAVE OBVIOUSLY MISSED THIS VERY !!!
-# !!! IMPORTANT NOTE. AS PENANCE, YOU WILL READ THIS NOTE OUT LOUD. !!!
-#
-
-Host *.tcwglab *.aus-colo people.linaro.org aus-colo.linaro.org lab.validation.linaro.org
- #User @LDAP_USER@
- #IdentityFile ~/.ssh/id_rsa
-
-# Proxy connections to custom ssh servers (inside containers) on firewalled
-# hosts through "main" ssh server on that host.
-# E.g., "ssh -p32768 proxy.dev-01.tcwglab"
-Host *proxy.*
- ProxyCommand ssh $(echo %h | sed -e "s/proxy\.//") nc -q0 localhost %p
-
-# Access to Austin Colo. E.g., "ssh r1-a7.aus-colo"
-Host *.aus-colo
- ProxyCommand ssh aus-colo.linaro.org nc -q0 %h %p
-
-# Access to LAVA Lab. E.g., "ssh root@10.7.0.18.lab"
-Host *.lab
- ProxyCommand ssh lab.validation.linaro.org nc -q0 $(basename %h .lab) %p
-
-Host *.tcwglab *.aus-colo *.lab
- # Enable automatic multiplexing.
- ControlMaster auto
- # Soften up potential problems with killing master connection by using
- # ControlPersist (which puts the master connection in background).
- # Also ControlPersist has an undocumented feature that it will clean-up
- # and replace stale ssh socket from a zombie connection.
- ControlPersist 5m
- # Put the ssh socket on /tmp. Note that overlayfs can't host sockets,
- # so we always arrange /tmp to be on a ext4 or equivalent FS.
- ControlPath /tmp/ssh-%u-%r@%h:%p
- # There is little point in forwarding X11 to machines outside of local network.
- ForwardX11 no
- # Forward authentication agent and keep private keys in one place.
- ForwardAgent yes
- # Ping server every 5min to avoid routers dropping connection.
- # This matches -o BatchMode=yes setting used in cross-testing (see ABE)
- ServerAliveInterval 300
- # Disable checking of host keys for boards behind gateways.
- # !!! BE BECAREFUL TO ONLY DO THIS FOR MACHINES BEHIND SSH GATEWAY OR VPN !!!
- StrictHostKeyChecking no
- # Don't store host keys for one-time containers
- UserKnownHostsFile /dev/null
- # Don't warn about "adding" host keys to /dev/null
- LogLevel FATAL
-
-# Make sure we can connect to localhost (e.g., to a container running
-# on localhost) with the settings for *.tcwglab
-Host localhost.tcwglab
- Hostname localhost
-
-Host git.linaro.org dev-private-git.linaro.org
- User git
-# === END: TCWG SSH configuration ===
diff --git a/tcwg-base/tcwg-build/tcwg-benchmark/.ssh/known_hosts b/tcwg-base/tcwg-build/tcwg-benchmark/.ssh/known_hosts
deleted file mode 100644
index b649d65f..00000000
--- a/tcwg-base/tcwg-build/tcwg-benchmark/.ssh/known_hosts
+++ /dev/null
@@ -1,30 +0,0 @@
-aus-colo.linaro.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBP8apVdw/JC+4rOiq/eG2LgjwJPCqKIlG/RwPVDe1VNOdtrmR6VnTQ5oQYkwt00h2rdI6dVzdW8Q9za7PGW6Sls=
-aus-colo.linaro.org ssh-dss AAAAB3NzaC1kc3MAAACBALdjDe/FnDjKDz+QzKWD/J1jIVVjied+1EFcxZ/uyGw9uZwVjReHP6ehGQCtQEM+SDklOXc6bz9UeBjG6+gDGXWBmldbS2yXvvxFmmbOf40h/rVFKq0CW/tJxyONoaf75Qj+aOyo3iUXMl+jJowb+LR5j0zbdTrSkM2qEsP8o0b3AAAAFQDfNOi88rFXdks5xpzmiKs0fzyYGQAAAIEAnzYTZ0dDAua6FHgqfoNVZHS4CV/le6G5FFCc4Kp4lB9ijRMjrDZNey5BkCooetqOBuPF8mYYAgZ28NemIUvvTenddfHFzWQTPl0meAdUhBW4EJMq0HWEV+kUKANUah2QlXWx8/g1x3cOhBzABTMOEBUFnlMx9d5A71JZypEN5UQAAACACiH996M1x/DjYmMp6BLwglYMDjQPrfI7QhNwa/8/wukDHlB6puB/HdPyxYZp/IVShHze6C3YpmV+dXxc85/vMNoVRx02ICC2gTkm2MoSFgaW1nO95tRPtyJ4AXa4ev4D22hNPF5SxgXfn2lT4uH8bWxvTrzgHs7JhAzD0oRbOh4=
-aus-colo.linaro.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCg5vMfuBLRroqEb6+CFLQikh1Wq6UD++SODY7bSdPDfN1wmurdp60AdVU+22nOXgK78mwYPJ0PEcTBMSE+OmryfZFDZm/+aPbALid/vFs8NuvFmEQ8vecEBPDGxJ3RpVxkNG5BrWMTJjWMJTCFdIh9my5vhBPEloAuDRthRNaRwvgqRw3GJAbSG2Cg4ZgOQi7Lv3ogQ/M3nXzy8KMp4KD7AtncylguPoVwDxNwjl+YoEujZDvpM4UiZDnh+Gxeru3EnEIgDvwbMizlrKL8Tm+2gA+j3cWkgIjCVJM+PW8V0aobp681ChqlbDlzK0oVmwUafdVv3dxzOSrjQH2rkaOn
-dev-private-git.linaro.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOvq8E5HPzrBlxmckzsE3rz9LAx9c0faEfofALaO+UGC4HAst9fMaZcHaCqu+b8SVY/2VcBvMYMwO1ZPgOn0rXs=
-dev-private-git.linaro.org ssh-dss AAAAB3NzaC1kc3MAAACBAK10xjDXtqiW6S02TFvIQUmjTyu+tpiT0IVTp5dlZX5rT1EDi4DtRgtoO/R4WncAs0GE8FqaI/IqljuYlJbHOrFCxU3OWKB+z2Ue3oXs3kouoFP3coF4exBZLEBX4JQ/HI5Ii88fnE/U70/+wN/mMAtcOrsgGWGXOv8yFZEQaKJJAAAAFQCfVbaD5KdaABTLwQ8CXRuZ+PAeHwAAAIBmppcf9sx9M4KAgiOQRGW+7/eImJHFRazQSe8Qbiqo0H7OQhIRcLIm6+PAtKgxxSaQErAo4z/xM7d2lhqOyydK5GDpILgV3qHUFAgQ9vajL+ga5/VeRTqg6R91kYgIKnEl3y8/iW6eRcJF/jzYfDcaFG0Z3gsOtHzjTsCuV8KMLwAAAIBupI2LDTsUYa64hSKvGhEVPMj8VKx5RX4NWQU/dlNNhlFRTzV42giujZ146vH5SGqagR3daX+o6Xm++GDJ+AedzJ8zBc9dAwU7ao4fd23bsyURvNxC7K5DKJnlCDS6xk+6wv6Hz9VdbaIEE5TPxSGqZEOK1V+pbgv+cMUGACy43Q==
-dev-private-git.linaro.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC34bjTOKJIq8MVSeC5gddQlbR0hyvvTZbrpW7KXgCzkLTFZxa05wbz8VC1l7ruPotQBgrICgLYmrbjrASqcY//9OPLDa1Pf/MUIu2F2lA1W/5E3psGYmyC9GTvmjKgu39Rad5ujXMeMLjuzVPCmo+WhewgugDSV4Fcggd6B6YXHGtoE15ctSw4moerUq1+2BXVgFxUyMoGcpSCeLnbvWpmi6xWoGQOSnrQ4Z/VmZ5WZ87vQsiiWEAsqmMOHHacunnSph7uzQXJlHNajdeGnr2NF+EgcmQ0N6vivZDRLmRYuSmizjCOHSRZxSm/0UJC/ewVzp9BwRepiNKWsjb4gTMb
-[dev-private-review.linaro.org]:29418 ssh-dss AAAAB3NzaC1kc3MAAACBAM596jW8Kbsh/ApdoP3r7UvrSOzhnoG1ZHYngER+Dd9e0iGJY1Wbpth7ngngpALl3PQQ99R5xUt8wvcOcICq+vF34FR/Gym+7VjaMLI7DxF48OrUAJnx6zINNlpXbMAI0nptWcKoL/xdmC7AoBOjH1Q+jGTiKISmXTE1w5iK8qp3AAAAFQDwzizM3qhYdknasNV/vp84o19FWQAAAIEAqLjr9vNsgr1snOdyKOhRuyidqf/zThaxuJaUktxLDKU0DDip+FGqLYiS2VzNuSWMaKjkBjITBi0sXktmUhhbPvBHhyzLy3Hz6BOdXpUAoq70QMOcocE9IsEfmqtkOsx/BZ1uCV6W051Gsci4PxK16q9zolpAEp4/3wEWGH+ueJIAAACAERdZ+vCZl6iDzq6XpYFKZ1r6i/CjX5KIBWKCzoN/Z8fo96rZqFA23G5tXM8+YMYnLdwb/qvNSCz6dWpH2FMS4yj7zo2l3GjguC8JOfar0Rt8fihJyaynX+rD/aP3b+h5ot1b/645qrfvpfmeh3gZt3c1kjy5fyopujyGNTUtq6c=
-[dev-private-review.linaro.org]:29418 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCofUDWYYwzE4YWotCffwCxLoRuVCMb6DP+eObwbTPHMe5asK94Y1jPNeK1yUVJIuIAUO8aA6pIq3uLKlusyGLZe1YBpM+7YX3HMOBfCOeOemHFxETlj/HC7islYLYT7Sm/DweiN1kxgP8Q/PhPIA5czCZGHS/+T/VLbMApyyzdTmswaqfgJejyK9juHAcmxT3Tupj2SGOuOamyKfhfsPxGwIchivy/mt7xBTk5cNiSDeLAfMn2rHsilfLjb+IoeE6EvtqG3+rTh+ttulHp2vSeZkK79tuyVWt+XOZjD4RDfk1taW9JjaafkyOW0VCF4gqOMfJU24u88xTCgqkgT1bN
-dev-private-review.linaro.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOvq8E5HPzrBlxmckzsE3rz9LAx9c0faEfofALaO+UGC4HAst9fMaZcHaCqu+b8SVY/2VcBvMYMwO1ZPgOn0rXs=
-dev-private-review.linaro.org ssh-dss AAAAB3NzaC1kc3MAAACBAK10xjDXtqiW6S02TFvIQUmjTyu+tpiT0IVTp5dlZX5rT1EDi4DtRgtoO/R4WncAs0GE8FqaI/IqljuYlJbHOrFCxU3OWKB+z2Ue3oXs3kouoFP3coF4exBZLEBX4JQ/HI5Ii88fnE/U70/+wN/mMAtcOrsgGWGXOv8yFZEQaKJJAAAAFQCfVbaD5KdaABTLwQ8CXRuZ+PAeHwAAAIBmppcf9sx9M4KAgiOQRGW+7/eImJHFRazQSe8Qbiqo0H7OQhIRcLIm6+PAtKgxxSaQErAo4z/xM7d2lhqOyydK5GDpILgV3qHUFAgQ9vajL+ga5/VeRTqg6R91kYgIKnEl3y8/iW6eRcJF/jzYfDcaFG0Z3gsOtHzjTsCuV8KMLwAAAIBupI2LDTsUYa64hSKvGhEVPMj8VKx5RX4NWQU/dlNNhlFRTzV42giujZ146vH5SGqagR3daX+o6Xm++GDJ+AedzJ8zBc9dAwU7ao4fd23bsyURvNxC7K5DKJnlCDS6xk+6wv6Hz9VdbaIEE5TPxSGqZEOK1V+pbgv+cMUGACy43Q==
-dev-private-review.linaro.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC34bjTOKJIq8MVSeC5gddQlbR0hyvvTZbrpW7KXgCzkLTFZxa05wbz8VC1l7ruPotQBgrICgLYmrbjrASqcY//9OPLDa1Pf/MUIu2F2lA1W/5E3psGYmyC9GTvmjKgu39Rad5ujXMeMLjuzVPCmo+WhewgugDSV4Fcggd6B6YXHGtoE15ctSw4moerUq1+2BXVgFxUyMoGcpSCeLnbvWpmi6xWoGQOSnrQ4Z/VmZ5WZ87vQsiiWEAsqmMOHHacunnSph7uzQXJlHNajdeGnr2NF+EgcmQ0N6vivZDRLmRYuSmizjCOHSRZxSm/0UJC/ewVzp9BwRepiNKWsjb4gTMb
-ex40-01.tcwglab.linaro.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBblrQ+VuEY6mQDq10+GgOPYJIsTfaHXYZi0O0mPr+ev1xNodJ0w45hiWWlmsLEiXiGsvvIiOgZcZsryCkGscDI=
-ex40-01.tcwglab.linaro.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC37ZZKNZpSxQnWcu/5eNpFpEjIzL5eZyKUbn8ghkmk4jVS7fIbty/6s1ZH94UPwQDb07F4QF89esoH5k2ajAizLMNoLxeHU8ZCcqMFaNcmVWjTxKbiXLwRqcrgLUrNMQIGesV8l+xH+yozG2HKOBAnMVaea9+wCFvJWXgO4u54eEup2JcE3UroWIRA/mOL4KhBbyVVe47NbydYbP5G0mqpJjpLv5TuJwRT/aP/0nRH6cPrzuqGbic7cVR7Bu3f6ipttMAsPQRAoFBVYb5yRAt/RcDBu39r7hLHyhitjw0vBhGGV0B5CEzAqCE3ZyU0H+vmQ2GeN8aEtUWDSK9W7uzJ
-git.linaro.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBONeIVl09BaG0iDOqF/qZjDun8fktYdD0Zl2fRAkSGT6Q7ULAXWJZA7IwstvcSs5w9SRV6x/lNc3CqlHwMFaABc=
-git.linaro.org ssh-dss AAAAB3NzaC1kc3MAAACBAJbwbYgvbS+8vnlhJLe1AwgvbBqu0kBw7pBjQgF47lXRKqZbzwQc+hHmMbczJOfIoo1PX39Ifhz142u+yN7PQgUlU+jzI2Q9cjSqfrS02rV0cU2TQRKvgTQH89qMk2M0jOimcz1UCZkCgS2wj6hb1HU9pkhzpH7d+1/M/31Xc5uPAAAAFQC82/+3qHmNd8G8mrPJz9LfdUpsmwAAAIASypGV3LlIOE3bDlZwgr3rZ+44MPq7c16SbpjnjqbsOzPAyllD8MeY0eynuDqtGtT4RtC8uRgmgw7MW1HtYnTSlYt0up66LT19LCRKme8CVtggqjwLTUEKWmrdbe+PSvczKjeszOD0R5qGasSvOOKMJ5jLMnJ9jMhHhItc53eM5AAAAIBXWdudBBziVVk9VE+z1kvOYsCGYosLglqzJMsFfVQh948Ci9PowKx8xognWEtdaZW7+2oEIwL8QR+zPtzNY447i6iRuJy1TaDZfJU8nTfr07KoXB4B7rhADByXl4x9Uk25m9n9XjF/ctjIzyspvcRpqZXMHBUuZalID6E39YJqnA==
-git.linaro.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8Q8j887I9mBD2va9C7gWl4Cr8agHWxuFHfDUWaqiygI9jA4w2YC7mo5oJMqwUk2DsvPDLuU5Z6yyKSA7Cko+L0MnKfNMzQ8e00ZXGDBq8bh1tRKstFselAFmmg+5DhM9q9HPjpKYzbAxU6rxmdFbSc+ktE0rhtmciThVT3YW3bMs3g+D+6sf6ER9UkSpbdZ7skKFXBHw2t1BWaPrvW4L8GMFAokgXUKOE8e1WZkQuCcseIz8J9Hz1p/liyiiTPVQnjGyleUnUY0pZA3ViB6pS317BH5Kvd8aX8x0vSwCIs30rpkmBam9C0b2uj2jWk3GrmHYjVHebMAW376VSLTZV
-git-us.linaro.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBONeIVl09BaG0iDOqF/qZjDun8fktYdD0Zl2fRAkSGT6Q7ULAXWJZA7IwstvcSs5w9SRV6x/lNc3CqlHwMFaABc=
-git-us.linaro.org ssh-dss AAAAB3NzaC1kc3MAAACBAJbwbYgvbS+8vnlhJLe1AwgvbBqu0kBw7pBjQgF47lXRKqZbzwQc+hHmMbczJOfIoo1PX39Ifhz142u+yN7PQgUlU+jzI2Q9cjSqfrS02rV0cU2TQRKvgTQH89qMk2M0jOimcz1UCZkCgS2wj6hb1HU9pkhzpH7d+1/M/31Xc5uPAAAAFQC82/+3qHmNd8G8mrPJz9LfdUpsmwAAAIASypGV3LlIOE3bDlZwgr3rZ+44MPq7c16SbpjnjqbsOzPAyllD8MeY0eynuDqtGtT4RtC8uRgmgw7MW1HtYnTSlYt0up66LT19LCRKme8CVtggqjwLTUEKWmrdbe+PSvczKjeszOD0R5qGasSvOOKMJ5jLMnJ9jMhHhItc53eM5AAAAIBXWdudBBziVVk9VE+z1kvOYsCGYosLglqzJMsFfVQh948Ci9PowKx8xognWEtdaZW7+2oEIwL8QR+zPtzNY447i6iRuJy1TaDZfJU8nTfr07KoXB4B7rhADByXl4x9Uk25m9n9XjF/ctjIzyspvcRpqZXMHBUuZalID6E39YJqnA==
-git-us.linaro.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8Q8j887I9mBD2va9C7gWl4Cr8agHWxuFHfDUWaqiygI9jA4w2YC7mo5oJMqwUk2DsvPDLuU5Z6yyKSA7Cko+L0MnKfNMzQ8e00ZXGDBq8bh1tRKstFselAFmmg+5DhM9q9HPjpKYzbAxU6rxmdFbSc+ktE0rhtmciThVT3YW3bMs3g+D+6sf6ER9UkSpbdZ7skKFXBHw2t1BWaPrvW4L8GMFAokgXUKOE8e1WZkQuCcseIz8J9Hz1p/liyiiTPVQnjGyleUnUY0pZA3ViB6pS317BH5Kvd8aX8x0vSwCIs30rpkmBam9C0b2uj2jWk3GrmHYjVHebMAW376VSLTZV
-lab.validation.linaro.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFZDLd4f9cph9A64+kXUpGvuRmInB3HAtHU9T6wVIsp4HkYLLZD59I4lF/u2VLfM7j10XMNPO7ybOJMM+1zIZlM=
-lab.validation.linaro.org ssh-dss AAAAB3NzaC1kc3MAAACBAK75t/OG68cN0mtVNrliCi8/7tajozJQDGvxgnpben1F84IzWNJpBdtEgaXeo3zD0cQl1nM5IftBjSKMkomdsaDh7u6A57juaANU9NKIXW2BGmaICZxllFAb/Cmnq4mDnZJ33G5UyGPVA49bUEKw8DLe8FLVlO/wcghJhjoy7prZAAAAFQD8zrwLDwd4M4vKKWu9nju7fI3oywAAAIBVE6ykor/q56qYTYqaAvcRkq7331jdYHTqiAVcO9KyrdOS7yCgtb2Dw+O0rq5ftLSF73ad5ACbw+XbzQVJAeKDaDs5mLf3eYF0+3YODFRHYDsbbihO0uZcGHFPvGDD9odBZhWFIZaFSdboodSuyzxIgLu0EZAsHoSP2wjTGdiXFwAAAIAkPcANYxo0jm8BuCEYR+SXXS4aj83dUGbPP54UU7M+jrrfG1M+JVFh3kEsXr9zptZajY+NrqlnXqPp4HZyORUUEN+Szkjbd2p8CCCQvv1PODGJtXFzwpatUP27I2ik/lZG9OXxBQkO+QxjuJ+pcjXPdBRz6DwWoUM63+QFXBLpsw==
-lab.validation.linaro.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDtto5bsPJ3NuXsWtwMR8bsAzLvkBstmF1QP+eC6jUBsCDHMtBW/zAWJYNPDr30vRkV7J8D64Pd91rgjbqF8mOPDlyVlln03dYtOV3hzVuXLZfxodslJsw4lB+ZhxLfcZAKqqFURJEhrJNJmtFBprxFRbdS1iQHJHJohg3zS9zlLFvUpZGWooLFEM2z2NdUfSiR12ePvdW1YsEimJR/b3h1it/Wot0uEB6VONZGyMrrWvsntJV1NdQFxJR8waTz1sBvQQBJGX+SgEXY1CB3AUiF4yIy5WZ/4YCOk0kO9qABvV0Ks357OU5uY5GMgalAy2RJyvceNf6erlR4vwmpdnDH
-people.linaro.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKKtlH9IGVw1wE3daicRzyOdIM9MzWfUH1tUB8R/md36RDTSqG8VGYrn1E5pJcs7rsk05ZCUQIaglefMytoOvQ8=
-people.linaro.org ssh-dss AAAAB3NzaC1kc3MAAACBAOnQwFbvISNteLPMb/Srm2xwFDrxDql+kxtlZyohrSZ72K9GDg+dqb4W7/QiVrOMhfRzaL93Hj/FLCxKqUXdnTQqekqGosRQK7fLNJvh6DNizoJ+aWzKp1EL3kF2GgKP33ZPtRJYrBdxnc+DDc0yP/He3cyrzbg1nsWSedc1MMVpAAAAFQCm3xIrM1iR9ozuyjKRGwhnrKo9GQAAAIBkdN4dNB298m+2aXqMmLOj1Ry9/S6CTiMn5c9T/luYpWFRnsyuHlBIcZFjyOMtU3bc8b7KwqP8t3XTQbolbqtYOWqPeiaIH/VAk7w9o1tePRwtbTadksYw+UJGtn9c+52uQfGZdjfyjsKs7hEWgE72gTeIb9g1QZ+WCoVfSzNacgAAAIA9T2ONJcRFX3heeDcl6gho8Wj264GDhS5/iqdMCClO3wKUY04hPSpXKRhRm/zzFGb9537Qj6LluDAcg+m/D0FnoQkILLXnfiMnrlyoCCA/jZWrVZw8aQdDHM5LlDdDZKZV7djkbjF0nVvWRTrvc20yQeDLLImaTDOfYjmJ75L1vQ==
-people.linaro.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8OveP3mffvlzMEGuZQzol8zoDwCdAzrNiBfX9rv6lDGr86Sl4MVKs/6cYdjbtrUJD7ls5gc8cfjH5EXPh/HuoBj7Bi+UNfyyGSqrZgTFPpyLx50QJDeogcUN54NL+N/X6HtQtyvGwEXgb26S9ec7LFfyxqT8Yy370XH/y7qAtJgS3UTkf8kzIWgZQvU5MU3FqhOn9mzI+KqsBMRKt0JpW7H2VRYiaHqpshwpuNHRDEQBMnRVHDpo8SZRq21pwRjdTzuzGJv2enCW018jWC/HMmTaaDWzX6SO+JQs9NFVUpM6hg+ysa5piDXnCNQ8Ry6l0nlAjgUt92NEe4OeANrt9
-[review.linaro.org]:29418 ssh-dss AAAAB3NzaC1kc3MAAACBAPB0SE19HQ0dEtm3Unp7+JiNeHlIWNs4j9yN+2Q/fxmBT2ZZ0a5I4gg63b5rM/1Li/6k0f/CtSYBH/mhmjKaEKIQV/c/lmuZivUAfTPT0ld3voXHwRhgpWI/WOiRdsTRZZW2yUHx/troO53mx4eIISKfab+t+vCU5Af+sgTBF6InAAAAFQDGR2ccfQSWVuSyzgvK8f7FT8olTQAAAIBHZqySRfjEnnx9h0aS6i2H21dmZxUllwIJpdpS6XWzvMzVwBb1DKx8bO0WwZeTnxxs1BKVAjmSDkDGYJWHxyU8kQ8aFsBo0KwbNEKXozaK3Gf2YF289xQsigbtPUWYXDz1PNEXtIS9AXdCRq4i09ujO3ayxq4lX2n0LIQ4IhM+RgAAAIB2SvnzVadjW14AN9F9ZEfnK0JRpBTKjz+kQSS1TJiRI/dSHG6CwwXjD1G9YW8mfGhPOPYHIE2MF2n7d7DfqBdeeee0PnwBQ0YBc5qfhQ9Gpi+hqXSem1YaD2YRG40que5bu/Rd6NksnSLg/93Z3L3fN+qTeApRqHQWRrfswGgi+A==
-[review.linaro.org]:29418 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMfTLkTmsbtahAiVJTKXRFbR9MQ/vDH/JPj4QN3XPHJuubxLhUf8WObEBtML7J11uvVM1oDTwM5YG5yjyBnc+85OaQaB9tMPDheGhfMG40F4vxdSnQL29ihyrls0hrFTY9UZ4Y2FmJwYL0rOnGU7iPyNuExQwfg2bkdw67aH9nEGjSd2eXYl2bI4DHujy5GJiV3dR9TlUF0iaSeHVSIX5t9I/BXK+AiSqHTrvwdGGi9XvL6xEWYMOZOpJnCH8Q4OSibsFfQXnCMgIFeO7J/ZMGXqltXOtztgQMr8VvRRD3S+Lcp8yKb5aUjWwoCxb4YzEUbQE04SRVeAGjsfNJcXgT
-review.linaro.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBONeIVl09BaG0iDOqF/qZjDun8fktYdD0Zl2fRAkSGT6Q7ULAXWJZA7IwstvcSs5w9SRV6x/lNc3CqlHwMFaABc=
-review.linaro.org ssh-dss AAAAB3NzaC1kc3MAAACBAJbwbYgvbS+8vnlhJLe1AwgvbBqu0kBw7pBjQgF47lXRKqZbzwQc+hHmMbczJOfIoo1PX39Ifhz142u+yN7PQgUlU+jzI2Q9cjSqfrS02rV0cU2TQRKvgTQH89qMk2M0jOimcz1UCZkCgS2wj6hb1HU9pkhzpH7d+1/M/31Xc5uPAAAAFQC82/+3qHmNd8G8mrPJz9LfdUpsmwAAAIASypGV3LlIOE3bDlZwgr3rZ+44MPq7c16SbpjnjqbsOzPAyllD8MeY0eynuDqtGtT4RtC8uRgmgw7MW1HtYnTSlYt0up66LT19LCRKme8CVtggqjwLTUEKWmrdbe+PSvczKjeszOD0R5qGasSvOOKMJ5jLMnJ9jMhHhItc53eM5AAAAIBXWdudBBziVVk9VE+z1kvOYsCGYosLglqzJMsFfVQh948Ci9PowKx8xognWEtdaZW7+2oEIwL8QR+zPtzNY447i6iRuJy1TaDZfJU8nTfr07KoXB4B7rhADByXl4x9Uk25m9n9XjF/ctjIzyspvcRpqZXMHBUuZalID6E39YJqnA==
-review.linaro.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8Q8j887I9mBD2va9C7gWl4Cr8agHWxuFHfDUWaqiygI9jA4w2YC7mo5oJMqwUk2DsvPDLuU5Z6yyKSA7Cko+L0MnKfNMzQ8e00ZXGDBq8bh1tRKstFselAFmmg+5DhM9q9HPjpKYzbAxU6rxmdFbSc+ktE0rhtmciThVT3YW3bMs3g+D+6sf6ER9UkSpbdZ7skKFXBHw2t1BWaPrvW4L8GMFAokgXUKOE8e1WZkQuCcseIz8J9Hz1p/liyiiTPVQnjGyleUnUY0pZA3ViB6pS317BH5Kvd8aX8x0vSwCIs30rpkmBam9C0b2uj2jWk3GrmHYjVHebMAW376VSLTZV
diff --git a/tcwg-base/tcwg-build/tcwg-buildslave/.ssh/config b/tcwg-base/tcwg-build/tcwg-buildslave/.ssh/config
deleted file mode 100644
index 47e5dbf0..00000000
--- a/tcwg-base/tcwg-build/tcwg-buildslave/.ssh/config
+++ /dev/null
@@ -1,60 +0,0 @@
-# === BEGIN: TCWG SSH configuration ===
-#
-# !!! THIS MUST BE COPIED TO THE START OF YOUR ~/.SSH/CONFIG FILE. !!!
-# !!! IF YOU REPORT A PROBLEM WITH SSH, AND THIS CONFIGURATION IS NOT !!!
-# !!! AT THE START OF YOUR FILE -- YOU HAVE OBVIOUSLY MISSED THIS VERY !!!
-# !!! IMPORTANT NOTE. AS PENANCE, YOU WILL READ THIS NOTE OUT LOUD. !!!
-#
-
-Host *.tcwglab *.aus-colo people.linaro.org aus-colo.linaro.org lab.validation.linaro.org
- #User @LDAP_USER@
- #IdentityFile ~/.ssh/id_rsa
-
-# Proxy connections to custom ssh servers (inside containers) on firewalled
-# hosts through "main" ssh server on that host.
-# E.g., "ssh -p32768 proxy.dev-01.tcwglab"
-Host *proxy.*
- ProxyCommand ssh $(echo %h | sed -e "s/proxy\.//") nc -q0 localhost %p
-
-# Access to Austin Colo. E.g., "ssh r1-a7.aus-colo"
-Host *.aus-colo
- ProxyCommand ssh aus-colo.linaro.org nc -q0 %h %p
-
-# Access to LAVA Lab. E.g., "ssh root@10.7.0.18.lab"
-Host *.lab
- ProxyCommand ssh lab.validation.linaro.org nc -q0 $(basename %h .lab) %p
-
-Host *.tcwglab *.aus-colo *.lab
- # Enable automatic multiplexing.
- ControlMaster auto
- # Soften up potential problems with killing master connection by using
- # ControlPersist (which puts the master connection in background).
- # Also ControlPersist has an undocumented feature that it will clean-up
- # and replace stale ssh socket from a zombie connection.
- ControlPersist 5m
- # Put the ssh socket on /tmp. Note that overlayfs can't host sockets,
- # so we always arrange /tmp to be on a ext4 or equivalent FS.
- ControlPath /tmp/ssh-%u-%r@%h:%p
- # There is little point in forwarding X11 to machines outside of local network.
- ForwardX11 no
- # Forward authentication agent and keep private keys in one place.
- ForwardAgent yes
- # Ping server every 5min to avoid routers dropping connection.
- # This matches -o BatchMode=yes setting used in cross-testing (see ABE)
- ServerAliveInterval 300
- # Disable checking of host keys for boards behind gateways.
- # !!! BE BECAREFUL TO ONLY DO THIS FOR MACHINES BEHIND SSH GATEWAY OR VPN !!!
- StrictHostKeyChecking no
- # Don't store host keys for one-time containers
- UserKnownHostsFile /dev/null
- # Don't warn about "adding" host keys to /dev/null
- LogLevel FATAL
-
-# Make sure we can connect to localhost (e.g., to a container running
-# on localhost) with the settings for *.tcwglab
-Host localhost.tcwglab
- Hostname localhost
-
-Host git.linaro.org dev-private-git.linaro.org
- User git
-# === END: TCWG SSH configuration ===
diff --git a/tcwg-base/tcwg-build/tcwg-buildslave/.ssh/known_hosts b/tcwg-base/tcwg-build/tcwg-buildslave/.ssh/known_hosts
deleted file mode 100644
index b649d65f..00000000
--- a/tcwg-base/tcwg-build/tcwg-buildslave/.ssh/known_hosts
+++ /dev/null
@@ -1,30 +0,0 @@
-aus-colo.linaro.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBP8apVdw/JC+4rOiq/eG2LgjwJPCqKIlG/RwPVDe1VNOdtrmR6VnTQ5oQYkwt00h2rdI6dVzdW8Q9za7PGW6Sls=
-aus-colo.linaro.org ssh-dss AAAAB3NzaC1kc3MAAACBALdjDe/FnDjKDz+QzKWD/J1jIVVjied+1EFcxZ/uyGw9uZwVjReHP6ehGQCtQEM+SDklOXc6bz9UeBjG6+gDGXWBmldbS2yXvvxFmmbOf40h/rVFKq0CW/tJxyONoaf75Qj+aOyo3iUXMl+jJowb+LR5j0zbdTrSkM2qEsP8o0b3AAAAFQDfNOi88rFXdks5xpzmiKs0fzyYGQAAAIEAnzYTZ0dDAua6FHgqfoNVZHS4CV/le6G5FFCc4Kp4lB9ijRMjrDZNey5BkCooetqOBuPF8mYYAgZ28NemIUvvTenddfHFzWQTPl0meAdUhBW4EJMq0HWEV+kUKANUah2QlXWx8/g1x3cOhBzABTMOEBUFnlMx9d5A71JZypEN5UQAAACACiH996M1x/DjYmMp6BLwglYMDjQPrfI7QhNwa/8/wukDHlB6puB/HdPyxYZp/IVShHze6C3YpmV+dXxc85/vMNoVRx02ICC2gTkm2MoSFgaW1nO95tRPtyJ4AXa4ev4D22hNPF5SxgXfn2lT4uH8bWxvTrzgHs7JhAzD0oRbOh4=
-aus-colo.linaro.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCg5vMfuBLRroqEb6+CFLQikh1Wq6UD++SODY7bSdPDfN1wmurdp60AdVU+22nOXgK78mwYPJ0PEcTBMSE+OmryfZFDZm/+aPbALid/vFs8NuvFmEQ8vecEBPDGxJ3RpVxkNG5BrWMTJjWMJTCFdIh9my5vhBPEloAuDRthRNaRwvgqRw3GJAbSG2Cg4ZgOQi7Lv3ogQ/M3nXzy8KMp4KD7AtncylguPoVwDxNwjl+YoEujZDvpM4UiZDnh+Gxeru3EnEIgDvwbMizlrKL8Tm+2gA+j3cWkgIjCVJM+PW8V0aobp681ChqlbDlzK0oVmwUafdVv3dxzOSrjQH2rkaOn
-dev-private-git.linaro.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOvq8E5HPzrBlxmckzsE3rz9LAx9c0faEfofALaO+UGC4HAst9fMaZcHaCqu+b8SVY/2VcBvMYMwO1ZPgOn0rXs=
-dev-private-git.linaro.org ssh-dss AAAAB3NzaC1kc3MAAACBAK10xjDXtqiW6S02TFvIQUmjTyu+tpiT0IVTp5dlZX5rT1EDi4DtRgtoO/R4WncAs0GE8FqaI/IqljuYlJbHOrFCxU3OWKB+z2Ue3oXs3kouoFP3coF4exBZLEBX4JQ/HI5Ii88fnE/U70/+wN/mMAtcOrsgGWGXOv8yFZEQaKJJAAAAFQCfVbaD5KdaABTLwQ8CXRuZ+PAeHwAAAIBmppcf9sx9M4KAgiOQRGW+7/eImJHFRazQSe8Qbiqo0H7OQhIRcLIm6+PAtKgxxSaQErAo4z/xM7d2lhqOyydK5GDpILgV3qHUFAgQ9vajL+ga5/VeRTqg6R91kYgIKnEl3y8/iW6eRcJF/jzYfDcaFG0Z3gsOtHzjTsCuV8KMLwAAAIBupI2LDTsUYa64hSKvGhEVPMj8VKx5RX4NWQU/dlNNhlFRTzV42giujZ146vH5SGqagR3daX+o6Xm++GDJ+AedzJ8zBc9dAwU7ao4fd23bsyURvNxC7K5DKJnlCDS6xk+6wv6Hz9VdbaIEE5TPxSGqZEOK1V+pbgv+cMUGACy43Q==
-dev-private-git.linaro.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC34bjTOKJIq8MVSeC5gddQlbR0hyvvTZbrpW7KXgCzkLTFZxa05wbz8VC1l7ruPotQBgrICgLYmrbjrASqcY//9OPLDa1Pf/MUIu2F2lA1W/5E3psGYmyC9GTvmjKgu39Rad5ujXMeMLjuzVPCmo+WhewgugDSV4Fcggd6B6YXHGtoE15ctSw4moerUq1+2BXVgFxUyMoGcpSCeLnbvWpmi6xWoGQOSnrQ4Z/VmZ5WZ87vQsiiWEAsqmMOHHacunnSph7uzQXJlHNajdeGnr2NF+EgcmQ0N6vivZDRLmRYuSmizjCOHSRZxSm/0UJC/ewVzp9BwRepiNKWsjb4gTMb
-[dev-private-review.linaro.org]:29418 ssh-dss AAAAB3NzaC1kc3MAAACBAM596jW8Kbsh/ApdoP3r7UvrSOzhnoG1ZHYngER+Dd9e0iGJY1Wbpth7ngngpALl3PQQ99R5xUt8wvcOcICq+vF34FR/Gym+7VjaMLI7DxF48OrUAJnx6zINNlpXbMAI0nptWcKoL/xdmC7AoBOjH1Q+jGTiKISmXTE1w5iK8qp3AAAAFQDwzizM3qhYdknasNV/vp84o19FWQAAAIEAqLjr9vNsgr1snOdyKOhRuyidqf/zThaxuJaUktxLDKU0DDip+FGqLYiS2VzNuSWMaKjkBjITBi0sXktmUhhbPvBHhyzLy3Hz6BOdXpUAoq70QMOcocE9IsEfmqtkOsx/BZ1uCV6W051Gsci4PxK16q9zolpAEp4/3wEWGH+ueJIAAACAERdZ+vCZl6iDzq6XpYFKZ1r6i/CjX5KIBWKCzoN/Z8fo96rZqFA23G5tXM8+YMYnLdwb/qvNSCz6dWpH2FMS4yj7zo2l3GjguC8JOfar0Rt8fihJyaynX+rD/aP3b+h5ot1b/645qrfvpfmeh3gZt3c1kjy5fyopujyGNTUtq6c=
-[dev-private-review.linaro.org]:29418 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCofUDWYYwzE4YWotCffwCxLoRuVCMb6DP+eObwbTPHMe5asK94Y1jPNeK1yUVJIuIAUO8aA6pIq3uLKlusyGLZe1YBpM+7YX3HMOBfCOeOemHFxETlj/HC7islYLYT7Sm/DweiN1kxgP8Q/PhPIA5czCZGHS/+T/VLbMApyyzdTmswaqfgJejyK9juHAcmxT3Tupj2SGOuOamyKfhfsPxGwIchivy/mt7xBTk5cNiSDeLAfMn2rHsilfLjb+IoeE6EvtqG3+rTh+ttulHp2vSeZkK79tuyVWt+XOZjD4RDfk1taW9JjaafkyOW0VCF4gqOMfJU24u88xTCgqkgT1bN
-dev-private-review.linaro.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOvq8E5HPzrBlxmckzsE3rz9LAx9c0faEfofALaO+UGC4HAst9fMaZcHaCqu+b8SVY/2VcBvMYMwO1ZPgOn0rXs=
-dev-private-review.linaro.org ssh-dss AAAAB3NzaC1kc3MAAACBAK10xjDXtqiW6S02TFvIQUmjTyu+tpiT0IVTp5dlZX5rT1EDi4DtRgtoO/R4WncAs0GE8FqaI/IqljuYlJbHOrFCxU3OWKB+z2Ue3oXs3kouoFP3coF4exBZLEBX4JQ/HI5Ii88fnE/U70/+wN/mMAtcOrsgGWGXOv8yFZEQaKJJAAAAFQCfVbaD5KdaABTLwQ8CXRuZ+PAeHwAAAIBmppcf9sx9M4KAgiOQRGW+7/eImJHFRazQSe8Qbiqo0H7OQhIRcLIm6+PAtKgxxSaQErAo4z/xM7d2lhqOyydK5GDpILgV3qHUFAgQ9vajL+ga5/VeRTqg6R91kYgIKnEl3y8/iW6eRcJF/jzYfDcaFG0Z3gsOtHzjTsCuV8KMLwAAAIBupI2LDTsUYa64hSKvGhEVPMj8VKx5RX4NWQU/dlNNhlFRTzV42giujZ146vH5SGqagR3daX+o6Xm++GDJ+AedzJ8zBc9dAwU7ao4fd23bsyURvNxC7K5DKJnlCDS6xk+6wv6Hz9VdbaIEE5TPxSGqZEOK1V+pbgv+cMUGACy43Q==
-dev-private-review.linaro.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC34bjTOKJIq8MVSeC5gddQlbR0hyvvTZbrpW7KXgCzkLTFZxa05wbz8VC1l7ruPotQBgrICgLYmrbjrASqcY//9OPLDa1Pf/MUIu2F2lA1W/5E3psGYmyC9GTvmjKgu39Rad5ujXMeMLjuzVPCmo+WhewgugDSV4Fcggd6B6YXHGtoE15ctSw4moerUq1+2BXVgFxUyMoGcpSCeLnbvWpmi6xWoGQOSnrQ4Z/VmZ5WZ87vQsiiWEAsqmMOHHacunnSph7uzQXJlHNajdeGnr2NF+EgcmQ0N6vivZDRLmRYuSmizjCOHSRZxSm/0UJC/ewVzp9BwRepiNKWsjb4gTMb
-ex40-01.tcwglab.linaro.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBblrQ+VuEY6mQDq10+GgOPYJIsTfaHXYZi0O0mPr+ev1xNodJ0w45hiWWlmsLEiXiGsvvIiOgZcZsryCkGscDI=
-ex40-01.tcwglab.linaro.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC37ZZKNZpSxQnWcu/5eNpFpEjIzL5eZyKUbn8ghkmk4jVS7fIbty/6s1ZH94UPwQDb07F4QF89esoH5k2ajAizLMNoLxeHU8ZCcqMFaNcmVWjTxKbiXLwRqcrgLUrNMQIGesV8l+xH+yozG2HKOBAnMVaea9+wCFvJWXgO4u54eEup2JcE3UroWIRA/mOL4KhBbyVVe47NbydYbP5G0mqpJjpLv5TuJwRT/aP/0nRH6cPrzuqGbic7cVR7Bu3f6ipttMAsPQRAoFBVYb5yRAt/RcDBu39r7hLHyhitjw0vBhGGV0B5CEzAqCE3ZyU0H+vmQ2GeN8aEtUWDSK9W7uzJ
-git.linaro.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBONeIVl09BaG0iDOqF/qZjDun8fktYdD0Zl2fRAkSGT6Q7ULAXWJZA7IwstvcSs5w9SRV6x/lNc3CqlHwMFaABc=
-git.linaro.org ssh-dss AAAAB3NzaC1kc3MAAACBAJbwbYgvbS+8vnlhJLe1AwgvbBqu0kBw7pBjQgF47lXRKqZbzwQc+hHmMbczJOfIoo1PX39Ifhz142u+yN7PQgUlU+jzI2Q9cjSqfrS02rV0cU2TQRKvgTQH89qMk2M0jOimcz1UCZkCgS2wj6hb1HU9pkhzpH7d+1/M/31Xc5uPAAAAFQC82/+3qHmNd8G8mrPJz9LfdUpsmwAAAIASypGV3LlIOE3bDlZwgr3rZ+44MPq7c16SbpjnjqbsOzPAyllD8MeY0eynuDqtGtT4RtC8uRgmgw7MW1HtYnTSlYt0up66LT19LCRKme8CVtggqjwLTUEKWmrdbe+PSvczKjeszOD0R5qGasSvOOKMJ5jLMnJ9jMhHhItc53eM5AAAAIBXWdudBBziVVk9VE+z1kvOYsCGYosLglqzJMsFfVQh948Ci9PowKx8xognWEtdaZW7+2oEIwL8QR+zPtzNY447i6iRuJy1TaDZfJU8nTfr07KoXB4B7rhADByXl4x9Uk25m9n9XjF/ctjIzyspvcRpqZXMHBUuZalID6E39YJqnA==
-git.linaro.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8Q8j887I9mBD2va9C7gWl4Cr8agHWxuFHfDUWaqiygI9jA4w2YC7mo5oJMqwUk2DsvPDLuU5Z6yyKSA7Cko+L0MnKfNMzQ8e00ZXGDBq8bh1tRKstFselAFmmg+5DhM9q9HPjpKYzbAxU6rxmdFbSc+ktE0rhtmciThVT3YW3bMs3g+D+6sf6ER9UkSpbdZ7skKFXBHw2t1BWaPrvW4L8GMFAokgXUKOE8e1WZkQuCcseIz8J9Hz1p/liyiiTPVQnjGyleUnUY0pZA3ViB6pS317BH5Kvd8aX8x0vSwCIs30rpkmBam9C0b2uj2jWk3GrmHYjVHebMAW376VSLTZV
-git-us.linaro.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBONeIVl09BaG0iDOqF/qZjDun8fktYdD0Zl2fRAkSGT6Q7ULAXWJZA7IwstvcSs5w9SRV6x/lNc3CqlHwMFaABc=
-git-us.linaro.org ssh-dss AAAAB3NzaC1kc3MAAACBAJbwbYgvbS+8vnlhJLe1AwgvbBqu0kBw7pBjQgF47lXRKqZbzwQc+hHmMbczJOfIoo1PX39Ifhz142u+yN7PQgUlU+jzI2Q9cjSqfrS02rV0cU2TQRKvgTQH89qMk2M0jOimcz1UCZkCgS2wj6hb1HU9pkhzpH7d+1/M/31Xc5uPAAAAFQC82/+3qHmNd8G8mrPJz9LfdUpsmwAAAIASypGV3LlIOE3bDlZwgr3rZ+44MPq7c16SbpjnjqbsOzPAyllD8MeY0eynuDqtGtT4RtC8uRgmgw7MW1HtYnTSlYt0up66LT19LCRKme8CVtggqjwLTUEKWmrdbe+PSvczKjeszOD0R5qGasSvOOKMJ5jLMnJ9jMhHhItc53eM5AAAAIBXWdudBBziVVk9VE+z1kvOYsCGYosLglqzJMsFfVQh948Ci9PowKx8xognWEtdaZW7+2oEIwL8QR+zPtzNY447i6iRuJy1TaDZfJU8nTfr07KoXB4B7rhADByXl4x9Uk25m9n9XjF/ctjIzyspvcRpqZXMHBUuZalID6E39YJqnA==
-git-us.linaro.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8Q8j887I9mBD2va9C7gWl4Cr8agHWxuFHfDUWaqiygI9jA4w2YC7mo5oJMqwUk2DsvPDLuU5Z6yyKSA7Cko+L0MnKfNMzQ8e00ZXGDBq8bh1tRKstFselAFmmg+5DhM9q9HPjpKYzbAxU6rxmdFbSc+ktE0rhtmciThVT3YW3bMs3g+D+6sf6ER9UkSpbdZ7skKFXBHw2t1BWaPrvW4L8GMFAokgXUKOE8e1WZkQuCcseIz8J9Hz1p/liyiiTPVQnjGyleUnUY0pZA3ViB6pS317BH5Kvd8aX8x0vSwCIs30rpkmBam9C0b2uj2jWk3GrmHYjVHebMAW376VSLTZV
-lab.validation.linaro.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFZDLd4f9cph9A64+kXUpGvuRmInB3HAtHU9T6wVIsp4HkYLLZD59I4lF/u2VLfM7j10XMNPO7ybOJMM+1zIZlM=
-lab.validation.linaro.org ssh-dss AAAAB3NzaC1kc3MAAACBAK75t/OG68cN0mtVNrliCi8/7tajozJQDGvxgnpben1F84IzWNJpBdtEgaXeo3zD0cQl1nM5IftBjSKMkomdsaDh7u6A57juaANU9NKIXW2BGmaICZxllFAb/Cmnq4mDnZJ33G5UyGPVA49bUEKw8DLe8FLVlO/wcghJhjoy7prZAAAAFQD8zrwLDwd4M4vKKWu9nju7fI3oywAAAIBVE6ykor/q56qYTYqaAvcRkq7331jdYHTqiAVcO9KyrdOS7yCgtb2Dw+O0rq5ftLSF73ad5ACbw+XbzQVJAeKDaDs5mLf3eYF0+3YODFRHYDsbbihO0uZcGHFPvGDD9odBZhWFIZaFSdboodSuyzxIgLu0EZAsHoSP2wjTGdiXFwAAAIAkPcANYxo0jm8BuCEYR+SXXS4aj83dUGbPP54UU7M+jrrfG1M+JVFh3kEsXr9zptZajY+NrqlnXqPp4HZyORUUEN+Szkjbd2p8CCCQvv1PODGJtXFzwpatUP27I2ik/lZG9OXxBQkO+QxjuJ+pcjXPdBRz6DwWoUM63+QFXBLpsw==
-lab.validation.linaro.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDtto5bsPJ3NuXsWtwMR8bsAzLvkBstmF1QP+eC6jUBsCDHMtBW/zAWJYNPDr30vRkV7J8D64Pd91rgjbqF8mOPDlyVlln03dYtOV3hzVuXLZfxodslJsw4lB+ZhxLfcZAKqqFURJEhrJNJmtFBprxFRbdS1iQHJHJohg3zS9zlLFvUpZGWooLFEM2z2NdUfSiR12ePvdW1YsEimJR/b3h1it/Wot0uEB6VONZGyMrrWvsntJV1NdQFxJR8waTz1sBvQQBJGX+SgEXY1CB3AUiF4yIy5WZ/4YCOk0kO9qABvV0Ks357OU5uY5GMgalAy2RJyvceNf6erlR4vwmpdnDH
-people.linaro.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKKtlH9IGVw1wE3daicRzyOdIM9MzWfUH1tUB8R/md36RDTSqG8VGYrn1E5pJcs7rsk05ZCUQIaglefMytoOvQ8=
-people.linaro.org ssh-dss AAAAB3NzaC1kc3MAAACBAOnQwFbvISNteLPMb/Srm2xwFDrxDql+kxtlZyohrSZ72K9GDg+dqb4W7/QiVrOMhfRzaL93Hj/FLCxKqUXdnTQqekqGosRQK7fLNJvh6DNizoJ+aWzKp1EL3kF2GgKP33ZPtRJYrBdxnc+DDc0yP/He3cyrzbg1nsWSedc1MMVpAAAAFQCm3xIrM1iR9ozuyjKRGwhnrKo9GQAAAIBkdN4dNB298m+2aXqMmLOj1Ry9/S6CTiMn5c9T/luYpWFRnsyuHlBIcZFjyOMtU3bc8b7KwqP8t3XTQbolbqtYOWqPeiaIH/VAk7w9o1tePRwtbTadksYw+UJGtn9c+52uQfGZdjfyjsKs7hEWgE72gTeIb9g1QZ+WCoVfSzNacgAAAIA9T2ONJcRFX3heeDcl6gho8Wj264GDhS5/iqdMCClO3wKUY04hPSpXKRhRm/zzFGb9537Qj6LluDAcg+m/D0FnoQkILLXnfiMnrlyoCCA/jZWrVZw8aQdDHM5LlDdDZKZV7djkbjF0nVvWRTrvc20yQeDLLImaTDOfYjmJ75L1vQ==
-people.linaro.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8OveP3mffvlzMEGuZQzol8zoDwCdAzrNiBfX9rv6lDGr86Sl4MVKs/6cYdjbtrUJD7ls5gc8cfjH5EXPh/HuoBj7Bi+UNfyyGSqrZgTFPpyLx50QJDeogcUN54NL+N/X6HtQtyvGwEXgb26S9ec7LFfyxqT8Yy370XH/y7qAtJgS3UTkf8kzIWgZQvU5MU3FqhOn9mzI+KqsBMRKt0JpW7H2VRYiaHqpshwpuNHRDEQBMnRVHDpo8SZRq21pwRjdTzuzGJv2enCW018jWC/HMmTaaDWzX6SO+JQs9NFVUpM6hg+ysa5piDXnCNQ8Ry6l0nlAjgUt92NEe4OeANrt9
-[review.linaro.org]:29418 ssh-dss AAAAB3NzaC1kc3MAAACBAPB0SE19HQ0dEtm3Unp7+JiNeHlIWNs4j9yN+2Q/fxmBT2ZZ0a5I4gg63b5rM/1Li/6k0f/CtSYBH/mhmjKaEKIQV/c/lmuZivUAfTPT0ld3voXHwRhgpWI/WOiRdsTRZZW2yUHx/troO53mx4eIISKfab+t+vCU5Af+sgTBF6InAAAAFQDGR2ccfQSWVuSyzgvK8f7FT8olTQAAAIBHZqySRfjEnnx9h0aS6i2H21dmZxUllwIJpdpS6XWzvMzVwBb1DKx8bO0WwZeTnxxs1BKVAjmSDkDGYJWHxyU8kQ8aFsBo0KwbNEKXozaK3Gf2YF289xQsigbtPUWYXDz1PNEXtIS9AXdCRq4i09ujO3ayxq4lX2n0LIQ4IhM+RgAAAIB2SvnzVadjW14AN9F9ZEfnK0JRpBTKjz+kQSS1TJiRI/dSHG6CwwXjD1G9YW8mfGhPOPYHIE2MF2n7d7DfqBdeeee0PnwBQ0YBc5qfhQ9Gpi+hqXSem1YaD2YRG40que5bu/Rd6NksnSLg/93Z3L3fN+qTeApRqHQWRrfswGgi+A==
-[review.linaro.org]:29418 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMfTLkTmsbtahAiVJTKXRFbR9MQ/vDH/JPj4QN3XPHJuubxLhUf8WObEBtML7J11uvVM1oDTwM5YG5yjyBnc+85OaQaB9tMPDheGhfMG40F4vxdSnQL29ihyrls0hrFTY9UZ4Y2FmJwYL0rOnGU7iPyNuExQwfg2bkdw67aH9nEGjSd2eXYl2bI4DHujy5GJiV3dR9TlUF0iaSeHVSIX5t9I/BXK+AiSqHTrvwdGGi9XvL6xEWYMOZOpJnCH8Q4OSibsFfQXnCMgIFeO7J/ZMGXqltXOtztgQMr8VvRRD3S+Lcp8yKb5aUjWwoCxb4YzEUbQE04SRVeAGjsfNJcXgT
-review.linaro.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBONeIVl09BaG0iDOqF/qZjDun8fktYdD0Zl2fRAkSGT6Q7ULAXWJZA7IwstvcSs5w9SRV6x/lNc3CqlHwMFaABc=
-review.linaro.org ssh-dss AAAAB3NzaC1kc3MAAACBAJbwbYgvbS+8vnlhJLe1AwgvbBqu0kBw7pBjQgF47lXRKqZbzwQc+hHmMbczJOfIoo1PX39Ifhz142u+yN7PQgUlU+jzI2Q9cjSqfrS02rV0cU2TQRKvgTQH89qMk2M0jOimcz1UCZkCgS2wj6hb1HU9pkhzpH7d+1/M/31Xc5uPAAAAFQC82/+3qHmNd8G8mrPJz9LfdUpsmwAAAIASypGV3LlIOE3bDlZwgr3rZ+44MPq7c16SbpjnjqbsOzPAyllD8MeY0eynuDqtGtT4RtC8uRgmgw7MW1HtYnTSlYt0up66LT19LCRKme8CVtggqjwLTUEKWmrdbe+PSvczKjeszOD0R5qGasSvOOKMJ5jLMnJ9jMhHhItc53eM5AAAAIBXWdudBBziVVk9VE+z1kvOYsCGYosLglqzJMsFfVQh948Ci9PowKx8xognWEtdaZW7+2oEIwL8QR+zPtzNY447i6iRuJy1TaDZfJU8nTfr07KoXB4B7rhADByXl4x9Uk25m9n9XjF/ctjIzyspvcRpqZXMHBUuZalID6E39YJqnA==
-review.linaro.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8Q8j887I9mBD2va9C7gWl4Cr8agHWxuFHfDUWaqiygI9jA4w2YC7mo5oJMqwUk2DsvPDLuU5Z6yyKSA7Cko+L0MnKfNMzQ8e00ZXGDBq8bh1tRKstFselAFmmg+5DhM9q9HPjpKYzbAxU6rxmdFbSc+ktE0rhtmciThVT3YW3bMs3g+D+6sf6ER9UkSpbdZ7skKFXBHw2t1BWaPrvW4L8GMFAokgXUKOE8e1WZkQuCcseIz8J9Hz1p/liyiiTPVQnjGyleUnUY0pZA3ViB6pS317BH5Kvd8aX8x0vSwCIs30rpkmBam9C0b2uj2jWk3GrmHYjVHebMAW376VSLTZV
diff --git a/tcwg-base/tcwg-build/tcwg-test/Dockerfile.in b/tcwg-base/tcwg-build/tcwg-test/Dockerfile.in
deleted file mode 100644
index be59e965..00000000
--- a/tcwg-base/tcwg-build/tcwg-test/Dockerfile.in
+++ /dev/null
@@ -1,7 +0,0 @@
-FROM linaro/ci-#{ARCH}-tcwg-build-ubuntu:#{DISTRO}
-
-COPY tcwg-buildslave/.ssh /root/.ssh
-
-RUN chmod 0700 /root/.ssh/ \
- && sed -i -e "/.*PermitRootLogin.*/d" /etc/ssh/sshd_config \
- && echo "PermitRootLogin without-password" >> /etc/ssh/sshd_config
diff --git a/tcwg-base/tcwg-build/tcwg-test/build.sh b/tcwg-base/tcwg-build/tcwg-test/build.sh
deleted file mode 120000
index 669ce2a6..00000000
--- a/tcwg-base/tcwg-build/tcwg-test/build.sh
+++ /dev/null
@@ -1 +0,0 @@
-../build.sh \ No newline at end of file
diff --git a/tcwg-base/tcwg-build/tcwg-test/gerrit-branches b/tcwg-base/tcwg-build/tcwg-test/gerrit-branches
deleted file mode 120000
index 11f6d349..00000000
--- a/tcwg-base/tcwg-build/tcwg-test/gerrit-branches
+++ /dev/null
@@ -1 +0,0 @@
-../gerrit-branches \ No newline at end of file
diff --git a/tcwg-base/tcwg-dev/Dockerfile.in b/tcwg-base/tcwg-dev/Dockerfile.in
index ecc23f29..c17167a8 100644
--- a/tcwg-base/tcwg-dev/Dockerfile.in
+++ b/tcwg-base/tcwg-dev/Dockerfile.in
@@ -1,53 +1,34 @@
FROM linaro/ci-#{ARCH}-tcwg-base-ubuntu:#{DISTRO}
-COPY run.sh .
-COPY start.sh .
-
-RUN apt-get update \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y \
- software-properties-common \
- && apt-get clean \
- && rm -rf \
- /var/lib/apt/lists/* \
- /tmp/* \
- /var/tmp/*
-
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y \
+ arcanist \
apt-file \
+ elpa-flycheck \
+ git-email \
git-gui \
git-svn \
-#if DISTRO_trusty
-# if !ARCH_arm64
- gnat \
-# endif
-#else
- gnat-5 \
-#endif
+ htop \
+ iputils-ping \
+ iputils-tracepath \
+ ispell \
less \
- locales \
- libgmp-dev \
- libmpc-dev \
- libmpfr-dev \
mc \
+ python3-git \
screen \
+ software-properties-common \
stgit \
+ tig \
tmux \
- unifdef \
&& apt-get clean \
&& rm -rf \
/var/lib/apt/lists/* \
/tmp/* \
/var/tmp/*
-RUN sed -i -e '/.*AuthorizedKeysFile/ d' /etc/ssh/sshd_config \
- && echo "AuthorizedKeysFile %h/.ssh/authorized_keys.docker" >> /etc/ssh/sshd_config \
- && locale-gen en_US.UTF-8 && update-locale LANG=en_US.UTF-8 \
- && apt-file update
+RUN apt-file update
-# Create directories required for X11.
-RUN mkdir -p /tmp/.X11-unix /tmp/.ICE-unix \
- && chmod 1777 /tmp/.X11-unix /tmp/.ICE-unix
+COPY run.sh start.sh /
#if ARCH_amd64 || ARCH_arm64
ENTRYPOINT ["/run.sh"]
diff --git a/tcwg-base/tcwg-dev/build.sh b/tcwg-base/tcwg-dev/build.sh
index 8729547c..d5d7e1c7 100755
--- a/tcwg-base/tcwg-dev/build.sh
+++ b/tcwg-base/tcwg-dev/build.sh
@@ -2,6 +2,10 @@
set -e
+# Can't run multiple copies of this script
+exec 9<Dockerfile
+flock -x 9
+
trap cleanup_exit INT TERM EXIT
cleanup_exit()
@@ -16,14 +20,9 @@ name=$(basename ${PWD} | cut -f3- -d '-')
image=linaro/ci-${arch}-${name}-ubuntu:${distro}
top=$(git rev-parse --show-toplevel)
-cat $top/tcwg-base/tcwg-dev/start.sh.tmpl \
- | sed -e "s#@IMAGE@#$image#g" \
- -e "s#@DISTRO@#$distro#g" > start.sh
-chmod +x start.sh
-cp $top/tcwg-base/tcwg-dev/run.sh.tmpl run.sh
+cp $top/tcwg-base/tcwg-dev/start.sh $top/tcwg-base/tcwg-dev/run.sh ./
(cd ..; ./build.sh)
-"$top"/tcwg-base/validate-dockerfile.sh Dockerfile
-docker pull $image 2>/dev/null || true
+"$top"/tcwg-base/validate-checksum.sh Dockerfile
docker build --tag=$image .
echo $image > .docker-tag
diff --git a/tcwg-base/tcwg-dev/gerrit-branches b/tcwg-base/tcwg-dev/gerrit-branches
deleted file mode 120000
index 11f6d349..00000000
--- a/tcwg-base/tcwg-dev/gerrit-branches
+++ /dev/null
@@ -1 +0,0 @@
-../gerrit-branches \ No newline at end of file
diff --git a/tcwg-base/tcwg-dev/run.sh b/tcwg-base/tcwg-dev/run.sh
new file mode 100755
index 00000000..5373c566
--- /dev/null
+++ b/tcwg-base/tcwg-dev/run.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+set -e
+
+if [ x"$1" = x"start.sh" ]; then
+ cat /start.sh
+ exit 0
+fi
+
+new-user.sh --update true "$@"
+
+# /dev/kvm has a random group within the container. Fix it.
+if [ -c /dev/kvm ]; then
+ chgrp tcwg-users /dev/kvm
+fi
+
+exec /usr/sbin/sshd -D
diff --git a/tcwg-base/tcwg-dev/run.sh.tmpl b/tcwg-base/tcwg-dev/run.sh.tmpl
deleted file mode 100755
index 53bc630f..00000000
--- a/tcwg-base/tcwg-dev/run.sh.tmpl
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/bin/bash
-
-set -e
-
-if [ x"$@" = x"start.sh" ]; then
- cat /start.sh
- exit 0
-fi
-
-if ! [ -f /etc/sudoers.d/user ]; then
- passwd_ent="$1"
- groupname="$2"
- pubkey="$3"
-
- username="$(echo $passwd_ent | cut -d: -f 1)"
- uid="$(echo $passwd_ent | cut -d: -f 3)"
- gid="$(echo $passwd_ent | cut -d: -f 4)"
- comment="$(echo $passwd_ent | cut -d: -f 5)"
- home="$(echo $passwd_ent | cut -d: -f 6)"
- shell="$(echo $passwd_ent | cut -d: -f 7)"
-
- groupadd -g "$gid" "$groupname"
- useradd -m -u "$uid" -g "$groupname" -G kvm -c "$comment" -s "$shell" "$username"
-
- if ! [ -f /home/$username/.ssh/authorized_keys.docker ] \
- && [ x"$pubkey" != x"" ]; then
- sudo -u $username mkdir -p /home/$username/.ssh/
- echo "$pubkey" | sudo -u $username tee /home/$username/.ssh/authorized_keys.docker > /dev/null
- fi
-
- echo "$username ALL = NOPASSWD: ALL" > /etc/sudoers.d/user
- chmod 440 /etc/sudoers.d/user
-fi
-
-exec /usr/sbin/sshd -D
diff --git a/tcwg-base/tcwg-dev/start.sh b/tcwg-base/tcwg-dev/start.sh
new file mode 100755
index 00000000..70d9998c
--- /dev/null
+++ b/tcwg-base/tcwg-dev/start.sh
@@ -0,0 +1,122 @@
+#!/bin/bash
+
+set -e
+
+usage ()
+{
+ cat <<EOF
+$0 [OPTIONS] -- IMAGE [NEW_USER_PARAMS]
+
+Options:
+ --name CONTAINER_NAME
+ Name of the container
+
+ --user USER
+ Username to create inside the container
+
+ --verbose true/false
+ Whether to run in verbose mode
+EOF
+ exit 1
+}
+
+name="default"
+user="$USER"
+verbose=false
+
+while [ $# -gt 0 ]; do
+ case $1 in
+ --name) name="$2"; shift ;;
+ --user) user="$2"; shift ;;
+ --verbose) verbose="$2"; shift ;;
+ --) shift; break ;;
+ *) echo "ERROR: Wrong option: $1"; usage ;;
+ esac
+ shift
+done
+
+image="$1"
+shift
+
+if $verbose; then
+ set -x
+fi
+
+if [ x"$image" = x"" ]; then
+ echo "ERROR: image name not provided"
+ usage
+fi
+
+if [ x"$(id -u)" = x"0" ] || groups 2>/dev/null | grep -q docker; then
+ # Run docker straight up if $USER is root or in "docker" group.
+ DOCKER="docker"
+elif groups tcwg-buildslave 2>/dev/null | grep -q docker; then
+ # If tcwg-buildslave user is present, use it to start the container
+ # to have [sudo] log record of container startups.
+ DOCKER="sudo -u tcwg-buildslave docker"
+else
+ # Fallback to sudo otherwise.
+ DOCKER="sudo docker"
+fi
+
+if [ x"$name" = x"default" ]; then
+ name="$user-$(echo "$image" | tr "/:" "_")"
+fi
+
+mounts=""
+
+# Bind-mount $HOME
+mounts="$mounts -v /home/$user:/home/$user"
+# Bind-mount /home/tcwg-buildslave read-only to get access to
+# /home/tcwg-buildslave/snapshots-ref/
+if [ -d "/home/tcwg-buildslave" ]; then
+ mounts="$mounts -v /home/tcwg-buildslave:/home/tcwg-buildslave:ro"
+fi
+# Bind-mount ssh host keys.
+for key in /etc/ssh/ssh_host_*_key{,.pub}; do
+ mounts="$mounts -v $key:$key:ro"
+done
+
+# If possible, directly check the kernel config to see if KVM is enabled.
+if [ -f /proc/config.gz ] && zgrep -q -e '^CONFIG_KVM=[ym]' /proc/config.gz; then
+ HOST_HAS_KVM=true
+# AWS Ubuntu does not have KVM enabled.
+elif uname -a | grep -q -- -aws; then
+ HOST_HAS_KVM=false
+# Otherwise, check if it's a stock Ubuntu kernel. Those have KVM enabled.
+elif uname -v | grep -q -- -Ubuntu; then
+ HOST_HAS_KVM=true
+# Otherwise, assume that the host doesn't have /dev/kvm.
+else
+ HOST_HAS_KVM=false
+fi
+
+# Allow KVM use within the container.
+if [ "$HOST_HAS_KVM" = "true" ]; then
+ mounts="$mounts --device=/dev/kvm"
+fi
+
+# Use at most half of all available RAM.
+memlimit=$(free -m | awk '/^Mem/ { print $2 }')
+memlimit=$(($memlimit / 2))m
+
+# IPC_LOCK is required for some implementations of ssh-agent (e.g., MATE's).
+# SYS_PTRACE is required for debugger work.
+# seccomp=unconfined to allow disabling of ASLR for sanitizer regression tests.
+caps="--cap-add=IPC_LOCK --cap-add=SYS_PTRACE --security-opt seccomp:unconfined"
+
+$DOCKER run --name=$name --hostname=$(hostname)-dev --restart=unless-stopped -dt -p 22 $mounts --memory=$memlimit --pids-limit=5000 $caps $image --user $user "$@"
+
+port=$($DOCKER port $name 22 | cut -d: -f 2)
+hostname=$(echo ${SSH_CONNECTION} | { read client_ip client_port server_ip server_port; echo $server_ip; })
+
+set +x
+cat <<EOF
+NOTE: the warning about kernel not supporting swap memory limit is expected
+To connect to the container run "ssh -p $port $user@$hostname" from your local
+machine.
+To stop container run "docker stop $name"
+To restart container run "docker start $name"
+To remove container run "docker rm -fv $name"
+See https://collaborate.linaro.org/display/TCWG/How+to+setup+personal+dev+environment+using+docker for additional info
+EOF
diff --git a/tcwg-base/tcwg-dev/start.sh.tmpl b/tcwg-base/tcwg-dev/start.sh.tmpl
deleted file mode 100755
index 9a3b3956..00000000
--- a/tcwg-base/tcwg-dev/start.sh.tmpl
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/bin/bash
-
-set -e
-set -x
-
-if groups tcwg-buildslave 2>/dev/null | grep -q docker; then
- # If tcwg-buildslave user is present, use it to start the container
- # to have [sudo] log record of container startups.
- DOCKER="sudo -u tcwg-buildslave docker"
-elif groups 2>/dev/null | grep -q docker; then
- # Run docker straight up if $USER is in "docker" group.
- DOCKER="docker"
-else
- # Fallback to sudo otherwise.
- DOCKER="sudo docker"
-fi
-
-image=@IMAGE@
-name=$USER-@DISTRO@
-# Bind-mount $HOME and /home/tcwg-buildslave (to get access to
-# /home/tcwg-buildslave/snapshots-ref/)
-mounts="-v $HOME:$HOME -v /home/tcwg-buildslave:/home/tcwg-buildslave:ro"
-# Use at most half of all available RAM.
-memlimit=$(($(free -g | awk '/^Mem/ { print $2 }') / 2))G
-# IPC_LOCK is required for some implementations of ssh-agent (e.g., MATE's).
-# SYS_PTRACE is required for debugger work.
-caps="--cap-add=IPC_LOCK --cap-add=SYS_PTRACE"
-# Fetch ssh public key from LDAP.
-pubkey="$(/etc/ssh/ssh_keys.py $USER 2>/dev/null || sss_ssh_authorizedkeys $USER 2>/dev/null)"
-
-$DOCKER pull $image
-$DOCKER run --name=$name -dt -p 22 $mounts --memory=$memlimit --pids-limit=5000 $caps $image "$(getent passwd $USER)" "$(id -gn)" "$pubkey"
-
-port=$($DOCKER port $name 22 | cut -d: -f 2)
-
-set +x
-echo "NOTE: the warning about kernel not supporting swap memory limit is expected"
-echo "To connect to container run \"ssh -p $port localhost\""
-echo "To stop container run \"docker stop $name\""
-echo "To restart container run \"docker start $name\""
-echo "To remove container run \"docker rm -fv $name\""
-echo "See https://collaborate.linaro.org/display/TCWG/How+to+setup+personal+dev+environment+using+docker for additional info"
diff --git a/tcwg-base/tcwg-dev/tcwg-x2go/Dockerfile.in b/tcwg-base/tcwg-dev/tcwg-x2go/Dockerfile.in
index 888e48b8..c0b9c9a9 100644
--- a/tcwg-base/tcwg-dev/tcwg-x2go/Dockerfile.in
+++ b/tcwg-base/tcwg-dev/tcwg-x2go/Dockerfile.in
@@ -1,7 +1,5 @@
FROM linaro/ci-#{ARCH}-tcwg-dev-ubuntu:#{DISTRO}
-COPY start.sh .
-
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y \
ubuntu-desktop \
@@ -11,13 +9,12 @@ RUN apt-get update \
/tmp/* \
/var/tmp/*
-RUN add-apt-repository ppa:x2go/stable \
- && apt-get update \
+RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y \
duplicity \
+ light-themes \
mate-desktop-environment \
- x2godesktopsharing \
- x2gomatebindings \
+ ubuntu-mate-themes \
x2goserver \
x2goserver-xsession \
&& apt-get clean \
@@ -29,6 +26,7 @@ RUN add-apt-repository ppa:x2go/stable \
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y \
ddd \
+ xfonts-100dpi \
&& apt-get clean \
&& rm -rf \
/var/lib/apt/lists/* \
diff --git a/tcwg-base/tcwg-dev/tcwg-x2go/build.sh b/tcwg-base/tcwg-dev/tcwg-x2go/build.sh
index 669ce2a6..a528963d 120000..100755
--- a/tcwg-base/tcwg-dev/tcwg-x2go/build.sh
+++ b/tcwg-base/tcwg-dev/tcwg-x2go/build.sh
@@ -1 +1,20 @@
-../build.sh \ No newline at end of file
+#!/bin/sh
+
+set -e
+
+# Can't run multiple copies of this script
+exec 9<Dockerfile
+flock -x 9
+
+export LANG=C
+distro=$(basename ${PWD} | cut -f1 -d '-')
+arch=$(basename ${PWD} | cut -f2 -d '-')
+name=$(basename ${PWD} | cut -f3- -d '-')
+image=linaro/ci-${arch}-${name}-ubuntu:${distro}
+top=$(git rev-parse --show-toplevel)
+
+# Pull parent image instead of rebuilding it
+docker pull linaro/ci-${arch}-tcwg-dev-ubuntu:${distro}
+"$top"/tcwg-base/validate-checksum.sh Dockerfile
+docker build --tag=$image .
+echo $image > .docker-tag
diff --git a/tcwg-base/tcwg-dev/tcwg-x2go/gerrit-branches b/tcwg-base/tcwg-dev/tcwg-x2go/gerrit-branches
index 11f6d349..e69de29b 120000..100644
--- a/tcwg-base/tcwg-dev/tcwg-x2go/gerrit-branches
+++ b/tcwg-base/tcwg-dev/tcwg-x2go/gerrit-branches
@@ -1 +0,0 @@
-../gerrit-branches \ No newline at end of file
diff --git a/tcwg-base/tcwg-host/Dockerfile.in b/tcwg-base/tcwg-host/Dockerfile.in
new file mode 100644
index 00000000..7b5f1e0b
--- /dev/null
+++ b/tcwg-base/tcwg-host/Dockerfile.in
@@ -0,0 +1,48 @@
+FROM linaro/ci-#{ARCH}-tcwg-base-ubuntu:#{DISTRO}
+
+#if ARCH_amd64
+# Install static user-mode QEMU for running SVE LLVM buildbots via QEMU
+# on x86_64 machines. We bind-mount qemu-aarch64-static binary inside
+# the aarch64 tcwg-llvmbot container, and all specify it as container
+# entrypoint. This allows us to run aarch64 container with SVE support.
+# We do this only for Focal, since Bionic's QEMU version has no SVE support.
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ qemu-user-static \
+ && apt-get clean \
+ && rm -rf \
+ /var/lib/apt/lists/* \
+ /tmp/* \
+ /var/tmp/*
+#endif
+
+COPY docker-stats docker-wrapper tcwg-build.sh /usr/local/bin/
+COPY docker-wrapper /usr/local/bin/docker
+
+COPY run.sh start.sh /
+
+# Allow privileged containers to access services on the bare machine.
+# See run_on_bare_machine and run.sh for details.
+COPY run_on_bare_machine /usr/local/bin/
+RUN ln -sf /usr/local/bin/run_on_bare_machine /usr/sbin/sysctl \
+ && ln -sf /usr/local/bin/run_on_bare_machine /usr/bin/systemctl \
+ && ln -sf /usr/local/bin/run_on_bare_machine /usr/bin/timedatectl \
+ && ln -sf /usr/local/bin/run_on_bare_machine /usr/sbin/reboot
+
+# These are compatibility links for prepare-board.sh to find cpupower in the same
+# place when running "start_board" on bare machine and inside host container.
+# These are for TK1s and TX1s.
+RUN true \
+ && ln -s /usr/lib/linux-tools/4.18.0-13-generic /usr/lib/linux-tools/3.10.40 \
+ && ln -s /usr/lib/linux-tools/4.18.0-13-generic /usr/lib/linux-tools/4.4.38-tegra
+
+ENV TINI_VERSION v0.18.0
+ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-#{ARCH} /sbin/tini
+RUN chmod +x /sbin/tini
+
+#if ARCH_amd64 || ARCH_arm64
+ENTRYPOINT ["/sbin/tini", "--", "/run.sh"]
+#else
+ENTRYPOINT ["/sbin/tini", "--", "linux32", "/run.sh"]
+#endif
+CMD ["start.sh"]
diff --git a/tcwg-base/tcwg-host/build.sh b/tcwg-base/tcwg-host/build.sh
new file mode 100755
index 00000000..002e699a
--- /dev/null
+++ b/tcwg-base/tcwg-host/build.sh
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+set -e
+
+# Can't run multiple copies of this script
+exec 9<Dockerfile
+flock -x 9
+
+trap cleanup_exit INT TERM EXIT
+
+cleanup_exit()
+{
+ rm -rf docker-stats docker-wrapper run.sh start.sh tcwg-build.sh run_on_bare_machine
+}
+
+export LANG=C
+distro=$(basename ${PWD} | cut -f1 -d '-')
+arch=$(basename ${PWD} | cut -f2 -d '-')
+name=$(basename ${PWD} | cut -f3- -d '-')
+image=linaro/ci-${arch}-${name}-ubuntu:${distro}
+top=$(git rev-parse --show-toplevel)
+
+cp $top/tcwg-base/tcwg-host/docker-stats \
+ $top/tcwg-base/tcwg-host/docker-wrapper \
+ $top/tcwg-base/tcwg-host/run.sh \
+ $top/tcwg-base/tcwg-host/start.sh \
+ $top/tcwg-base/tcwg-host/tcwg-build.sh \
+ $top/tcwg-base/tcwg-host/run_on_bare_machine ./
+
+(cd ..; ./build.sh)
+"$top"/tcwg-base/validate-checksum.sh Dockerfile
+docker build --tag=$image .
+echo $image > .docker-tag
diff --git a/tcwg-base/tcwg-host/docker-stats b/tcwg-base/tcwg-host/docker-stats
new file mode 100755
index 00000000..e981aa5a
--- /dev/null
+++ b/tcwg-base/tcwg-host/docker-stats
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+exec watch docker stats --no-stream --format "\"table {{.Name}}\\t{{.CPUPerc}}\\t{{.PIDs}}\\t{{.MemPerc}}\\t{{.MemUsage}}\""
diff --git a/tcwg-base/tcwg-host/docker-wrapper b/tcwg-base/tcwg-host/docker-wrapper
new file mode 100755
index 00000000..caff313a
--- /dev/null
+++ b/tcwg-base/tcwg-host/docker-wrapper
@@ -0,0 +1,97 @@
+#!/bin/bash
+
+set -euf -o pipefail
+
+# This wrapper for docker client adds support for "maybepull" command
+# to workaround dockerhub's limits on pull requests. "Maybepull" command
+# will look at timestamps of when images were last pulled, and will
+# pull the image only when it has been over 24h from the last pull.
+# Note that behavior of the usual "pull" command is not changed.
+#
+# We also track image last-used date to not needlessly cleanup images
+# in jenkins-scripts/tcwg-cleanup-stale-containers.sh .
+
+stamp_dir=/home/shared/docker
+
+if ! [ -d "$stamp_dir" ]; then
+ sudo mkdir -p "$stamp_dir" || mkdir -p "$stamp_dir"
+ sudo chmod 0777 "$stamp_dir" || chmod 0777 "$stamp_dir"
+fi
+
+cmd="${1-}"
+shift 1
+
+image=""
+case "$cmd" in
+ "maybepull"|"pull")
+ # Skip parameters starting with "-" and next parameter will be image.
+ for opt in "$@"; do
+ case "$opt" in
+ "-"*) ;;
+ *)
+ image="$opt"
+ break
+ ;;
+ esac
+ done
+ ;;
+ "run")
+ # "docker run" has more complex option handling than we want to deal
+ # with, so find parameter that looks like a TCWG image.
+ # This only affects stamp files, so is harmless if we get it wrong.
+ for opt in "$@"; do
+ case "$opt" in
+ "linaro/ci-"*"-tcwg-"*"-ubuntu"*)
+ image="$opt"
+ break
+ ;;
+ esac
+ done
+ ;;
+esac
+
+if [ x"$image" != x"" ]; then
+ # We use two stamp files per image:
+ # - $image_stamp.pull -- time of last image pull
+ # - $image_stamp.use -- time of last image use
+ image_stamp="$stamp_dir/$(echo "$image" | tr "/:" "_")"
+fi
+
+# We attempt to run all our builds using current versions of docker images.
+# Unfortunately, now that dockerhub limits pull requests, we need to be more
+# considerate to when we pull the image or attempt to use a local copy.
+# Also note that "docker run" below will automatically pull the image if there
+# is no local copy.
+if [ x"$image" != x"" ] && [ x"$cmd" = x"maybepull" ]; then
+ # For starters, let's try to pull images once a day. This guarantees
+ # that any change to master docker images will be deployed within a day.
+ pull_if_older_than=$(($(date +%s) - 1*24*60*60))
+ # Use negative comparison to handle non-existent stamp files.
+ if ! [ "$(stat -c %Z "$image_stamp.pull" 2>/dev/null)" \
+ -gt $pull_if_older_than ] 2>/dev/null; then
+ cmd="pull"
+ else
+ exit 0
+ fi
+fi
+
+sudo /usr/bin/docker "$cmd" "$@"
+
+case "$image:$cmd" in
+ :*) ;;
+ *:"pull")
+ # Remove the stamp to avoid permission issues (we have rwx permissions
+ # for all on the directory, so we can always remove a file, but only
+ # owner can modify files.
+ # Also touch .use stamp to compensate for inaccurate detection of
+ # images from "docker run" above.
+ rm -f "$image_stamp.pull" "$image_stamp.use"
+ touch "$image_stamp.pull" "$image_stamp.use"
+ ;;
+ *:"run")
+ # Update the time of image use, so that we don't remove the image in
+ # tcwg-cleanup-stale-containers.
+ rm -f "$image_stamp.use"
+ touch "$image_stamp.use"
+ ;;
+esac
diff --git a/tcwg-base/tcwg-host/qc-reboot.sh b/tcwg-base/tcwg-host/qc-reboot.sh
new file mode 100755
index 00000000..48579fea
--- /dev/null
+++ b/tcwg-base/tcwg-host/qc-reboot.sh
@@ -0,0 +1,35 @@
+#!/bin/bash
+
+set -euf -o pipefail
+
+# Reboot script for tcwg-qc-*.tcwglab machines.
+# See https://linaro.atlassian.net/browse/STG-3331 for background.
+#
+# !!! This script should be installed on BARE machine under
+# /usr/local/sbin/reboot -- this location is searched by PATH first.
+
+qbootctl=/root/qbootctl/build/qbootctl
+try=0
+
+while true; do
+ try=$(($try + 1))
+ echo "Try #$try"
+
+ qbootctl_ok=true
+
+ for cmd in "-n a" "-n b" "-m a" "-n a" "-m b" "-n b"; do
+ if $qbootctl $cmd 2>&1 | grep Failed; then
+ qbootctl_ok=false
+ break
+ fi
+ done
+
+ if $qbootctl_ok; then
+ break
+ fi
+
+ # Loop until we complete the whole reboot sequence.
+done
+
+echo "SUCCESS: Rebooting"
+/usr/sbin/reboot
diff --git a/tcwg-base/tcwg-host/run.sh b/tcwg-base/tcwg-host/run.sh
new file mode 100755
index 00000000..a1a4b953
--- /dev/null
+++ b/tcwg-base/tcwg-host/run.sh
@@ -0,0 +1,159 @@
+#!/bin/bash
+
+set -e
+
+if [ x"$1" = x"start.sh" ]; then
+ cat /start.sh
+ exit 0
+fi
+
+group="$1"
+node="$2"
+
+case "$node" in
+ host)
+ # Create authorized_keys.orig if necessary
+ if ! [ -f /root/.ssh/authorized_keys.orig ]; then
+ if ! [ -f /root/.ssh/authorized_keys ]; then
+ if ! [ -d /root/.ssh ]; then
+ mkdir -p /root/.ssh
+ chmod 0700 /root/.ssh
+ fi
+ touch /root/.ssh/authorized_keys
+ fi
+ cp /root/.ssh/authorized_keys /root/.ssh/authorized_keys.orig
+ fi
+
+ # Prepare root keys in a temporary file so that we don't start
+ # creating a new authorized_keys for root, and fail midway leaving
+ # an empty authorized_keys (e.g., due to running out of disk space).
+ root_keys=$(mktemp)
+ (
+ echo "# Original root keys:"
+ cat /root/.ssh/authorized_keys.orig
+ ) > $root_keys
+
+ if [ x"$(docker inspect --format='{{.HostConfig.Privileged}}' host)" \
+ = x"true" ]; then
+ key=$(mktemp)
+ rm -f $key $key.pub
+ # Use key type ed22519 since some of our benchmarking boards have
+ # old distros and don't accept default key type.
+ ssh-keygen -f $key -t ed25519 -N "" -q
+ sed -i -e "s#^key=.*#key=$key#" /usr/local/bin/run_on_bare_machine
+
+ # Install key for run_on_bare_machine both in new and existing
+ # root keys. We this in existing root keys to run timedatectl.
+ for auth_keys in $root_keys /root/.ssh/authorized_keys; do
+ (
+ echo
+ echo "# Temporary key for granting privileged host container access to the bare machine"
+ cat $key.pub
+ ) >> $auth_keys
+ done
+
+ # Now that we have run_on_bare_machine setup, synchronize the date
+ # to avoid unjustified certificate errors
+ timedatectl set-ntp true
+ fi
+ ;;
+esac
+
+# Fetch the latest copy of /home-data/ to avoid using old user files
+# when [re]starting container from an old image. "Jenkins" and "host"
+# containers bind-mount /home, and we need to have a unified view of
+# what the latest version of user files is.
+(
+ tmpdir=$(mktemp -d)
+ git clone --depth 1 --single-branch https://git.linaro.org/ci/dockerfiles.git $tmpdir
+ rsync -aL --del $tmpdir/tcwg-base/home-data/ /home-data/
+ rm -rf $tmpdir
+)
+
+if [ x"$group" = x"all" ]; then
+ group=".*"
+ root_group="tcwg-root"
+elif grep -q "^$group-root:x:x:" /home-data/group; then
+ root_group="$group-root"
+else
+ root_group="tcwg-root"
+fi
+
+root_users=""
+
+while read line; do
+ user=$(echo "$line" | cut -d: -f 1)
+ if grep "^$group:x:[0-9]" /home-data/group | cut -d: -f 4 \
+ | grep "\(^\|,\)$user\(,\|\$\)" >/dev/null; then
+ new-user.sh --update true --passwd "$line" &
+ res=0; wait $! || res=$?
+ if [ x"$res" != x"0" ]; then
+ echo "WARNING: User configuration failed: $line"
+ elif grep "^$root_group:x:x:" /home-data/group | cut -d: -f 4 \
+ | grep "\(^\|,\)$user\(,\|\$\)" >/dev/null; then
+ # Make list of users allowed to ssh as root.
+ root_users="$root_users $user"
+ fi
+ else
+ echo "INFO: Not adding user $user because they are not in the group $group."
+ fi
+done </home-data/passwd
+
+case "$node" in
+ host)
+ # Install ssh keys of $root_users into root's account.
+ # Note that this is intended to grant $root_users root access
+ # to the bare machine -- /root is bind-mounted from bare machine
+ # to "host" container.
+ (
+ for user in $root_users; do
+ echo
+ echo "# $user keys:"
+ cat /home-data/$user/.ssh/authorized_keys
+ done
+ echo
+ ) >> $root_keys
+
+ # Now install new root keys.
+ mv $root_keys /root/.ssh/authorized_keys
+
+ # tcwg-start-container.sh needs /root/docker-wrapper to test
+ # and recover docker service on benchmarking boards.
+ # Copy docker-stats for troubleshooting purposes.
+ cp -t /root/ /usr/local/bin/docker-wrapper /usr/local/bin/docker-stats
+
+ # Configure and start ssh server
+ sed -i -e "/.*Port.*/d" /etc/ssh/sshd_config
+ echo "Port 2222" >> /etc/ssh/sshd_config
+ exec /usr/sbin/sshd -D
+ ;;
+ tcwg-bmk-*) user=tcwg-benchmark ;;
+ *) user=tcwg-buildslave ;;
+esac
+
+case "$node" in
+ # create a LNT server on tcwg-ex42-01
+ tcwg-lnt-*)
+ port=$((8080 + ${node##*-}))
+ jenkins_scripts_dir=$(mktemp -d)
+ sudo -i -u $user git clone \
+ https://git.linaro.org/toolchain/jenkins-scripts.git \
+ $jenkins_scripts_dir
+ $jenkins_scripts_dir/tcwg-start-container.sh \
+ --container $node-lnt --image linaro/ci-amd64-tcwg-lnt-ubuntu:jammy \
+ --additional_options \
+ "-p $port:80 -v /home/$user/$node:/home/$user/$node" \
+ -- linaro/ci-amd64-tcwg-lnt-ubuntu:jammy $node
+ rm -rf "$jenkins_scripts_dir"
+ ;;
+esac
+
+sudo -i -u $user rm -rf /home/$user/jenkins-workdir-$node
+sudo -i -u $user mkdir /home/$user/jenkins-workdir-$node
+sudo -i -u $user curl -o /home/$user/jenkins-workdir-$node/agent.jar \
+ https://ci.linaro.org/jnlpJars/agent.jar
+
+exec sudo -i -u $user java -jar /home/$user/jenkins-workdir-$node/agent.jar \
+ -jnlpUrl https://ci.linaro.org/computer/$node/slave-agent.jnlp \
+ -noReconnect -secret @jenkins/$node.secret \
+ -workDir /home/$user/jenkins-workdir-$node
diff --git a/tcwg-base/tcwg-host/run_on_bare_machine b/tcwg-base/tcwg-host/run_on_bare_machine
new file mode 100755
index 00000000..a30ff5aa
--- /dev/null
+++ b/tcwg-base/tcwg-host/run_on_bare_machine
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+key=NOKEY
+if [ "$key" = "NOKEY" ]; then
+ # $key is overrided by "sed" in tcwg-base/tcwg-host/run.sh .
+ echo "WARNING: $0 is supported only for privileged host containers."
+ exit 1
+fi
+
+exec ssh -oStrictHostKeyChecking=no -i "$key" -p22 root@localhost "$(basename $0)" "$@"
diff --git a/tcwg-base/tcwg-host/start.sh b/tcwg-base/tcwg-host/start.sh
new file mode 100755
index 00000000..fb80b292
--- /dev/null
+++ b/tcwg-base/tcwg-host/start.sh
@@ -0,0 +1,186 @@
+#!/bin/bash
+
+set -e
+
+usage ()
+{
+ cat <<EOF
+$0 [OPTIONS] -- IMAGE [GROUP [NODE]]
+
+Options:
+ --verbose true/false
+ Whether to run in verbose mode
+
+ IMAGE
+ Docker tcwg-host image
+
+ GROUP
+ User group to configure access to; or "all"
+
+ NODE
+ Jenkins node ID to connect as; or "host"
+EOF
+ exit 1
+}
+
+group="all"
+node="host"
+verbose=false
+additional_options=""
+
+while [ $# -gt 0 ]; do
+ case $1 in
+ --verbose) verbose="$2"; shift ;;
+ --additional_options) additional_options="$2"; shift ;;
+ --) shift; break ;;
+ *) echo "ERROR: Wrong option: $1"; usage ;;
+ esac
+ shift
+done
+
+image="$1"
+group="${2-$group}"
+node="${3-$node}"
+
+if $verbose; then
+ set -x
+fi
+
+if [ x"$image" = x"" ]; then
+ echo "ERROR: image name not provided"
+ usage
+fi
+
+if [ x"$(id -u)" = x"0" ] || groups 2>/dev/null | grep -q docker; then
+ # Run docker straight up if $USER is root or in "docker" group.
+ DOCKER="docker"
+elif groups tcwg-buildslave 2>/dev/null | grep -q docker; then
+ # If tcwg-buildslave user is present, use it to start the container
+ # to have [sudo] log record of container startups.
+ DOCKER="sudo -u tcwg-buildslave docker"
+else
+ # Fallback to sudo otherwise.
+ DOCKER="sudo docker"
+fi
+
+mounts=""
+# Bind-mount user HOMEs.
+mounts="$mounts -v /home:/home"
+# Bind-mount root's home so that run.sh can grant $root_users access
+# to bare machine.
+mounts="$mounts -v /root:/root"
+# Bind-mount docker socket and binary to give access to docker.
+mounts="$mounts -v /var/run/docker.sock:/var/run/docker.sock"
+mounts="$mounts -v /usr/bin/docker:/usr/bin/docker"
+# Bind-mount ssh host keys.
+for key in /etc/ssh/ssh_host_*_key{,.pub}; do
+ mounts="$mounts -v $key:$key:ro"
+done
+
+# Use at most half of all available RAM.
+memlimit=$(free -m | awk '/^Mem/ { print $2 }')
+memlimit=$(($memlimit / 2))m
+
+case "$(uname -r):$(uname -m):$($DOCKER --version | cut -d" " -f3)" in
+ *:armv7l:18*|\
+ 4.4.38-tegra:aarch64:18*)
+ # Somewhere between docker-ce 19.03.5 and 19.03.6 docker bridge network
+ # got broken on, at least, armhf with 3.10 kernel (aka TK1s).
+ # At the same time to run ubuntu:focal we need docker-ce 19.03.9-ish
+ # due to seccomp not supporting some of the syscalls.
+ # We have two options:
+ # 1. Use old docker and workaround ubuntu:focal's seccomp problem by
+ # disabling it via --privileged option.
+ # 2. Use new docker and workaround broken bridge network by using
+ # --network host.
+ # In the case of tcwg-tk1-* and tcwg-tx1-* boards, which are used
+ # for jenkins CI, we need the bridge network, so we choose (1).
+ workaround="--privileged"
+ ;;
+ *:aarch64:[0-9].*|\
+ *:aarch64:1[0-9].*|\
+ *:aarch64:2[0123].*)
+ # On aarch64 servers (which we generally use both in aarch64
+ # and aarch32 modes), we require a recent-enough docker.
+ # Docker from Ubuntu 20.04 had problems with some syscalls in
+ # aarch32 mode, leading to wrong regression reports when
+ # running glibc tests in aarch32 mode. (version 24.0.5 from
+ # Ubuntu 22.04.3 is OK)
+ msg="Docker too old: $($DOCKER --version). Upgrade to 24.0.5+"
+ # If we are running on the bare machine, make this an error, a
+ # warning otherwise.
+ if [ -f /.dockerenv ]; then
+ echo "WARNING: $msg"
+ else
+ echo "ERROR: $msg"
+ exit 1
+ fi
+ ;;
+esac
+
+# Enable WSL-Interop inside containers. This allows us to build toolchains
+# inside docker containers inside WSL2 environments, and still have ability
+# to run generated win32 executables.
+# If this doesn't work, make WSL2 version is 2.0.14 or later; WSL 2.0.9
+# has a bug preventing interop outside of the "main init" process tree.
+case "$(uname -r)" in
+ *"-WSL2") mounts="$mounts -v /init:/init:ro -v /run/WSL:/run/WSL" ;;
+esac
+
+# Since we're starting a host container, take the opportunity to ensure that GDB
+# can attach to test programs when running the testsuite, and that core files
+# are being correctly stored in the filesystem.
+(
+ # Use "sudo sysctl" because there's no guarantee that this script is
+ # running as root. And there's no guarantee that "sudo sysctl" will
+ # actually work but, at least, it will get the attention of
+ # the developer.
+ set +e
+ ptrace_scope=$(sudo sysctl -n kernel.yama.ptrace_scope)
+ res=$?
+ ptrace_scope_config=""
+ # If sysctl above failed (e.g., because this is a non-privileged
+ # jenkins container), then do not attempt to change system configuration.
+ if [ $res = 0 ] && [ "$ptrace_scope" != 0 ]; then
+ set -e
+ sudo sysctl -we kernel.yama.ptrace_scope=0
+ ptrace_scope_config="kernel.yama.ptrace_scope = 0"
+ fi
+
+ core_pattern=$(sudo sysctl -n kernel.core_pattern)
+ res=$?
+ core_pattern_config=""
+ # If sysctl above failed (e.g., because this is a non-privileged
+ # jenkins container), then do not attempt to change system configuration.
+ if [ $res = 0 ] && echo "$core_pattern" | grep -q -v -e '^core'; then
+ set -e
+ sudo sysctl -we kernel.core_pattern=core.%e.%p.%h.%t
+ core_pattern_config="
+# %e: executable filename
+# %p: PID
+# %h: hostname
+# %t: UNIX time of dump
+kernel.core_pattern = core.%e.%p.%h.%t"
+ fi
+
+ # If there's an Apport service running, then it will restore its own
+ # kernel.core_pattern on reboot, irrespective of the sysctl configuration
+ # file. Therefore, we need to disable it.
+ if systemctl --quiet is-active apport.service; then
+ systemctl stop apport.service
+ systemctl disable apport.service
+ fi
+
+ # If any sysctl change was made, persist it in a configuration file.
+ if [ -n "$ptrace_scope_config" ] || [ -n "$core_pattern_config" ]; then
+ sudo tee /etc/sysctl.d/90-tcwg.conf > /dev/null <<EOF
+$ptrace_scope_config
+$core_pattern_config
+EOF
+ sudo chmod 644 /etc/sysctl.d/90-tcwg.conf
+ fi
+)
+
+$DOCKER run -dt --name=$node --network host --restart=unless-stopped $mounts \
+ --memory=$memlimit --pids-limit=5000 $workaround $additional_options \
+ $image "$group" "$node"
diff --git a/tcwg-base/tcwg-host/tcwg-build.sh b/tcwg-base/tcwg-host/tcwg-build.sh
new file mode 100755
index 00000000..4faf5418
--- /dev/null
+++ b/tcwg-base/tcwg-host/tcwg-build.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+set -euf -o pipefail
+
+# Helper script to quickly enter CI build containers.
+
+if [ $# != 0 ]; then
+ grep=(grep "$@")
+else
+ grep=(grep "^[0-9]\+-")
+fi
+
+cnt=($(docker ps --format "{{.Names}}" | "${grep[@]}"))
+
+if [ "${#cnt[@]}" != 1 ]; then
+ echo "ERROR: Containers matching '${grep[*]}':"
+ printf "%s\n" "${cnt[@]}"
+ echo "ERROR: Must be exactly one matching container"
+ exit 1
+fi
+
+cmd=(docker exec -it "${cnt[@]}" su - tcwg-buildslave)
+echo "${cmd[@]}"
+exec "${cmd[@]}"
diff --git a/tcwg-base/tcwg-llvmbot/Dockerfile.in b/tcwg-base/tcwg-llvmbot/Dockerfile.in
index 1d0d65d4..2b5081a1 100644
--- a/tcwg-base/tcwg-llvmbot/Dockerfile.in
+++ b/tcwg-base/tcwg-llvmbot/Dockerfile.in
@@ -1,45 +1,89 @@
FROM linaro/ci-#{ARCH}-tcwg-base-ubuntu:#{DISTRO}
+RUN echo "deb https://apt.buildkite.com/buildkite-agent stable main" | tee /etc/apt/sources.list.d/buildkite-agent.list \
+ && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 32A37959C2FA5C3C99EFBC32A79206696452D198
+
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y \
- buildbot \
+ binutils-gold \
+ buildkite-agent \
+ cpio \
+ gfortran \
+ htop \
+ iotop \
+# Add locales used for testing libcxx
+ language-pack-en \
+ language-pack-fr \
+ language-pack-ja \
+ language-pack-ru \
+ language-pack-zh-hans \
+ libjson-perl \
+ libtinfo-dev \
+# We build clang+llvm releases on Ubuntu Bionic, which has libtinfo.so.5,
+# and we link against it.
+# Ubuntu Focal by default installs libtinfo6 (aka libtinfo.so.6), and
+# our clang+llvm releases don't work on Ubuntu Focal unless we install
+# legacy libtinfo5 (aka libtinfo.so.5).
+# We should no longer need libtinfo5 when we switch building releases to
+# Ubuntu Focal or later.
+ libtinfo5 \
+ linux-tools-common \
+ python3-buildbot-worker \
+ tmux \
+# uuidgen is used by the flang driver script. Not installed by default on focal.
+ uuid-runtime \
+# Although the base image has python3-venv installed, this does not give
+# you 'virtualenv'. Instead you must do 'python3 -m venv'. However the test
+# suite calls virtualenv with --python=python3, so we're ok to use the Python2
+# version here.
+ virtualenv \
&& apt-get clean \
&& rm -rf \
/var/lib/apt/lists/* \
/tmp/* \
/var/tmp/*
-COPY buildslave/ llvm-config-buildslave/
-RUN cd ./llvm-config-buildslave/ \
- && HOME=$(pwd) ./llvm-setup \
- && ./cleanup-users \
- && cd ../.. \
- && rm -rf \
- llvm-config-buildslave/ \
- /var/lib/apt/lists/* \
- /tmp/* \
- /var/tmp/* \
- && sudo -i -u buildslave mkdir /home/buildslave/buildslave
+# Libcxx needs some locales that are not generated by default
+RUN printf "fr_CA ISO-8859-1\ncs_CZ ISO-8859-2" >> /etc/locale.gen \
+ && mkdir /usr/local/share/i1en/ \
+ && printf "fr_CA ISO-8859-1\ncs_CZ ISO-8859-2" >> /usr/local/share/i1en/SUPPORTED \
+ && locale-gen
-# Add ninja with support for memory-threshold job limitation.
-RUN git clone -b master https://github.com/maxim-kuvyrkov/ninja.git \
+# Add ninja with support for matching concurrency to available CPU allowance.
+RUN git clone -b limit-on-cpu https://github.com/maxim-kuvyrkov/ninja.git \
&& cd ninja \
- && ./configure.py --bootstrap && ./ninja all && ./ninja_test \
- && mv ninja /usr/local/bin/ninja.bin \
+ && python3 ./configure.py --bootstrap && ./ninja all && ./ninja_test \
+ && mv ninja /usr/local/bin/ninja.limit-on-cpu \
+ && cd .. \
+ && rm -rf ninja \
+ && git clone -b master https://github.com/maxim-kuvyrkov/ninja.git \
+ && cd ninja \
+ && python3 ./configure.py --bootstrap && ./ninja all && ./ninja_test \
+ && mv ninja /usr/local/bin/ninja.limit-on-psi \
&& cd .. \
&& rm -rf ninja
-# Add current clang for libcxx bots.
-RUN \
#if ARCH_arm64
- clang_ver=clang+llvm-5.0.1-aarch64-linux-gnu \
-#else /* ARCH_armhf */
- clang_ver=clang+llvm-5.0.1-armv7a-linux-gnueabihf \
+# AArch64 bots run MLIR tests for SVE and SME using qemu-user-static.
+# Armv7-M libcxx bots use qemu-system-arm for emulation.
+# SME support was added in 7.1.0 and other Arm (32 bit) bugs were
+# fixed between then and 8.1.3.
+RUN qemu_ver=8.1.3 \
+ && wget --progress=dot:giga https://download.qemu.org/qemu-${qemu_ver}.tar.xz \
+ && tar -xvf qemu-${qemu_ver}.tar.xz \
+ && cd qemu-${qemu_ver} \
+ && ./configure --prefix=/usr/local --target-list=aarch64-linux-user,arm-softmmu \
+ && make -j$(nproc) \
+ && make install \
+ && rm -rf qemu-${qemu_ver}.tar.xz qemu-${qemu_ver}/
#endif
- && cd /usr/local \
- && wget --progress=dot:giga http://releases.llvm.org/5.0.1/$clang_ver.tar.xz \
- && tar xf $clang_ver.tar.xz \
- && rm $clang_ver.tar.xz
+
+RUN new-user.sh --user tcwg-buildbot \
+ # Initialize .ccache dir, so that we mount ccache docker volumes with
+ # correct permissions.
+ && sudo -i -u tcwg-buildbot mkdir -p /home/tcwg-buildbot/.ccache \
+ # Allow non root users to access the buildkite config files
+ && chmod -R a+rw /etc/buildkite-agent/
VOLUME /home
diff --git a/tcwg-base/tcwg-llvmbot/build.sh b/tcwg-base/tcwg-llvmbot/build.sh
index 9181795d..7a6c3c14 100755
--- a/tcwg-base/tcwg-llvmbot/build.sh
+++ b/tcwg-base/tcwg-llvmbot/build.sh
@@ -2,11 +2,15 @@
set -e
+# Can't run multiple copies of this script
+exec 9<Dockerfile
+flock -x 9
+
trap cleanup_exit INT TERM EXIT
cleanup_exit()
{
- rm -rf start.sh run.sh buildslave/
+ rm -rf start.sh run.sh
}
export LANG=C
@@ -18,22 +22,7 @@ top=$(git rev-parse --show-toplevel)
cp $top/tcwg-base/$name/start.sh $top/tcwg-base/$name/run.sh ./
-# llvm-config repo is hosted on [secure] dev-private-git.l.o, so we
-# can't clone it in here or in "RUN" command. The docker image
-# deployment job arranges clone of llvm-config repo at the following
-# location.
-if [ x"$USER" = x"buildslave" ]; then
- user="tcwg-buildslave"
- # Add host key for dev-private-review.linaro.org
- # Trying to get a login shell from gerrit will fail, so "|| true"
- ssh -o StrictHostKeyChecking=no -p29418 $user@dev-private-review.linaro.org > /dev/null 2>&1 || true
-else
- user="$USER"
-fi
-git archive --remote ssh://$user@dev-private-review.linaro.org:29418/tcwg/llvm-config refs/heads/master buildslave/ | tar xf -
-
(cd ..; ./build.sh)
-"$top"/tcwg-base/validate-dockerfile.sh Dockerfile
-docker pull $image 2>/dev/null || true
+"$top"/tcwg-base/validate-checksum.sh Dockerfile
docker build --tag=$image .
echo $image > .docker-tag
diff --git a/tcwg-base/tcwg-llvmbot/gerrit-branches b/tcwg-base/tcwg-llvmbot/gerrit-branches
deleted file mode 100644
index fb49cdf8..00000000
--- a/tcwg-base/tcwg-llvmbot/gerrit-branches
+++ /dev/null
@@ -1,3 +0,0 @@
-master
-tcwg-staging
-tcwg-llvmprod
diff --git a/tcwg-base/tcwg-llvmbot/run.sh b/tcwg-base/tcwg-llvmbot/run.sh
index e22b1fda..67277d9d 100755
--- a/tcwg-base/tcwg-llvmbot/run.sh
+++ b/tcwg-base/tcwg-llvmbot/run.sh
@@ -2,157 +2,195 @@
set -e
-bare_metal_bot_p ()
-{
- case "$1" in
- "linaro-tk1-"*) return 0 ;;
- "linaro-apm-02"|"linaro-apm-05") return 1 ;;
- "linaro-apm-"*) return 0 ;;
- *) return 1 ;;
- esac
-}
-
if [ x"$1" = x"start.sh" ]; then
cat /start.sh
exit 0
fi
-if ! [ -f ~buildslave/buildslave/buildbot.tac ]; then
- # Connect to silent master.
- # Reconnecting to main master should be done by hand.
- sudo -i -u buildslave buildslave create-slave --umask=022 ~buildslave/buildslave "$@"
+worker_dir=/home/tcwg-buildbot/worker
+if [ x"$1" != x"buildkite" ]; then
+ if [ -f $worker_dir/buildbot.tac ]; then
+ :
+ else
+ sudo -i -u tcwg-buildbot buildbot-worker create-worker $worker_dir "$@"
+ fi
fi
-case "$(uname -m)" in
- aarch64)
- clang_ver=clang+llvm-5.0.1-aarch64-linux-gnu
- ;;
- *)
- clang_ver=clang+llvm-5.0.1-armv7a-linux-gnueabihf
- ;;
-esac
-
-if bare_metal_bot_p "$2"; then
- # Download and install clang+llvm into /usr/local for bare-metal
- # bots.
- (
- cd /usr/local
- wget -c --progress=dot:giga http://releases.llvm.org/5.0.1/$clang_ver.tar.xz
- tar xf $clang_ver.tar.xz
- )
+if [[ $2 == *"latest-gcc"* ]] ; then
+ install-gcc-latest.sh
+ cc=gcc-latest
+ cxx=g++-latest
+else
+ release_num=17.0.6
+ case "$(uname -m)" in
+ aarch64)
+ release_arch=aarch64-linux-gnu
+ lib_arch=aarch64-unknown-linux-gnu
+ ;;
+ *)
+ release_arch=armv7a-linux-gnueabihf
+ # It is intentional that this is v7l not v7a.
+ lib_arch=armv7l-unknown-linux-gnueabihf
+ ;;
+ esac
+ release_path=/usr/local/clang+llvm-${release_num}-${release_arch}
+ cc=$release_path/bin/clang
+ cxx=$release_path/bin/clang++
+
+ # Libcxx picolibc build requires these tools.
+ ln -f -s $release_path/bin/ld.lld /usr/local/bin/ld.lld
+ ln -f -s $release_path/bin/llvm-as /usr/local/bin/llvm-as
+ ln -f -s $release_path/bin/llvm-ar /usr/local/bin/llvm-ar
+ ln -f -s $release_path/bin/llvm-strip /usr/local/bin/llvm-strip
+
+ # Starting with clang-11 we need clang's libs in ld.so's search path;
+ # otherwise we get failure to find libc++.so.
+ echo "$release_path/lib/$lib_arch" > /etc/ld.so.conf.d/clang.conf
+ ldconfig
fi
-case "$2" in
- *-libcxx*|linaro-tk1-01|linaro-apm-03)
- # Libcxx bots need to be compiled with *recent* clang.
- cc=/usr/local/$clang_ver/bin/clang
- cxx=/usr/local/$clang_ver/bin/clang++
- ;;
- *-lld|linaro-apm-04)
- # LLD bots need to be compiled with clang.
- # ??? Adding testStage1=False to LLD bot might enable it to not depend on clang.
- cc=/usr/bin/clang
- cxx=/usr/bin/clang++
- ;;
- *-arm-quick|linaro-tk1-06)
- cc=/usr/bin/clang
- cxx=/usr/bin/clang++
- ;;
- *-arm-full-selfhost|linaro-tk1-05)
- # ??? *-arm-full-selfhost bot doesn't look like it depends on clang.
- cc=/usr/bin/clang
- cxx=/usr/bin/clang++
- ;;
- *-arm-full|linaro-tk1-08)
- # ??? For now we preserve host compiler configuration from non-docker bots.
- cc=/usr/bin/clang
- cxx=/usr/bin/clang++
- ;;
- *-arm-global-isel|linaro-tk1-09)
- # ??? For now we preserve host compiler configuration from non-docker bots.
- cc=/usr/bin/clang
- cxx=/usr/bin/clang++
- ;;
- *)
- cc=gcc
- cxx=g++
- ;;
-esac
-
# With default PATH /usr/local/bin/cc and /usr/local/bin/c++ are detected as
# system compilers. No danger in ccaching results of system compiler since
# we always start with a clean cache in a new container.
cat > /usr/local/bin/cc <<EOF
#!/bin/sh
+
+# This sed strips directories after $worker_dir/\$builder_dir; e.g.,
+# $worker_dir/clang-aarch64-sve-vls/stage1/llvm becomes
+# $worker_dir/clang-aarch64-sve-vls .
+basedir=\$(pwd | sed -e "s#\($worker_dir/[^/]\+\)/.*#\1#")
+if [ "\$basedir" != "\$(pwd)" ]; then
+ # We are inside a subdirectory of a buildbot builder directory, e.g.,
+ # /home/tcwg-buildbot/worker/clang-aarch64-sve-vls-2stage/stage1 .
+ # We set CCACHE_BASEDIR to "merge" ccache entries among different buildbot
+ # builders, so that multiple bots can share the results of their builds.
+ export CCACHE_BASEDIR="\$basedir"
+fi
+EOF
+cp /usr/local/bin/cc /usr/local/bin/c++
+
+cat >> /usr/local/bin/cc <<EOF
exec ccache $cc "\$@"
EOF
chmod +x /usr/local/bin/cc
-cat > /usr/local/bin/c++ <<EOF
-#!/bin/sh
+cat >> /usr/local/bin/c++ <<EOF
exec ccache $cxx "\$@"
EOF
chmod +x /usr/local/bin/c++
-case "$2" in
- *-lld|linaro-apm-04)
- # LLD buildbot needs to find ld.lld for stage1 build.
- ln -f -s /usr/bin/ld.bfd /usr/local/bin/ld.lld
+if [ x"$1" != x"buildkite" ]; then
+ cat <<EOF | sudo -i -u tcwg-buildbot tee $worker_dir/info/admin
+Linaro Toolchain Working Group <linaro-toolchain@lists.linaro.org>
+EOF
+fi
+
+n_cores=$(nproc --all)
+case "$n_cores" in
+ 4)
+ hw="NVIDIA TK1 ${n_cores}x Cortex-A15"
+ ;;
+ 48)
+ hw="Fujitsu FX700 ${n_cores}x A64FX"
+ ;;
+ 160)
+ hw="Ampere Mt. Jade ${n_cores}x Neoverse-N1 provided by Equinix"
;;
*)
- rm -f /usr/local/bin/ld.lld
+ hw="${n_cores}x ARMv8"
;;
esac
-cat <<EOF | sudo -i -u buildslave tee ~buildslave/buildslave/info/admin
-Maxim Kuvyrkov <maxim.kuvyrkov@linaro.org>
-EOF
+if [ -f /sys/fs/cgroup/cpu.pressure ] \
+ || ! [ -f /sys/fs/cgroup/cpuacct/cpuacct.stat ]; then
+ # This is for kernel 4.20 and newer, which replaces
+ # /sys/fs/cgroup/cpuacct/cpuacct.stat with /sys/fs/cgroup/cpu.pressure.
+ # Branch limit-on-psi gracefully handles absence of cpu.pressure, so
+ # it's OK to use it for [weird] cases when both cpu.pressure and
+ # cpuacct.stat are missing.
+ ninja_bin=/usr/local/bin/ninja.limit-on-psi
+else
+ # This is for older kernels.
+ ninja_bin=/usr/local/bin/ninja.limit-on-cpu
+ # See https://github.com/maxim-kuvyrkov/ninja/commit/8fa112c0104d4cfd0bad0eb62e4cec03f7b51e14
+ # and https://github.com/maxim-kuvyrkov/ninja/commit/c3eb25f42c3ba5a0c57c482ecdd8051167fcbb61
+ # about this ugliness.
+ if [ -f /proc/config.gz ]; then
+ # CONFIG_HZ is set to 1000 on TK1s, which, luckily, provide /proc/config.gz.
+ zcat /proc/config.gz | grep "^CONFIG_HZ=" | sed -e "s/^CONFIG_HZ=//"
+ else
+ # CONFIG_HZ is set to 250 on all other current systems that we use for
+ # LLVM buildbots (this seems to be the current Ubuntu default).
+ echo "250"
+ fi > /etc/ninja_schedstat_hz
+fi
-n_cores=$(nproc --all)
case "$2" in
- linaro-apm-*) hw="APM Mustang ${n_cores}-core X-Gene" ;;
- linaro-armv8-*) hw="${n_cores}-core ARMv8 provided by Packet.net (Type 2A2)" ;;
- linaro-tk1-*) hw="NVIDIA TK1 ${n_cores}-core Cortex-A15" ;;
+ linaro-tk1-*)
+ # TK1s have CPU hot-plug, so ninja might detect smaller number of cores
+ # available for parallelism. Explicitly set "default" parallelism.
+ ninja_bin="$ninja_bin -j$n_cores"
+ ;;
esac
+cat > /usr/local/bin/ninja <<EOF
+#!/bin/sh
+exec $ninja_bin -l-10 "\$@"
+EOF
+chmod +x /usr/local/bin/ninja
+
if [ -f /sys/fs/cgroup/memory/memory.limit_in_bytes ]; then
mem_limit=$((($(cat /sys/fs/cgroup/memory/memory.limit_in_bytes) + 512*1024*1024) / (1024*1024*1024)))
else
mem_limit=$((($(cat /proc/meminfo | grep MemTotal | sed -e "s/[^0-9]\+\([0-9]\+\)[^0-9]\+/\1/") + 512*1024) / (1024*1024)))
fi
-cat <<EOF | sudo -i -u buildslave tee ~buildslave/buildslave/info/host
+if [ x"$1" != x"buildkite" ]; then
+ cat <<EOF | sudo -i -u tcwg-buildbot tee $worker_dir/info/host
$hw; RAM ${mem_limit}GB
OS: $(lsb_release -ds)
Kernel: $(uname -rv)
Compiler: $(cc --version | head -n 1)
-Linker: $(ld --version | head -n 1)
+System Linker: $(ld --version | head -n 1)
C Library: $(ldd --version | head -n 1)
+CMake: $(cmake --version | head -n 1)
EOF
+fi
-if bare_metal_bot_p "$2"; then
- # TK1s have CPU hot-plug, so ninja might detect smaller number of cores
- # available for parallelism. Explicitly set "default" parallelism.
- cat > /usr/local/bin/ninja <<EOF
-#!/bin/sh
-exec /usr/bin/ninja -j$n_cores "\$@"
-EOF
-else
- # Throttle ninja on system load, system memory and container memory limit.
- # When running with "-l 2*N_CORES -m 50 -M 50" ninja will not start new jobs
- # if system or container memory utilization is beyond 50% or when load is
- # above double the core count. Ninja will also stall up to 5 seconds (-D 5000)
- # before starting a new job to avoid rapid increase of resource usage.
- cat > /usr/local/bin/ninja <<EOF
+# Handle LNT performance bot.
+case "$2" in
+ linaro-tk1-02)
+ # Borrowed from bmk-scripts.git/perfdatadir2csv.sh
+ perf_bin="/usr/lib/linux-tools/$(uname -r)/perf"
+ if ! [ -e "$perf_bin" ]; then
+ perf_bin="$(find /usr/lib/linux-tools/ -name perf | tail -n 1)"
+ if ! [ -e "$perf_bin" ]; then
+ echo "ERROR: Cannot find perf binary"
+ exit 1
+ fi
+ fi
+ cat > /usr/local/bin/perf <<EOF
#!/bin/sh
-exec /usr/local/bin/ninja.bin -j$n_cores -l $((2*$n_cores)) -m 50 -M 50 -D 5000 "\$@"
+exec $perf_bin "\$@"
EOF
-fi
-chmod +x /usr/local/bin/ninja
-
-sudo -i -u buildslave buildslave restart ~buildslave/buildslave
+ chmod +x /usr/local/bin/perf
+ ;;
+esac
-if bare_metal_bot_p "$2"; then
- exit 0
+if [ x"$1" = x"buildkite" ]; then
+ # Add load testing bots. Trigger these by modifying the Buildkite
+ # config in a Phabricator review.
+ if [[ $2 == *"-test" ]]; then
+ queue="libcxx-builders-linaro-arm-test"
+ # Production buildkite bots.
+ else
+ queue="libcxx-builders-linaro-arm"
+ fi
+
+ exec sudo -i -u tcwg-buildbot buildkite-agent start \
+ --name $2 \
+ --token $3 \
+ --tags "queue=$queue,arch=$(arch)" \
+ --build-path $worker_dir
+else
+ exec sudo -i -u tcwg-buildbot buildbot-worker restart --nodaemon $worker_dir
fi
-
-exec /usr/sbin/sshd -D
diff --git a/tcwg-base/tcwg-llvmbot/start.sh b/tcwg-base/tcwg-llvmbot/start.sh
index 5c620ee4..3072bcc8 100755
--- a/tcwg-base/tcwg-llvmbot/start.sh
+++ b/tcwg-base/tcwg-llvmbot/start.sh
@@ -2,21 +2,36 @@
set -ex
-image="$1"
-buildmaster="$2"
-slavename="$3"
-password="$4"
-
usage ()
{
- echo "$@"
cat <<EOF
-Usage: $0 <buildmaster> <buildslave> <password>
- E.g., $0 lab.llvm.org:9994 linaro-apm-05 PASSWORD
+Usage: $0 -- <image> <buildmaster> <buildbot> <password>
+ E.g., $0 -- linaro/ci-arm64-tcwg-llvmbot-ubuntu:focal lab.llvm.org:9994 linaro-apm-05 PASSWORD
+
+ For buildkite, set <buildmaster> to "buildkite" and
+ <password> to your buildkite token.
EOF
- exit 1
+ exit 0
}
+while [ $# -gt 0 ]; do
+ case $1 in
+ --help) usage ;;
+ # This script does not support any -- options but the other tcwg-build/dev/host
+ # do and they end up passed to us as well. We assume they come before a " -- "
+ # after which we get the options we care about.
+ --) shift; break ;;
+ *) shift ;;
+ esac
+ shift
+done
+
+# Now we've dropped everything up to and including the " -- ".
+image="$1"
+buildmaster="$2"
+botname="$3"
+password="$4"
+
if groups 2>/dev/null | grep -q docker; then
# Run docker straight up if $USER is in "docker" group.
DOCKER="docker"
@@ -25,6 +40,49 @@ else
DOCKER="sudo docker"
fi
+# List of supported build bots.
+# Please keep synced with tcwg-update-llvmbot-containers.sh.
+case "$botname" in
+ linaro-lldb-arm-ubuntu) ;;
+ linaro-lldb-aarch64-ubuntu) ;;
+ linaro-aarch64-libcxx-*) ;;
+ linaro-armv8-libcxx-*) ;;
+ linaro-clang-armv7-lnt) ;;
+ linaro-clang-armv7-2stage) ;;
+ linaro-clang-armv7-global-isel) ;;
+ linaro-clang-armv7-vfpv3-2stage) ;;
+ linaro-clang-armv8-quick) ;;
+ linaro-clang-armv8-lld-2stage) ;;
+ linaro-clang-aarch64-quick) ;;
+ linaro-clang-aarch64-lld-2stage) ;;
+ linaro-clang-aarch64-global-isel) ;;
+ linaro-clang-aarch64-full-2stage) ;;
+ linaro-flang-aarch64-dylib) ;;
+ linaro-flang-aarch64-sharedlibs) ;;
+ linaro-flang-aarch64-out-of-tree) ;;
+ linaro-flang-aarch64-debug-reverse-iteration) ;;
+ linaro-flang-aarch64-latest-clang) ;;
+ linaro-flang-aarch64-release) ;;
+ linaro-flang-aarch64-rel-assert) ;;
+ linaro-flang-aarch64-latest-gcc) ;;
+ linaro-tk1-*) ;;
+ linaro-g3-*) ;;
+ *)
+ echo "WARNING: Unknown botname $botname"
+ ;;
+esac
+
+case "$botname:$image" in
+ *-aarch64-*:*-arm64-*) ;;
+ linaro-g3-*:*-arm64-*) ;;
+ *-arm*-*:*-armhf-*) ;;
+ linaro-tk1-*:*-armhf-*) ;;
+ *)
+ echo "ERROR: $botname should not run on $image."
+ echo "Make sure you're running an AArch64 bot on an arm64 image or an ARM bot on an armhf image."
+ exit 1
+esac
+
case "$buildmaster" in
"normal")
mastername="normal"
@@ -34,44 +92,172 @@ case "$buildmaster" in
mastername="silent"
masterurl="lab.llvm.org:9994"
;;
+ "buildkite")
+ mastername="buildkite"
+ masterurl="buildkite"
+ ;;
*)
mastername="custom"
masterurl="$buildmaster"
esac
-# CXX, LLD and LNT bots need additional configuration, and
-# are not supported yet.
-case "$mastername:$slavename:$(hostname):$image" in
- # No restrictions for custom masters:
- custom:*:*:*) ;;
- # Almost no restrictions for the silent master:
- silent:*:linaro-armv8-*:*) ;;
- silent:*:r*-a*:*) ;;
- # Restrictions for the normal master:
- normal:*:linaro-armv8-*:*) ;;
- normal:*:r*-a*:*-arm64-*) ;;
- *)
- usage "ERROR: Wrong mastername:slavename:hostname:image combination: $mastername:$slavename:$(hostname):$image"
- ;;
+case "$buildmaster" in
+ "normal") hostname="$botname" ;;
+ *) hostname="$mastername-$botname" ;;
+esac
+
+# Set relative CPU weight of containers running.
+case "$botname" in
+ # lldb 100x usual.
+ *-lldb-*) cpu_shares=100000 ;;
+ # quick bots 10x usual.
+ *-quick) cpu_shares=10000 ;;
+ # Fixed core bots at 200x usual, so they always get their cores.
+ *-libcxx-*|\
+ *-armv8-lld-2stage|\
+ *-aarch64-full-2stage|\
+ *-aarch64-lld-2stage|\
+ *-armv7-vfpv3-2stage|\
+ *-armv7-2stage|\
+ *-aarch64-global-isel|\
+ *-armv7-global-isel)
+ cpu_shares=200000 ;;
+ *) cpu_shares=1000 ;;
+esac
+
+# For many bots we give them a fixed set of CPU numers.
+# This means that "nproc" and other automatic parallelism
+# is constant. This prevents testing issues due to varying
+# resource levels.
+# Note: Other containers can use these cores if they are idle
+# so this is not reserving them, it's just limiting where
+# these container's processes can go.
+case "$botname" in
+ ## jade -04
+ # libcxx bots, 8 cores each.
+ *armv8-libcxx-01) cpuset_cpus="--cpuset-cpus=0-7" ;;
+ *armv8-libcxx-02) cpuset_cpus="--cpuset-cpus=8-15" ;;
+ *armv8-libcxx-03) cpuset_cpus="--cpuset-cpus=16-23" ;;
+ *armv8-libcxx-04) cpuset_cpus="--cpuset-cpus=24-31" ;;
+ *aarch64-libcxx-01) cpuset_cpus="--cpuset-cpus=32-39" ;;
+ *aarch64-libcxx-02) cpuset_cpus="--cpuset-cpus=40-47" ;;
+ *aarch64-libcxx-03) cpuset_cpus="--cpuset-cpus=48-55" ;;
+ # This builds flang, 30 cores.
+ *-aarch64-full-2stage) cpuset_cpus="--cpuset-cpus=56-85" ;;
+
+ ## jade-01
+ # 2 stage bots, 15 cores each.
+ *-armv8-lld-2stage) cpuset_cpus="--cpuset-cpus=0-14" ;;
+ *-aarch64-lld-2stage) cpuset_cpus="--cpuset-cpus=15-29" ;;
+ *-armv7-vfpv3-2stage) cpuset_cpus="--cpuset-cpus=30-44" ;;
+ *-armv7-2stage) cpuset_cpus="--cpuset-cpus=45-59" ;;
+ # Global Isel bots, 15 cores each due to instability in Clangd
+ # tests without fixed cores.
+ *-aarch64-global-isel) cpuset_cpus="--cpuset-cpus=60-74" ;;
+ *-armv7-global-isel) cpuset_cpus="--cpuset-cpus=75-89" ;;
+ *) cpuset_cpus="" ;;
esac
-case "$slavename" in
- linaro-armv8-*)
- # Use 64G out of 128G.
- memlimit="64"
+mounts=""
+# Bind-mount ssh host keys.
+for key in /etc/ssh/ssh_host_*_key{,.pub}; do
+ mounts="$mounts -v $key:$key:ro"
+done
+
+# Add ccache mount. We differentiate ccache mounts on image arch and OS.
+# Using same cache for different architectures would needlessly pollute cache
+# (i.e., armhf and aarch64 images use different system compilers).
+# Using same cache for different OS versions can cause problems due to
+# different ccache versions.
+ccache_id=$(echo "$image" | sed -e "s#linaro/ci-\(.*\)-tcwg-llvmbot-ubuntu:\(.*\)\$#\1-\2#")
+mounts="$mounts -v ccache-$ccache_id:/home/tcwg-buildbot/.ccache"
+
+memlimit=$(free -m | awk '/^Mem/ { print $2 }')
+network=""
+case "$botname" in
+ linaro-tk1-*)
+ # Use at most 90% of RAM on TK1s
+ memlimit=$(($memlimit * 9 / 10))m
+ # The tk1 default 3.10 kernel places the [sigpage] segment between the
+ # [heap] and [stack] segment which causes failures on to some programs
+ # (more information on https://projects.linaro.org/browse/UM-70). The
+ # unlimited statck mitigates a failure in stage2 clang due high stack
+ # usage.
+ caps_system="--ulimit stack=-1"
+ # Somewhere between docker-ce 19.03.5 and 19.03.6 docker bridge network
+ # got broken on, at least, armhf with 3.10 kernel (aka TK1s).
+ # At the same time to run ubuntu:focal we need docker-ce 19.03.9-ish
+ # due to seccomp not supporting some of the syscalls.
+ # We have two options:
+ # 1. Use old docker and workaround ubuntu:focal's seccomp problem by
+ # disabling it via --privileged option.
+ # 2. Use new docker and workaround broken bridge network by using
+ # --network host.
+ # In the case of LLVM bots we don't need bridge network, so we choose
+ # option (2).
+ network="--network host"
+ # Using host network also requires us to use the actual host name.
+ # Otherwise "sudo" in /run.sh complains about unknown host.
+ hostname=$(hostname)
+ ;;
+ linaro-g3-*|*-lldb-aarch64-ubuntu)
+ # SVE bots have a whole instance to themselves, just make sure we have
+ # some headroom for admin. LLDB has an instance to itself.
+ memlimit=$(($memlimit * 9 / 10))m
;;
*)
- # Use at most 30G or 90% of all RAM.
- memlimit=$(($(free -g | awk '/^Mem/ { print $2 }') * 9 / 10))
- if [ "$memlimit" -gt "30" ]; then
- memlimit="30"
- fi
+ # Use at most half of all available RAM.
+ memlimit=$(($memlimit / 2))m
;;
esac
+case "$botname" in
+ *-lld-2stage|*-aarch64-full-2stage)
+ # LLD bots have been requiring high PIDs limit for as long as they
+ # have been setup.
+ #
+ # Buildbot client in AArch64 full bot has started to sporadically
+ # crash after migration of bots from D05 to Mt. Jade machine with error
+ # "cgroup: fork rejected by pids controller in /docker/FOOBAR"
+ # This is, apparently, due to
+ # LeakSanitizer-AddressSanitizer-aarch64::many_threads_detach.cpp
+ # test, which creates 10000 threads.
+ # This affects AArch64 bots that enable compiler-rt:
+ # - linaro-aarch64-lld
+ # - linaro-aarch64-full
+ #
+ # I can't readily explain why we haven't seen this problem on D05
+ # machine. One possibility is that kernel scheduled threads
+ # differently on 64-core D05 and 160-core Mt. Jade machines.
+ # And that D05 was lucky to never see more than, say, 3000-4000
+ # concurrent threads, but Mt. Jade manages to see, say, 4000-5000
+ # threads.
+ pids_limit="15000" ;;
+ *) pids_limit="5000" ;;
+esac
# IPC_LOCK is required for some implementations of ssh-agent (e.g., MATE's).
# SYS_PTRACE is required for debugger work.
# seccomp:unconfined is required to disable ASLR for sanitizer tests.
-caps="--cap-add=IPC_LOCK --cap-add=SYS_PTRACE --security-opt seccomp:unconfined"
+caps="--cap-add=IPC_LOCK --cap-add=SYS_PTRACE --security-opt seccomp:unconfined $caps_system"
-$DOCKER run --name=$mastername-$slavename --hostname=$mastername-$slavename --restart=unless-stopped -dt -p 22 --memory=${memlimit}G --pids-limit=5000 $caps "$image" "$masterurl" "$slavename" "$password"
+if [ x"$(uname -m)" = x"x86_64" ]; then
+ # Copy QEMU binary to $HOME, which is bind-mounted from host. This way
+ # we'll have QEMU bind-mount equally accessible from the main host and
+ # from host/jenkins containers, from which we are starting tcwg-llvmbot
+ # containers.
+ # The host needs to have binfmt-misc magic configured for this to work.
+ # With the magic configured, all we need is to provide qemu-aarch64-static
+ # binary in PATH inside the container, and it'll be automatically picked up
+ # for execution of aarch64 binaries.
+ qemu_bin=$(mktemp -p $HOME)
+ cp "$(which qemu-aarch64-static)" "$qemu_bin"
+ chmod +x "$qemu_bin"
+ mounts="$mounts -v $qemu_bin:/bin/qemu-aarch64-static"
+fi
+
+# Use --init so that PID 1 is docker-init which will reap zombie processes for us
+$DOCKER run --name=$mastername-$botname --hostname=$hostname $network --restart=unless-stopped -dt --cpu-shares=$cpu_shares $cpuset_cpus $mounts --memory=$memlimit --pids-limit=$pids_limit --init $caps "$image" "$masterurl" "$botname" "$password"
+
+if [ x"$(uname -m)" = x"x86_64" ]; then
+ rm -f "$qemu_bin"
+fi
diff --git a/tcwg-base/tcwg-lnt/Dockerfile.in b/tcwg-base/tcwg-lnt/Dockerfile.in
new file mode 100644
index 00000000..d94d408d
--- /dev/null
+++ b/tcwg-base/tcwg-lnt/Dockerfile.in
@@ -0,0 +1,14 @@
+FROM linaro/ci-#{ARCH}-tcwg-base-ubuntu:#{DISTRO}
+
+RUN new-user.sh --user tcwg-buildslave \
+ && sudo -i -u tcwg-buildslave mkdir bin
+COPY lnt.sh /home/tcwg-buildslave/bin
+
+COPY run.sh start.sh /
+
+ENV TINI_VERSION v0.18.0
+ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-#{ARCH} /sbin/tini
+RUN chmod +x /sbin/tini
+
+ENTRYPOINT ["/sbin/tini", "--", "/run.sh"]
+CMD ["start.sh"]
diff --git a/tcwg-base/tcwg-lnt/build.sh b/tcwg-base/tcwg-lnt/build.sh
new file mode 100755
index 00000000..518ff4a7
--- /dev/null
+++ b/tcwg-base/tcwg-lnt/build.sh
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+set -e
+
+# Can't run multiple copies of this script
+exec 9<Dockerfile
+flock -x 9
+
+trap cleanup_exit INT TERM EXIT
+
+cleanup_exit()
+{
+ rm -rf lnt.sh run.sh start.sh
+}
+
+export LANG=C
+distro=$(basename ${PWD} | cut -f1 -d '-')
+arch=$(basename ${PWD} | cut -f2 -d '-')
+name=$(basename ${PWD} | cut -f3- -d '-')
+image=linaro/ci-${arch}-${name}-ubuntu:${distro}
+top=$(git rev-parse --show-toplevel)
+
+cp $top/tcwg-base/tcwg-lnt/lnt.sh \
+ $top/tcwg-base/tcwg-lnt/run.sh \
+ $top/tcwg-base/tcwg-lnt/start.sh ./
+
+#(cd ..; ./build.sh)
+docker pull linaro/ci-${arch}-tcwg-base-ubuntu:${distro}
+"$top"/tcwg-base/validate-checksum.sh Dockerfile
+docker build --tag=$image .
+echo $image > .docker-tag
diff --git a/tcwg-base/tcwg-lnt/lnt.sh b/tcwg-base/tcwg-lnt/lnt.sh
new file mode 100755
index 00000000..e48c9181
--- /dev/null
+++ b/tcwg-base/tcwg-lnt/lnt.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+set -euf -o pipefail
+
+. @LNTSERVER@/sandbox/bin/activate
+exec lnt "$@"
diff --git a/tcwg-base/tcwg-lnt/run.sh b/tcwg-base/tcwg-lnt/run.sh
new file mode 100755
index 00000000..d703c62f
--- /dev/null
+++ b/tcwg-base/tcwg-lnt/run.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+set -e
+
+if [ x"$1" = x"start.sh" ]; then
+ cat /start.sh
+ exit 0
+fi
+
+config="$1"
+
+user=tcwg-buildslave
+scripts=/home/$user/jenkins-scripts
+
+sudo -i -u $user sed -i -e "s#@LNTSERVER@#/home/$user/$config/lntserver#" \
+ bin/lnt.sh
+sudo -i -u $user rm -rf $scripts
+sudo -i -u $user git clone \
+ https://git.linaro.org/toolchain/jenkins-scripts.git $scripts
+exec sudo -i -u $user $scripts/tcwg-lnt/create-server.sh $config
diff --git a/tcwg-base/tcwg-lnt/start.sh b/tcwg-base/tcwg-lnt/start.sh
new file mode 100755
index 00000000..7a365e80
--- /dev/null
+++ b/tcwg-base/tcwg-lnt/start.sh
@@ -0,0 +1,54 @@
+#!/bin/bash
+
+set -euf -o pipefail
+
+usage ()
+{
+ cat <<EOF
+$0 [OPTIONS] -- IMAGE CONFIG
+
+Options:
+ --verbose true/false
+ Whether to run in verbose mode
+
+ IMAGE
+ Docker tcwg-host image
+
+ CONFIG
+ LNT config
+EOF
+ exit 1
+}
+
+verbose=false
+additional_options=""
+
+while [ $# -gt 0 ]; do
+ case $1 in
+ --verbose) verbose="$2"; shift ;;
+ --additional_options) additional_options="$2"; shift ;;
+ --) shift; break ;;
+ *) echo "ERROR: Wrong option: $1"; usage ;;
+ esac
+ shift
+done
+
+image="$1"
+config="$2"
+
+if $verbose; then
+ set -x
+fi
+
+if [ x"$image" = x"" ]; then
+ echo "ERROR: image name not provided"
+ usage
+fi
+
+# Use at most half of all available RAM.
+memlimit=$(free -m | awk '/^Mem/ { print $2 }')
+memlimit=$(($memlimit / 2))m
+
+docker run -dt --name=$config-lnt --restart=unless-stopped \
+ --memory=$memlimit --pids-limit=5000 $additional_options \
+ $image "$config"
diff --git a/tcwg-base/tio-power-cycle.exp b/tcwg-base/tio-power-cycle.exp
new file mode 100755
index 00000000..ecb801c2
--- /dev/null
+++ b/tcwg-base/tio-power-cycle.exp
@@ -0,0 +1,51 @@
+#!/usr/bin/expect
+
+####
+#
+# Procedure fully described in https://linaro.atlassian.net/browse/STG-5251
+#
+# Example of command line :
+# tio_power_control.exp usb-Linaro_DebugBoard_cfe5b51575a4451502020223e22160ff-if00
+#
+####
+
+set serial_name [lindex $argv 0]
+
+
+## Connecting to the serial of the QcomLT DebugBoard
+spawn tio /dev/serial/by-id/$serial_name -b 115200
+expect "Connected\r"
+
+# -- print power info : "s"
+send -- "s\r"
+
+## 1. Disconnect the power : "p"
+send -- "p\r"
+
+## 2. Wait for few seconds
+sleep 2
+send -- "s\r"
+
+## 3. Connect the power : "P"
+send -- "P\r"
+
+## 4. Wait for few seconds
+sleep 1
+send -- "s\r"
+
+## 5. Trigger power button
+## 5.a. set the PWR_BTN header signal to high level : "B"
+send -- "B\r"
+
+## 5.b. Wait for a second
+sleep 1
+
+## 5.c. set the PWR_BTN header signal to low level : "b"
+send -- "b\r"
+
+# Wait few seconds before exiting
+sleep 2
+send -- "s\r"
+
+expect eof
+
diff --git a/tcwg-base/validate-checksum.sh b/tcwg-base/validate-checksum.sh
new file mode 100755
index 00000000..09d0b897
--- /dev/null
+++ b/tcwg-base/validate-checksum.sh
@@ -0,0 +1,45 @@
+#!/bin/bash
+
+# NOTE: THIS SCRIPT HAS COPIES IN THE FOLLOWING REPOS:
+# - CI/DOCKERFILES.GIT AND
+# - CI/JOB/CONFIGS.GIT
+# REMEMBER TO SYNCHRONIZE ALL COPIES ON CHANGES.
+
+set -eu
+
+generate=false
+
+usage ()
+{
+ echo "Syntax: $0 [--generate true/false] <generated_file>" 1>&2
+ exit 1
+}
+
+while [ $# -gt 0 ]; do
+ case "$1" in
+ --generate) generate="$2"; shift ;;
+ --*) echo "ERROR: Wrong option: $1"; usage ;;
+ *) break ;;
+ esac
+ shift
+done
+
+if [ x"${1+set}" != x"set" ]; then
+ usage
+fi
+
+GENED_FILE="$1"
+
+if $generate; then
+ MD5=$(md5sum "$GENED_FILE" | awk '{ print $1; }')
+ echo "# checksum: $MD5" >> "$GENED_FILE"
+else
+ EXPECTED_MD5=$(tail -n1 "$GENED_FILE" | awk '{ print $3; }')
+ ACTUAL_MD5=$(head -n -1 "$GENED_FILE" | md5sum | awk '{ print $1; }')
+
+ if [ "$EXPECTED_MD5" != "$ACTUAL_MD5" ]; then
+ echo "ERROR: $GENED_FILE has been modified since it was auto-generated."
+ echo "Note: Current dir is $(pwd)"
+ exit 1
+ fi
+fi
diff --git a/tcwg-base/validate-dockerfile.sh b/tcwg-base/validate-dockerfile.sh
deleted file mode 100755
index bddea9b3..00000000
--- a/tcwg-base/validate-dockerfile.sh
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/bash
-
-set -eu
-
-if [ "${1+set}" = "set" ]; then
- true
-else
- echo "Syntax: $0 <dockerfile>" 1>&2
- exit 1
-fi
-
-DOCKERFILE=$1
-
-EXPECTED_MD5=$(tail -n1 "$DOCKERFILE" | awk '{ print $3; }')
-ACTUAL_MD5=$(head -n -1 "$DOCKERFILE" | md5sum |awk '{ print $1; }')
-
-if [ "$EXPECTED_MD5" = "$ACTUAL_MD5" ]; then
- true
-else
- echo "ERROR: $DOCKERFILE has been modified since it was auto-generated."
- echo "Note: Current dir is $(pwd)"
- exit 1
-fi
-
diff --git a/tensorflow-arm64-build/.gitignore b/tensorflow-arm64-build/.gitignore
new file mode 100644
index 00000000..a01ee289
--- /dev/null
+++ b/tensorflow-arm64-build/.gitignore
@@ -0,0 +1 @@
+.*.swp
diff --git a/tensorflow-arm64-build/Dockerfile b/tensorflow-arm64-build/Dockerfile
new file mode 100644
index 00000000..ddbc36ac
--- /dev/null
+++ b/tensorflow-arm64-build/Dockerfile
@@ -0,0 +1,70 @@
+################################################################################
+FROM ubuntu:20.04 as builder
+################################################################################
+
+# Install devtoolset build dependencies
+COPY setup.packages.sh setup.packages.sh
+COPY builder.packages.txt builder.packages.txt
+RUN /setup.packages.sh /builder.packages.txt
+
+# Install devtoolset-9 in /dt10 with glibc 2.17 and libstdc++ 4.8, for building
+# manylinux2014-compatible packages.
+COPY builder.devtoolset/fixlinks_aarch64.sh /fixlinks.sh
+COPY builder.devtoolset/rpm-patch.sh /rpm-patch.sh
+COPY builder.devtoolset/build_devtoolset.sh /build_devtoolset.sh
+COPY builder.devtoolset/gcc9-fixups.patch /gcc9-fixups.patch
+COPY builder.devtoolset/stringop_trunc.patch /stringop_trunc.patch
+RUN /build_devtoolset.sh devtoolset-10 /dt10
+
+# Build later version of patchelf that is not so buggy
+COPY builder.patchelf/build_patchelf.sh /build_patchelf.sh
+COPY apt.conf /etc/apt/
+RUN /build_patchelf.sh
+
+################################################################################
+FROM ubuntu:20.04 as devel
+################################################################################
+COPY --from=builder /dt10 /dt10
+COPY --from=builder /patchelf/patchelf_0.14.3-1_arm64.deb /patchelf/patchelf_0.14.3-1_arm64.deb
+
+# Install devtoolset devel dependencies
+COPY setup.sources.sh /setup.sources.sh
+COPY setup.packages.sh /setup.packages.sh
+COPY devel.packages.txt /devel.packages.txt
+RUN /setup.sources.sh && /setup.packages.sh /devel.packages.txt
+
+# Install various tools.
+# - bats: bash unit testing framework
+# NOTE: v1.6.0 seems to have a bug that made "git" in setup_file break
+# - bazelisk: always use the correct bazel version
+# - buildifier: clean bazel build deps
+# - buildozer: clean bazel build deps
+RUN git clone --branch v1.7.0 https://github.com/bats-core/bats-core.git && bats-core/install.sh /usr/local && rm -rf bats-core
+RUN wget https://github.com/bazelbuild/bazelisk/releases/download/v1.12.0/bazelisk-linux-arm64 -O /usr/local/bin/bazel && chmod +x /usr/local/bin/bazel
+RUN wget https://github.com/bazelbuild/buildtools/releases/download/4.2.5/buildifier-linux-arm64 -O /usr/local/bin/buildifier && chmod +x /usr/local/bin/buildifier
+RUN wget https://github.com/bazelbuild/buildtools/releases/download/4.2.5/buildozer-linux-arm64 -O /usr/local/bin/buildozer && chmod +x /usr/local/bin/buildozer
+
+RUN groupadd -g 1001 buildslave && useradd -m -u 1001 -g buildslave buildslave
+RUN mkdir -p /tf/venv
+RUN chown -R buildslave:buildslave /tf
+RUN dpkg -i /patchelf/patchelf_0.14.3-1_arm64.deb
+
+# All lines past this point are reset when $CACHEBUSTER is set. We need this
+# for Python specifically because we install some nightly packages which are
+# likely to change daily.
+ARG CACHEBUSTER=0
+RUN echo $CACHEBUSTER
+
+# Setup build and environment
+COPY devel.usertools /usertools
+COPY devel.bashrc /root/.bashrc
+COPY ld.so.conf /dt10/etc/
+
+# Setup Python environment.
+COPY setup.python.sh /setup.python.sh
+COPY devel.requirements.txt /devel.requirements.txt
+RUN /setup.python.sh python3.9 devel.requirements.txt
+RUN /setup.python.sh python3.10 devel.requirements.txt
+RUN /setup.python.sh python3.11 devel.requirements.txt
+RUN /setup.python.sh python3.12 devel.requirements.txt
+
diff --git a/tensorflow-arm64-build/apt.conf b/tensorflow-arm64-build/apt.conf
new file mode 100644
index 00000000..eae58f8b
--- /dev/null
+++ b/tensorflow-arm64-build/apt.conf
@@ -0,0 +1 @@
+APT::Default-Release "focal";
diff --git a/tensorflow-arm64-build/build.sh b/tensorflow-arm64-build/build.sh
new file mode 100755
index 00000000..ff22ccec
--- /dev/null
+++ b/tensorflow-arm64-build/build.sh
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+set -e
+
+export LANG=C
+
+release_tag=2.17
+
+docker build --pull \
+ --tag=linaro/tensorflow-arm64-build:latest-multipython \
+ --tag=linaro/tensorflow-arm64-build:${release_tag}-multipython .
+mkdir -p tagdir-multipython
+echo linaro/tensorflow-arm64-build:latest-multipython > tagdir-multipython/.docker-tag
+mkdir -p tagdir-${release_tag}-multipython
+echo linaro/tensorflow-arm64-build:${release_tag}-multipython > tagdir-${release_tag}-multipython/.docker-tag
diff --git a/tensorflow-arm64-build/builder.devtoolset/build_devtoolset.sh b/tensorflow-arm64-build/builder.devtoolset/build_devtoolset.sh
new file mode 100755
index 00000000..2cf77d61
--- /dev/null
+++ b/tensorflow-arm64-build/builder.devtoolset/build_devtoolset.sh
@@ -0,0 +1,157 @@
+#!/bin/bash -eu
+# Copyright 2016 The TensorFlow Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ==============================================================================
+#
+# Builds a devtoolset cross-compiler targeting manylinux2014 (glibc 2.17 / libstdc++ 4.8).
+
+VERSION="$1"
+TARGET="$2"
+
+case "${VERSION}" in
+devtoolset-9)
+ LIBSTDCXX_VERSION="6.0.28"
+ LIBSTDCXX_ABI="new"
+ ;;
+devtoolset-10)
+ LIBSTDCXX_VERSION="6.0.28"
+ LIBSTDCXX_ABI="new"
+ ;;
+*)
+ echo "Usage: $0 {devtoolset-9|devtoolset-10} <target-directory> <arch>"
+ echo "Use 'devtoolset-9' to build a manylinux2014 compatible toolchain"
+ exit 1
+ ;;
+esac
+
+mkdir -p "${TARGET}"
+
+mkdir -p ${TARGET}/usr/include
+
+# Put the current kernel headers from ubuntu in place.
+ln -s "/usr/include/linux" "${TARGET}/usr/include/linux"
+ln -s "/usr/include/asm-generic" "${TARGET}/usr/include/asm-generic"
+ln -s "/usr/include/aarch64-linux-gnu/asm" "${TARGET}/usr/include/asm"
+
+# Download glibc's shared and development libraries based on the value of the
+# `VERSION` parameter.
+# Note: 'Templatizing' this and the other conditional branches would require
+# defining several variables (version, os, path) making it difficult to maintain
+# and extend for future modifications.
+mkdir -p glibc-src
+mkdir -p glibc-build
+cd glibc-src
+wget "https://vault.centos.org/centos/7/os/Source/SPackages/glibc-2.17-317.el7.src.rpm"
+rpm2cpio "glibc-2.17-317.el7.src.rpm" |cpio -idmv
+tar -xvzf "glibc-2.17-c758a686.tar.gz" --strip 1
+tar -xvzf "glibc-2.17-c758a686-releng.tar.gz" --strip 1
+sed -i '/patch0060/d' glibc.spec
+/rpm-patch.sh "glibc.spec"
+rm -f "glibc-2.17-317.el7.src.rpm" "glibc-2.17-c758a686.tar.gz" "glibc-2.17-c758a686-releng.tar.gz"
+patch -p1 < /gcc9-fixups.patch
+patch -p1 < /stringop_trunc.patch
+cd ../glibc-build
+../glibc-src/configure --prefix=/usr --disable-werror --enable-obsolete-rpc --disable-profile
+make -j$(nproc)
+make install DESTDIR=${TARGET}
+cd ..
+
+# Symlinks in the binary distribution are set up for installation in /usr, we
+# need to fix up all the links to stay within /${TARGET}.
+/fixlinks.sh "/${TARGET}"
+
+# Patch to allow non-glibc 2.12 compatible builds to work.
+sed -i '54i#define TCP_USER_TIMEOUT 18' "/${TARGET}/usr/include/netinet/tcp.h"
+
+# Download specific version of libstdc++ shared library based on the value of
+# the `VERSION` parameter
+ # Download binary libstdc++ 4.8 shared library release
+wget "http://old-releases.ubuntu.com/ubuntu/pool/main/g/gcc-4.8/libstdc++6_4.8.1-10ubuntu8_arm64.deb" && \
+ unar "libstdc++6_4.8.1-10ubuntu8_arm64.deb" && \
+ tar -C "${TARGET}" -xvzf "libstdc++6_4.8.1-10ubuntu8_arm64/data.tar.gz" "./usr/lib/aarch64-linux-gnu/libstdc++.so.6.0.18" && \
+ rm -rf "libstdc++6_4.8.1-10ubuntu8_arm64.deb" "libstdc++6_4.8.1-10ubuntu8_arm64"
+
+mkdir -p "${TARGET}-src"
+cd "${TARGET}-src"
+
+# Build a devtoolset cross-compiler based on our glibc 2.12/glibc 2.17 sysroot setup.
+case "${VERSION}" in
+devtoolset-9)
+ wget "https://vault.centos.org/centos/7/sclo/Source/rh/devtoolset-9-gcc-9.3.1-2.2.el7.src.rpm"
+ rpm2cpio "devtoolset-9-gcc-9.3.1-2.2.el7.src.rpm" |cpio -idmv
+ tar -xvf "gcc-9.3.1-20200408.tar.xz" --strip 1
+ ;;
+devtoolset-10)
+ wget "https://vault.centos.org/centos/7/sclo/Source/rh/devtoolset-10-gcc-10.2.1-11.2.el7.src.rpm"
+ rpm2cpio "devtoolset-10-gcc-10.2.1-11.2.el7.src.rpm" |cpio -idmv
+ tar -xvf "gcc-10.2.1-20210130.tar.xz" --strip 1
+ ;;
+esac
+
+# Apply the devtoolset patches to gcc.
+/rpm-patch.sh "gcc.spec"
+
+./contrib/download_prerequisites
+
+mkdir -p "${TARGET}-build"
+cd "${TARGET}-build"
+
+"${TARGET}-src/configure" \
+ --prefix="${TARGET}/usr" \
+ --with-sysroot="/${TARGET}" \
+ --disable-bootstrap \
+ --disable-libmpx \
+ --enable-libsanitizer \
+ --disable-libunwind-exceptions \
+ --disable-libunwind-exceptions \
+ --disable-lto \
+ --disable-multilib \
+ --enable-__cxa_atexit \
+ --enable-gnu-indirect-function \
+ --enable-gnu-unique-object \
+ --enable-initfini-array \
+ --enable-languages="c,c++" \
+ --enable-linker-build-id \
+ --enable-plugin \
+ --enable-shared \
+ --enable-threads=posix \
+ --with-default-libstdcxx-abi=${LIBSTDCXX_ABI} \
+ --with-gcc-major-version-only \
+ --with-linker-hash-style="gnu" \
+ && \
+ make -j$(nproc) && \
+ make install
+
+
+# Create the devtoolset libstdc++ linkerscript that links dynamically against
+# the system libstdc++ 4.4 and provides all other symbols statically.
+# Note that the installation path for libstdc++ here is ${TARGET}/usr/lib64/
+mv "${TARGET}/usr/lib64/libstdc++.so.${LIBSTDCXX_VERSION}" \
+ "${TARGET}/usr/lib64/libstdc++.so.${LIBSTDCXX_VERSION}.backup"
+echo -e "OUTPUT_FORMAT(elf64-littleaarch64)\nINPUT ( libstdc++.so.6.0.18 -lstdc++_nonshared44 )" \
+ > "${TARGET}/usr/lib64/libstdc++.so.${LIBSTDCXX_VERSION}"
+cp "./aarch64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++_nonshared44.a" \
+ "${TARGET}/usr/lib64"
+
+
+# Link in architecture specific includes from the system; note that we cannot
+# link in the whole aarch64-linux-gnu folder, as otherwise we're overlaying
+# system gcc paths that we do not want to find.
+# TODO(klimek): Automate linking in all non-gcc / non-kernel include
+# directories.
+mkdir -p "${TARGET}/usr/include/aarch64-linux-gnu"
+PYTHON_VERSIONS=("python3.9" "python3.10" "python3.11" "python3.12")
+for v in "${PYTHON_VERSIONS[@]}"; do
+ ln -s "/usr/local/include/${v}" "${TARGET}/usr/include/aarch64-linux-gnu/${v}"
+done
diff --git a/tensorflow-arm64-build/builder.devtoolset/fixlinks_aarch64.sh b/tensorflow-arm64-build/builder.devtoolset/fixlinks_aarch64.sh
new file mode 100755
index 00000000..09a5f985
--- /dev/null
+++ b/tensorflow-arm64-build/builder.devtoolset/fixlinks_aarch64.sh
@@ -0,0 +1,28 @@
+#!/bin/bash
+# Copyright 2016 The TensorFlow Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ==============================================================================
+#
+# Re-direct all links in $1 that are relative to be canonical
+
+BASE="$1"
+find "${BASE}" -type l | \
+ while read l ; do
+ if [[ "$(readlink "$l")" == \.\./* ]]; then
+ CANONICAL="$(readlink "$l")";
+ rm "$l";
+ ln -s "${CANONICAL}" "$l"
+ fi
+ done
+
diff --git a/tensorflow-arm64-build/builder.devtoolset/gcc9-fixups.patch b/tensorflow-arm64-build/builder.devtoolset/gcc9-fixups.patch
new file mode 100644
index 00000000..7b9bbf35
--- /dev/null
+++ b/tensorflow-arm64-build/builder.devtoolset/gcc9-fixups.patch
@@ -0,0 +1,270 @@
+diff --git a/iconv/gconv.h b/iconv/gconv.h
+index 3f9112e..8e60197 100644
+--- a/iconv/gconv.h
++++ b/iconv/gconv.h
+@@ -174,7 +174,7 @@ typedef struct __gconv_info
+ {
+ size_t __nsteps;
+ struct __gconv_step *__steps;
+- __extension__ struct __gconv_step_data __data __flexarr;
++ __extension__ struct __gconv_step_data __data[0];
+ } *__gconv_t;
+
+ #endif /* gconv.h */
+diff --git a/include/libc-symbols.h b/include/libc-symbols.h
+index c555bf2..143b26d 100644
+--- a/include/libc-symbols.h
++++ b/include/libc-symbols.h
+@@ -107,6 +107,11 @@
+ # endif
+ #endif
+
++#ifndef __attribute_copy__
++/* Provide an empty definition when cdefs.h is not included. */
++# define __attribute_copy__(arg)
++#endif
++
+ #ifndef __ASSEMBLER__
+ /* GCC understands weak symbols and aliases; use its interface where
+ possible, instead of embedded assembly language. */
+@@ -114,7 +119,8 @@
+ /* Define ALIASNAME as a strong alias for NAME. */
+ # define strong_alias(name, aliasname) _strong_alias(name, aliasname)
+ # define _strong_alias(name, aliasname) \
+- extern __typeof (name) aliasname __attribute__ ((alias (#name)));
++ extern __typeof (name) aliasname __attribute__ ((alias (#name))) \
++ __attribute_copy__ (name);
+
+ /* This comes between the return type and function name in
+ a function definition to make that definition weak. */
+@@ -125,14 +131,16 @@
+ If weak aliases are not available, this defines a strong alias. */
+ # define weak_alias(name, aliasname) _weak_alias (name, aliasname)
+ # define _weak_alias(name, aliasname) \
+- extern __typeof (name) aliasname __attribute__ ((weak, alias (#name)));
++ extern __typeof (name) aliasname __attribute__ ((weak, alias (#name))) \
++ __attribute_copy__ (name);
+
+ /* Same as WEAK_ALIAS, but mark symbol as hidden. */
+ # define weak_hidden_alias(name, aliasname) \
+ _weak_hidden_alias (name, aliasname)
+ # define _weak_hidden_alias(name, aliasname) \
+ extern __typeof (name) aliasname \
+- __attribute__ ((weak, alias (#name), __visibility__ ("hidden")));
++ __attribute__ ((weak, alias (#name), __visibility__ ("hidden"))) \
++ __attribute_copy__ (name);
+
+ /* Declare SYMBOL as weak undefined symbol (resolved to 0 if not defined). */
+ # define weak_extern(symbol) _weak_extern (weak symbol)
+@@ -528,7 +536,8 @@ for linking")
+ # define __hidden_ver1(local, internal, name) \
+ extern __typeof (name) __EI_##name __asm__(__hidden_asmname (#internal)); \
+ extern __typeof (name) __EI_##name \
+- __attribute__((alias (__hidden_asmname (#local))))
++ __attribute__((alias (__hidden_asmname (#local)))) \
++ __attribute_copy__ (name)
+ # define hidden_ver(local, name) __hidden_ver1(local, __GI_##name, name);
+ # define hidden_data_ver(local, name) hidden_ver(local, name)
+ # define hidden_def(name) __hidden_ver1(__GI_##name, name, name);
+@@ -541,7 +550,8 @@ for linking")
+ # define __hidden_nolink1(local, internal, name, version) \
+ __hidden_nolink2 (local, internal, name, version)
+ # define __hidden_nolink2(local, internal, name, version) \
+- extern __typeof (name) internal __attribute__ ((alias (#local))); \
++ extern __typeof (name) internal __attribute__ ((alias (#local))) \
++ __attribute_copy__ (name); \
+ __hidden_nolink3 (local, internal, #name "@" #version)
+ # define __hidden_nolink3(local, internal, vername) \
+ __asm__ (".symver " #internal ", " vername);
+diff --git a/locale/weightwc.h b/locale/weightwc.h
+index e966c03..22ab790 100644
+--- a/locale/weightwc.h
++++ b/locale/weightwc.h
+@@ -79,19 +79,19 @@ findidx (const wint_t **cpp, size_t len)
+ if (cp[cnt] != usrc[cnt])
+ break;
+
+- if (cnt < nhere - 1)
++ if (cnt < nhere - 1 || cnt == len)
+ {
+ cp += 2 * nhere;
+ continue;
+ }
+
+- if (cp[nhere - 1] > usrc[nhere -1])
++ if (cp[nhere - 1] > usrc[nhere - 1])
+ {
+ cp += 2 * nhere;
+ continue;
+ }
+
+- if (cp[2 * nhere - 1] < usrc[nhere -1])
++ if (cp[2 * nhere - 1] < usrc[nhere - 1])
+ {
+ cp += 2 * nhere;
+ continue;
+diff --git a/locale/xlocale.h b/locale/xlocale.h
+index 98c080b..843bd45 100644
+--- a/locale/xlocale.h
++++ b/locale/xlocale.h
+@@ -20,6 +20,9 @@
+ #ifndef _XLOCALE_H
+ #define _XLOCALE_H 1
+
++#ifndef _BITS_TYPES___LOCALE_T_H
++#define _BITS_TYPES___LOCALE_T_H 1
++
+ /* Structure for reentrant locale using functions. This is an
+ (almost) opaque type for the user level programs. The file and
+ this data structure is not standardized. Don't rely on it. It can
+@@ -41,4 +44,6 @@ typedef struct __locale_struct
+ /* POSIX 2008 makes locale_t official. */
+ typedef __locale_t locale_t;
+
++#endif /* bits/types/__locale_t.h */
++
+ #endif /* xlocale.h */
+diff --git a/misc/sys/cdefs.h b/misc/sys/cdefs.h
+index d1cb3dd..30482a1 100644
+--- a/misc/sys/cdefs.h
++++ b/misc/sys/cdefs.h
+@@ -423,4 +423,14 @@
+ # endif
+ #endif
+
++/* Undefine (also defined in libc-symbols.h). */
++#undef __attribute_copy__
++#if __GNUC_PREREQ (9, 0)
++/* Copies attributes from the declaration or type referenced by
++ the argument. */
++# define __attribute_copy__(arg) __attribute__ ((__copy__ (arg)))
++#else
++# define __attribute_copy__(arg)
++#endif
++
+ #endif /* sys/cdefs.h */
+diff --git a/stdlib/setenv.c b/stdlib/setenv.c
+index 45efe2e..06bfab0 100644
+--- a/stdlib/setenv.c
++++ b/stdlib/setenv.c
+@@ -319,6 +319,7 @@ unsetenv (const char *name)
+
+ ep = __environ;
+ if (ep != NULL)
++ {
+ while (*ep != NULL)
+ if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
+ {
+@@ -332,6 +333,7 @@ unsetenv (const char *name)
+ }
+ else
+ ++ep;
++ }
+
+ UNLOCK;
+
+diff --git a/support/Makefile b/support/Makefile
+index a253698..2f4e2a9 100644
+--- a/support/Makefile
++++ b/support/Makefile
+@@ -167,13 +167,6 @@ CFLAGS-support_paths.c = \
+ -DINSTDIR_PATH=\"$(prefix)\" \
+ -DLIBDIR_PATH=\"$(libdir)\"
+
+-ifeq (,$(CXX))
+-LINKS_DSO_PROGRAM = links-dso-program-c
+-else
+-LINKS_DSO_PROGRAM = links-dso-program
+-LDLIBS-links-dso-program = -lstdc++ -lgcc -lgcc_s $(libunwind)
+-endif
+-
+ LDLIBS-test-container = $(libsupport)
+
+ others += test-container
+@@ -182,9 +175,6 @@ others-noinstall += test-container
+ others += shell-container echo-container true-container
+ others-noinstall += shell-container echo-container true-container
+
+-others += $(LINKS_DSO_PROGRAM)
+-others-noinstall += $(LINKS_DSO_PROGRAM)
+-
+ $(objpfx)test-container : $(libsupport)
+ $(objpfx)shell-container : $(libsupport)
+ $(objpfx)echo-container : $(libsupport)
+diff --git a/support/links-dso-program.cc b/support/links-dso-program.cc
+index 8ff3155..f9d2b77 100644
+--- a/support/links-dso-program.cc
++++ b/support/links-dso-program.cc
+@@ -3,6 +3,11 @@
+ backported. */
+ #define _ISOMAC 1
+
++#define __GLIBC_USE(F) __GLIBC_USE_ ## F
++
++# define __attribute_alloc_size__(params) \
++ __attribute__ ((__alloc_size__ params))
++
+ #include <iostream>
+
+ using namespace std;
+diff --git a/sysdeps/aarch64/dl-machine.h b/sysdeps/aarch64/dl-machine.h
+index 185402f..bbdeae0 100644
+--- a/sysdeps/aarch64/dl-machine.h
++++ b/sysdeps/aarch64/dl-machine.h
+@@ -49,23 +49,11 @@ elf_machine_load_address (void)
+ /* To figure out the load address we use the definition that for any symbol:
+ dynamic_addr(symbol) = static_addr(symbol) + load_addr
+
+- The choice of symbol is arbitrary. The static address we obtain
+- by constructing a non GOT reference to the symbol, the dynamic
+- address of the symbol we compute using adrp/add to compute the
+- symbol's address relative to the PC. */
+-
+- ElfW(Addr) static_addr;
+- ElfW(Addr) dynamic_addr;
+-
+- asm (" \n\
+- adrp %1, _dl_start; \n\
+- add %1, %1, #:lo12:_dl_start \n\
+- ldr %w0, 1f \n\
+- b 2f \n\
+-1: .word _dl_start \n\
+-2: \n\
+- " : "=r" (static_addr), "=r" (dynamic_addr));
+- return dynamic_addr - static_addr;
++ _DYNAMIC sysmbol is used here as its link-time address stored in
++ the special unrelocated first GOT entry. */
++
++ extern ElfW(Dyn) _DYNAMIC[] attribute_hidden;
++ return (ElfW(Addr)) &_DYNAMIC - elf_machine_dynamic ();
+ }
+
+ /* Set up the loaded object described by L so its unrelocated PLT
+diff --git a/sysdeps/ieee754/dbl-64/k_rem_pio2.c b/sysdeps/ieee754/dbl-64/k_rem_pio2.c
+index fcf956a..e2c5d29 100644
+--- a/sysdeps/ieee754/dbl-64/k_rem_pio2.c
++++ b/sysdeps/ieee754/dbl-64/k_rem_pio2.c
+@@ -172,7 +172,8 @@ int __kernel_rem_pio2(double *x, double *y, int e0, int nx, int prec, const int3
+
+ /* compute q[0],q[1],...q[jk] */
+ for (i=0;i<=jk;i++) {
+- for(j=0,fw=0.0;j<=jx;j++) fw += x[j]*f[jx+i-j]; q[i] = fw;
++ for(j=0,fw=0.0;j<=jx;j++) fw += x[j]*f[jx+i-j];
++ q[i] = fw;
+ }
+
+ jz = jk;
+diff --git a/sysdeps/ieee754/flt-32/k_rem_pio2f.c b/sysdeps/ieee754/flt-32/k_rem_pio2f.c
+index e54a067..215b0e0 100644
+--- a/sysdeps/ieee754/flt-32/k_rem_pio2f.c
++++ b/sysdeps/ieee754/flt-32/k_rem_pio2f.c
+@@ -65,7 +65,8 @@ int __kernel_rem_pio2f(float *x, float *y, int e0, int nx, int prec, const int32
+
+ /* compute q[0],q[1],...q[jk] */
+ for (i=0;i<=jk;i++) {
+- for(j=0,fw=0.0;j<=jx;j++) fw += x[j]*f[jx+i-j]; q[i] = fw;
++ for(j=0,fw=0.0;j<=jx;j++) fw += x[j]*f[jx+i-j];
++ q[i] = fw;
+ }
+
+ jz = jk;
diff --git a/tensorflow-arm64-build/builder.devtoolset/rpm-patch.sh b/tensorflow-arm64-build/builder.devtoolset/rpm-patch.sh
new file mode 100755
index 00000000..892ae2af
--- /dev/null
+++ b/tensorflow-arm64-build/builder.devtoolset/rpm-patch.sh
@@ -0,0 +1,28 @@
+#!/bin/bash -eu
+# Copyright 2016 The TensorFlow Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ==============================================================================
+#
+# Given an RPM spec file $1, apply its patches.
+
+SPEC="$1"
+grep '%patch' "${SPEC}" |while read cmd ; do
+ N=$(echo "${cmd}" |sed 's,%patch\([0-9]\+\).*,\1,')
+ file=$(grep "Patch$N:" "${SPEC}" |sed 's,.*: ,,')
+ parg=$(echo "${cmd}" |sed 's,.*\(-p[0-9]\).*,\1,')
+ if [[ ! "${file}" =~ doxygen && "${cmd}" != \#* ]]; then
+ echo "patch ${parg} -s < ${file}"
+ patch ${parg} -s < "${file}"
+ fi
+done
diff --git a/tensorflow-arm64-build/builder.devtoolset/stringop_trunc.patch b/tensorflow-arm64-build/builder.devtoolset/stringop_trunc.patch
new file mode 100644
index 00000000..bd9e5533
--- /dev/null
+++ b/tensorflow-arm64-build/builder.devtoolset/stringop_trunc.patch
@@ -0,0 +1,1204 @@
+diff --git a/bits/utmp.h b/bits/utmp.h
+index 775123d..bf28c6d 100644
+--- a/bits/utmp.h
++++ b/bits/utmp.h
+@@ -1,5 +1,5 @@
+-/* The `struct utmp' type, describing entries in the utmp file. Generic/BSDish
+- Copyright (C) 1993, 1996, 1997 Free Software Foundation, Inc.
++/* The `struct utmp' type, describing entries in the utmp file.
++ Copyright (C) 1993-2022 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -14,7 +14,7 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+- <http://www.gnu.org/licenses/>. */
++ <https://www.gnu.org/licenses/>. */
+
+ #ifndef _UTMP_H
+ # error "Never include <bits/utmp.h> directly; use <utmp.h> instead."
+@@ -24,11 +24,13 @@
+ #include <time.h>
+
+
+-#define UT_NAMESIZE 8
+-#define UT_LINESIZE 8
+-#define UT_HOSTSIZE 16
++#define UT_LINESIZE 32
++#define UT_NAMESIZE 32
++#define UT_HOSTSIZE 256
+
+
++/* The structure describing an entry in the database of
++ previous logins. */
+ struct lastlog
+ {
+ time_t ll_time;
+@@ -36,12 +38,16 @@ struct lastlog
+ char ll_host[UT_HOSTSIZE];
+ };
+
++/* The structure describing an entry in the user accounting database. */
+ struct utmp
+ {
+- char ut_line[UT_LINESIZE];
+- char ut_user[UT_NAMESIZE];
++ char ut_line[UT_LINESIZE]
++ __attribute_nonstring__; /* Devicename. */
++ char ut_user[UT_NAMESIZE]
++ __attribute_nonstring__; /* Username. */
+ #define ut_name ut_user
+- char ut_host[UT_HOSTSIZE];
++ char ut_host[UT_HOSTSIZE]
++ __attribute_nonstring__; /* Hostname for remote login. */
+ long int ut_time;
+ };
+
+diff --git a/misc/sys/cdefs.h b/misc/sys/cdefs.h
+index 30482a1..551d5fd 100644
+--- a/misc/sys/cdefs.h
++++ b/misc/sys/cdefs.h
+@@ -391,6 +391,15 @@
+
+ #include <bits/wordsize.h>
+
++#if __GNUC_PREREQ (8, 0)
++/* Describes a char array whose address can safely be passed as the first
++ argument to strncpy and strncat, as the char array is not necessarily
++ a NUL-terminated string. */
++# define __attribute_nonstring__ __attribute__ ((__nonstring__))
++#else
++# define __attribute_nonstring__
++#endif
++
+ #if defined __LONG_DOUBLE_MATH_OPTIONAL && defined __NO_LONG_DOUBLE_MATH
+ # define __LDBL_COMPAT 1
+ # ifdef __REDIRECT
+diff --git a/nis/nss_nisplus/nisplus-parser.c b/nis/nss_nisplus/nisplus-parser.c
+index a4d76fb..41600f0 100644
+--- a/nis/nss_nisplus/nisplus-parser.c
++++ b/nis/nss_nisplus/nisplus-parser.c
+@@ -82,7 +82,7 @@ _nss_nisplus_parse_pwent (nis_result *result, struct passwd *pw,
+
+ char *numstr = NISOBJVAL (2, obj);
+ len = NISOBJLEN (2, obj);
+- if (len == 0 && numstr[len - 1] != '\0')
++ if (len == 0 || numstr[len - 1] != '\0')
+ {
+ if (len >= room_left)
+ goto no_more_room;
+@@ -98,7 +98,7 @@ _nss_nisplus_parse_pwent (nis_result *result, struct passwd *pw,
+
+ numstr = NISOBJVAL (3, obj);
+ len = NISOBJLEN (3, obj);
+- if (len == 0 && numstr[len - 1] != '\0')
++ if (len == 0 || numstr[len - 1] != '\0')
+ {
+ if (len >= room_left)
+ goto no_more_room;
+diff --git a/string/bits/string2.h b/string/bits/string2.h
+index c9bf593..f461fc1 100644
+--- a/string/bits/string2.h
++++ b/string/bits/string2.h
+@@ -47,29 +47,7 @@
+ #endif
+
+ #if _STRING_ARCH_unaligned
+-/* If we can do unaligned memory accesses we must know the endianess. */
+-# include <endian.h>
+ # include <bits/types.h>
+-
+-# if __BYTE_ORDER == __LITTLE_ENDIAN
+-# define __STRING2_SMALL_GET16(src, idx) \
+- (((const unsigned char *) (const char *) (src))[idx + 1] << 8 \
+- | ((const unsigned char *) (const char *) (src))[idx])
+-# define __STRING2_SMALL_GET32(src, idx) \
+- (((((const unsigned char *) (const char *) (src))[idx + 3] << 8 \
+- | ((const unsigned char *) (const char *) (src))[idx + 2]) << 8 \
+- | ((const unsigned char *) (const char *) (src))[idx + 1]) << 8 \
+- | ((const unsigned char *) (const char *) (src))[idx])
+-# else
+-# define __STRING2_SMALL_GET16(src, idx) \
+- (((const unsigned char *) (const char *) (src))[idx] << 8 \
+- | ((const unsigned char *) (const char *) (src))[idx + 1])
+-# define __STRING2_SMALL_GET32(src, idx) \
+- (((((const unsigned char *) (const char *) (src))[idx] << 8 \
+- | ((const unsigned char *) (const char *) (src))[idx + 1]) << 8 \
+- | ((const unsigned char *) (const char *) (src))[idx + 2]) << 8 \
+- | ((const unsigned char *) (const char *) (src))[idx + 3])
+-# endif
+ #else
+ /* These are a few types we need for the optimizations if we cannot
+ use unaligned memory accesses. */
+@@ -94,148 +72,11 @@ __STRING2_COPY_TYPE (8);
+
+ /* Set N bytes of S to C. */
+ #if !defined _HAVE_STRING_ARCH_memset
+-# if !__GNUC_PREREQ (3, 0)
+-# if _STRING_ARCH_unaligned
+-# define memset(s, c, n) \
+- (__extension__ (__builtin_constant_p (n) && (n) <= 16 \
+- ? ((n) == 1 \
+- ? __memset_1 (s, c) \
+- : __memset_gc (s, c, n)) \
+- : (__builtin_constant_p (c) && (c) == '\0' \
+- ? ({ void *__s = (s); __bzero (__s, n); __s; }) \
+- : memset (s, c, n))))
+-
+-# define __memset_1(s, c) ({ void *__s = (s); \
+- *((__uint8_t *) __s) = (__uint8_t) c; __s; })
+-
+-# define __memset_gc(s, c, n) \
+- ({ void *__s = (s); \
+- union { \
+- unsigned int __ui; \
+- unsigned short int __usi; \
+- unsigned char __uc; \
+- } *__u = __s; \
+- __uint8_t __c = (__uint8_t) (c); \
+- \
+- /* This `switch' statement will be removed at compile-time. */ \
+- switch ((unsigned int) (n)) \
+- { \
+- case 15: \
+- __u->__ui = __c * 0x01010101; \
+- __u = __extension__ ((void *) __u + 4); \
+- case 11: \
+- __u->__ui = __c * 0x01010101; \
+- __u = __extension__ ((void *) __u + 4); \
+- case 7: \
+- __u->__ui = __c * 0x01010101; \
+- __u = __extension__ ((void *) __u + 4); \
+- case 3: \
+- __u->__usi = (unsigned short int) __c * 0x0101; \
+- __u = __extension__ ((void *) __u + 2); \
+- __u->__uc = (unsigned char) __c; \
+- break; \
+- \
+- case 14: \
+- __u->__ui = __c * 0x01010101; \
+- __u = __extension__ ((void *) __u + 4); \
+- case 10: \
+- __u->__ui = __c * 0x01010101; \
+- __u = __extension__ ((void *) __u + 4); \
+- case 6: \
+- __u->__ui = __c * 0x01010101; \
+- __u = __extension__ ((void *) __u + 4); \
+- case 2: \
+- __u->__usi = (unsigned short int) __c * 0x0101; \
+- break; \
+- \
+- case 13: \
+- __u->__ui = __c * 0x01010101; \
+- __u = __extension__ ((void *) __u + 4); \
+- case 9: \
+- __u->__ui = __c * 0x01010101; \
+- __u = __extension__ ((void *) __u + 4); \
+- case 5: \
+- __u->__ui = __c * 0x01010101; \
+- __u = __extension__ ((void *) __u + 4); \
+- case 1: \
+- __u->__uc = (unsigned char) __c; \
+- break; \
+- \
+- case 16: \
+- __u->__ui = __c * 0x01010101; \
+- __u = __extension__ ((void *) __u + 4); \
+- case 12: \
+- __u->__ui = __c * 0x01010101; \
+- __u = __extension__ ((void *) __u + 4); \
+- case 8: \
+- __u->__ui = __c * 0x01010101; \
+- __u = __extension__ ((void *) __u + 4); \
+- case 4: \
+- __u->__ui = __c * 0x01010101; \
+- case 0: \
+- break; \
+- } \
+- \
+- __s; })
+-# else
+-# define memset(s, c, n) \
+- (__extension__ (__builtin_constant_p (c) && (c) == '\0' \
+- ? ({ void *__s = (s); __bzero (__s, n); __s; }) \
+- : memset (s, c, n)))
+-# endif
+-# endif
+-
+-/* GCC < 3.0 optimizes memset(s, 0, n) but not bzero(s, n).
+- The optimization is broken before EGCS 1.1.
+- GCC 3.0+ has __builtin_bzero as well, but at least till GCC 3.4
+- if it decides to call the library function, it calls memset
+- and not bzero. */
+-# if __GNUC_PREREQ (2, 91)
+-# define __bzero(s, n) __builtin_memset (s, '\0', n)
+-# endif
+-
++# define __bzero(s, n) __builtin_memset (s, '\0', n)
+ #endif
+
+-
+-/* Copy N bytes from SRC to DEST, returning pointer to byte following the
+- last copied. */
+-#ifdef __USE_GNU
+-# if !defined _HAVE_STRING_ARCH_mempcpy || defined _FORCE_INLINES
+-# ifndef _HAVE_STRING_ARCH_mempcpy
+-# if __GNUC_PREREQ (3, 4)
+-# define __mempcpy(dest, src, n) __builtin_mempcpy (dest, src, n)
+-# elif __GNUC_PREREQ (3, 0)
+-# define __mempcpy(dest, src, n) \
+- (__extension__ (__builtin_constant_p (src) && __builtin_constant_p (n) \
+- && __string2_1bptr_p (src) && n <= 8 \
+- ? __builtin_memcpy (dest, src, n) + (n) \
+- : __mempcpy (dest, src, n)))
+-# else
+-# define __mempcpy(dest, src, n) \
+- (__extension__ (__builtin_constant_p (src) && __builtin_constant_p (n) \
+- && __string2_1bptr_p (src) && n <= 8 \
+- ? __mempcpy_small (dest, __mempcpy_args (src), n) \
+- : __mempcpy (dest, src, n)))
+-# endif
+-/* In glibc we use this function frequently but for namespace reasons
+- we have to use the name `__mempcpy'. */
+-# define mempcpy(dest, src, n) __mempcpy (dest, src, n)
+-# endif
+-
+-# if !__GNUC_PREREQ (3, 0) || defined _FORCE_INLINES
+-# if _STRING_ARCH_unaligned
+-# ifndef _FORCE_INLINES
+-# define __mempcpy_args(src) \
+- ((const char *) (src))[0], ((const char *) (src))[2], \
+- ((const char *) (src))[4], ((const char *) (src))[6], \
+- __extension__ __STRING2_SMALL_GET16 (src, 0), \
+- __extension__ __STRING2_SMALL_GET16 (src, 4), \
+- __extension__ __STRING2_SMALL_GET32 (src, 0), \
+- __extension__ __STRING2_SMALL_GET32 (src, 4)
+-# endif
+-__STRING_INLINE void *__mempcpy_small (void *, char, char, char, char,
+- __uint16_t, __uint16_t, __uint32_t,
+- __uint32_t, size_t);
++#if defined _FORCE_INLINES
++# if _STRING_ARCH_unaligned
+ __STRING_INLINE void *
+ __mempcpy_small (void *__dest1,
+ char __src0_1, char __src2_1, char __src4_1, char __src6_1,
+@@ -298,44 +139,7 @@ __mempcpy_small (void *__dest1,
+ }
+ return (void *) __u;
+ }
+-# else
+-# ifndef _FORCE_INLINES
+-# define __mempcpy_args(src) \
+- ((const char *) (src))[0], \
+- __extension__ ((__STRING2_COPY_ARR2) \
+- { { ((const char *) (src))[0], ((const char *) (src))[1] } }), \
+- __extension__ ((__STRING2_COPY_ARR3) \
+- { { ((const char *) (src))[0], ((const char *) (src))[1], \
+- ((const char *) (src))[2] } }), \
+- __extension__ ((__STRING2_COPY_ARR4) \
+- { { ((const char *) (src))[0], ((const char *) (src))[1], \
+- ((const char *) (src))[2], ((const char *) (src))[3] } }), \
+- __extension__ ((__STRING2_COPY_ARR5) \
+- { { ((const char *) (src))[0], ((const char *) (src))[1], \
+- ((const char *) (src))[2], ((const char *) (src))[3], \
+- ((const char *) (src))[4] } }), \
+- __extension__ ((__STRING2_COPY_ARR6) \
+- { { ((const char *) (src))[0], ((const char *) (src))[1], \
+- ((const char *) (src))[2], ((const char *) (src))[3], \
+- ((const char *) (src))[4], ((const char *) (src))[5] } }), \
+- __extension__ ((__STRING2_COPY_ARR7) \
+- { { ((const char *) (src))[0], ((const char *) (src))[1], \
+- ((const char *) (src))[2], ((const char *) (src))[3], \
+- ((const char *) (src))[4], ((const char *) (src))[5], \
+- ((const char *) (src))[6] } }), \
+- __extension__ ((__STRING2_COPY_ARR8) \
+- { { ((const char *) (src))[0], ((const char *) (src))[1], \
+- ((const char *) (src))[2], ((const char *) (src))[3], \
+- ((const char *) (src))[4], ((const char *) (src))[5], \
+- ((const char *) (src))[6], ((const char *) (src))[7] } })
+-# endif
+-__STRING_INLINE void *__mempcpy_small (void *, char, __STRING2_COPY_ARR2,
+- __STRING2_COPY_ARR3,
+- __STRING2_COPY_ARR4,
+- __STRING2_COPY_ARR5,
+- __STRING2_COPY_ARR6,
+- __STRING2_COPY_ARR7,
+- __STRING2_COPY_ARR8, size_t);
++# else
+ __STRING_INLINE void *
+ __mempcpy_small (void *__dest, char __src1,
+ __STRING2_COPY_ARR2 __src2, __STRING2_COPY_ARR3 __src3,
+@@ -382,8 +186,6 @@ __mempcpy_small (void *__dest, char __src1,
+ }
+ return __extension__ ((void *) __u + __srclen);
+ }
+-# endif
+-# endif
+ # endif
+ #endif
+
+@@ -391,44 +193,17 @@ __mempcpy_small (void *__dest, char __src1,
+ /* Return pointer to C in S. */
+ #ifndef _HAVE_STRING_ARCH_strchr
+ extern void *__rawmemchr (const void *__s, int __c);
+-# if __GNUC_PREREQ (3, 2)
+ # define strchr(s, c) \
+ (__extension__ (__builtin_constant_p (c) && !__builtin_constant_p (s) \
+ && (c) == '\0' \
+ ? (char *) __rawmemchr (s, c) \
+ : __builtin_strchr (s, c)))
+-# else
+-# define strchr(s, c) \
+- (__extension__ (__builtin_constant_p (c) && (c) == '\0' \
+- ? (char *) __rawmemchr (s, c) \
+- : strchr (s, c)))
+-# endif
+ #endif
+
+
+ /* Copy SRC to DEST. */
+-#if (!defined _HAVE_STRING_ARCH_strcpy && !__GNUC_PREREQ (3, 0)) \
+- || defined _FORCE_INLINES
+-# if !defined _HAVE_STRING_ARCH_strcpy && !__GNUC_PREREQ (3, 0)
+-# define strcpy(dest, src) \
+- (__extension__ (__builtin_constant_p (src) \
+- ? (__string2_1bptr_p (src) && strlen (src) + 1 <= 8 \
+- ? __strcpy_small (dest, __strcpy_args (src), \
+- strlen (src) + 1) \
+- : (char *) memcpy (dest, src, strlen (src) + 1)) \
+- : strcpy (dest, src)))
+-# endif
+-
++#if defined _FORCE_INLINES
+ # if _STRING_ARCH_unaligned
+-# ifndef _FORCE_INLINES
+-# define __strcpy_args(src) \
+- __extension__ __STRING2_SMALL_GET16 (src, 0), \
+- __extension__ __STRING2_SMALL_GET16 (src, 4), \
+- __extension__ __STRING2_SMALL_GET32 (src, 0), \
+- __extension__ __STRING2_SMALL_GET32 (src, 4)
+-# endif
+-__STRING_INLINE char *__strcpy_small (char *, __uint16_t, __uint16_t,
+- __uint32_t, __uint32_t, size_t);
+ __STRING_INLINE char *
+ __strcpy_small (char *__dest,
+ __uint16_t __src0_2, __uint16_t __src4_2,
+@@ -482,42 +257,6 @@ __strcpy_small (char *__dest,
+ return __dest;
+ }
+ # else
+-# ifndef _FORCE_INLINES
+-# define __strcpy_args(src) \
+- __extension__ ((__STRING2_COPY_ARR2) \
+- { { ((const char *) (src))[0], '\0' } }), \
+- __extension__ ((__STRING2_COPY_ARR3) \
+- { { ((const char *) (src))[0], ((const char *) (src))[1], \
+- '\0' } }), \
+- __extension__ ((__STRING2_COPY_ARR4) \
+- { { ((const char *) (src))[0], ((const char *) (src))[1], \
+- ((const char *) (src))[2], '\0' } }), \
+- __extension__ ((__STRING2_COPY_ARR5) \
+- { { ((const char *) (src))[0], ((const char *) (src))[1], \
+- ((const char *) (src))[2], ((const char *) (src))[3], \
+- '\0' } }), \
+- __extension__ ((__STRING2_COPY_ARR6) \
+- { { ((const char *) (src))[0], ((const char *) (src))[1], \
+- ((const char *) (src))[2], ((const char *) (src))[3], \
+- ((const char *) (src))[4], '\0' } }), \
+- __extension__ ((__STRING2_COPY_ARR7) \
+- { { ((const char *) (src))[0], ((const char *) (src))[1], \
+- ((const char *) (src))[2], ((const char *) (src))[3], \
+- ((const char *) (src))[4], ((const char *) (src))[5], \
+- '\0' } }), \
+- __extension__ ((__STRING2_COPY_ARR8) \
+- { { ((const char *) (src))[0], ((const char *) (src))[1], \
+- ((const char *) (src))[2], ((const char *) (src))[3], \
+- ((const char *) (src))[4], ((const char *) (src))[5], \
+- ((const char *) (src))[6], '\0' } })
+-# endif
+-__STRING_INLINE char *__strcpy_small (char *, __STRING2_COPY_ARR2,
+- __STRING2_COPY_ARR3,
+- __STRING2_COPY_ARR4,
+- __STRING2_COPY_ARR5,
+- __STRING2_COPY_ARR6,
+- __STRING2_COPY_ARR7,
+- __STRING2_COPY_ARR8, size_t);
+ __STRING_INLINE char *
+ __strcpy_small (char *__dest,
+ __STRING2_COPY_ARR2 __src2, __STRING2_COPY_ARR3 __src3,
+@@ -570,44 +309,15 @@ __strcpy_small (char *__dest,
+
+ /* Copy SRC to DEST, returning pointer to final NUL byte. */
+ #ifdef __USE_GNU
+-# if !defined _HAVE_STRING_ARCH_stpcpy || defined _FORCE_INLINES
+-# ifndef _HAVE_STRING_ARCH_stpcpy
+-# if __GNUC_PREREQ (3, 4)
+-# define __stpcpy(dest, src) __builtin_stpcpy (dest, src)
+-# elif __GNUC_PREREQ (3, 0)
+-# define __stpcpy(dest, src) \
+- (__extension__ (__builtin_constant_p (src) \
+- ? (__string2_1bptr_p (src) && strlen (src) + 1 <= 8 \
+- ? __builtin_strcpy (dest, src) + strlen (src) \
+- : ((char *) (__mempcpy) (dest, src, strlen (src) + 1) \
+- - 1)) \
+- : __stpcpy (dest, src)))
+-# else
+-# define __stpcpy(dest, src) \
+- (__extension__ (__builtin_constant_p (src) \
+- ? (__string2_1bptr_p (src) && strlen (src) + 1 <= 8 \
+- ? __stpcpy_small (dest, __stpcpy_args (src), \
+- strlen (src) + 1) \
+- : ((char *) (__mempcpy) (dest, src, strlen (src) + 1) \
+- - 1)) \
+- : __stpcpy (dest, src)))
+-# endif
++# ifndef _HAVE_STRING_ARCH_stpcpy
++# define __stpcpy(dest, src) __builtin_stpcpy (dest, src)
+ /* In glibc we use this function frequently but for namespace reasons
+ we have to use the name `__stpcpy'. */
+-# define stpcpy(dest, src) __stpcpy (dest, src)
+-# endif
++# define stpcpy(dest, src) __stpcpy (dest, src)
++# endif
+
+-# if !__GNUC_PREREQ (3, 0) || defined _FORCE_INLINES
+-# if _STRING_ARCH_unaligned
+-# ifndef _FORCE_INLINES
+-# define __stpcpy_args(src) \
+- __extension__ __STRING2_SMALL_GET16 (src, 0), \
+- __extension__ __STRING2_SMALL_GET16 (src, 4), \
+- __extension__ __STRING2_SMALL_GET32 (src, 0), \
+- __extension__ __STRING2_SMALL_GET32 (src, 4)
+-# endif
+-__STRING_INLINE char *__stpcpy_small (char *, __uint16_t, __uint16_t,
+- __uint32_t, __uint32_t, size_t);
++# ifndef _FORCE_INLINES
++# if _STRING_ARCH_unaligned
+ __STRING_INLINE char *
+ __stpcpy_small (char *__dest,
+ __uint16_t __src0_2, __uint16_t __src4_2,
+@@ -665,43 +375,7 @@ __stpcpy_small (char *__dest,
+ }
+ return &__u->__c;
+ }
+-# else
+-# ifndef _FORCE_INLINES
+-# define __stpcpy_args(src) \
+- __extension__ ((__STRING2_COPY_ARR2) \
+- { { ((const char *) (src))[0], '\0' } }), \
+- __extension__ ((__STRING2_COPY_ARR3) \
+- { { ((const char *) (src))[0], ((const char *) (src))[1], \
+- '\0' } }), \
+- __extension__ ((__STRING2_COPY_ARR4) \
+- { { ((const char *) (src))[0], ((const char *) (src))[1], \
+- ((const char *) (src))[2], '\0' } }), \
+- __extension__ ((__STRING2_COPY_ARR5) \
+- { { ((const char *) (src))[0], ((const char *) (src))[1], \
+- ((const char *) (src))[2], ((const char *) (src))[3], \
+- '\0' } }), \
+- __extension__ ((__STRING2_COPY_ARR6) \
+- { { ((const char *) (src))[0], ((const char *) (src))[1], \
+- ((const char *) (src))[2], ((const char *) (src))[3], \
+- ((const char *) (src))[4], '\0' } }), \
+- __extension__ ((__STRING2_COPY_ARR7) \
+- { { ((const char *) (src))[0], ((const char *) (src))[1], \
+- ((const char *) (src))[2], ((const char *) (src))[3], \
+- ((const char *) (src))[4], ((const char *) (src))[5], \
+- '\0' } }), \
+- __extension__ ((__STRING2_COPY_ARR8) \
+- { { ((const char *) (src))[0], ((const char *) (src))[1], \
+- ((const char *) (src))[2], ((const char *) (src))[3], \
+- ((const char *) (src))[4], ((const char *) (src))[5], \
+- ((const char *) (src))[6], '\0' } })
+-# endif
+-__STRING_INLINE char *__stpcpy_small (char *, __STRING2_COPY_ARR2,
+- __STRING2_COPY_ARR3,
+- __STRING2_COPY_ARR4,
+- __STRING2_COPY_ARR5,
+- __STRING2_COPY_ARR6,
+- __STRING2_COPY_ARR7,
+- __STRING2_COPY_ARR8, size_t);
++# else
+ __STRING_INLINE char *
+ __stpcpy_small (char *__dest,
+ __STRING2_COPY_ARR2 __src2, __STRING2_COPY_ARR3 __src3,
+@@ -748,27 +422,11 @@ __stpcpy_small (char *__dest,
+ }
+ return __dest + __srclen - 1;
+ }
+-# endif
+ # endif
+ # endif
+ #endif
+
+
+-/* Copy no more than N characters of SRC to DEST. */
+-#ifndef _HAVE_STRING_ARCH_strncpy
+-# if __GNUC_PREREQ (3, 2)
+-# define strncpy(dest, src, n) __builtin_strncpy (dest, src, n)
+-# else
+-# define strncpy(dest, src, n) \
+- (__extension__ (__builtin_constant_p (src) && __builtin_constant_p (n) \
+- ? (strlen (src) + 1 >= ((size_t) (n)) \
+- ? (char *) memcpy (dest, src, n) \
+- : strncpy (dest, src, n)) \
+- : strncpy (dest, src, n)))
+-# endif
+-#endif
+-
+-
+ /* Append no more than N characters from SRC onto DEST. */
+ #ifndef _HAVE_STRING_ARCH_strncat
+ # ifdef _USE_STRING_ARCH_strchr
+@@ -780,380 +438,29 @@ __stpcpy_small (char *__dest,
+ : (*((char *) __mempcpy (strchr (__dest, '\0'), \
+ src, n)) = '\0', __dest)) \
+ : strncat (dest, src, n); }))
+-# elif __GNUC_PREREQ (3, 2)
+-# define strncat(dest, src, n) __builtin_strncat (dest, src, n)
+ # else
+-# define strncat(dest, src, n) \
+- (__extension__ (__builtin_constant_p (src) && __builtin_constant_p (n) \
+- ? (strlen (src) < ((size_t) (n)) \
+- ? strcat (dest, src) \
+- : strncat (dest, src, n)) \
+- : strncat (dest, src, n)))
+-# endif
+-#endif
+-
+-
+-/* Compare characters of S1 and S2. */
+-#ifndef _HAVE_STRING_ARCH_strcmp
+-# if __GNUC_PREREQ (3, 2)
+-# define strcmp(s1, s2) \
+- __extension__ \
+- ({ size_t __s1_len, __s2_len; \
+- (__builtin_constant_p (s1) && __builtin_constant_p (s2) \
+- && (__s1_len = strlen (s1), __s2_len = strlen (s2), \
+- (!__string2_1bptr_p (s1) || __s1_len >= 4) \
+- && (!__string2_1bptr_p (s2) || __s2_len >= 4)) \
+- ? __builtin_strcmp (s1, s2) \
+- : (__builtin_constant_p (s1) && __string2_1bptr_p (s1) \
+- && (__s1_len = strlen (s1), __s1_len < 4) \
+- ? (__builtin_constant_p (s2) && __string2_1bptr_p (s2) \
+- ? __builtin_strcmp (s1, s2) \
+- : __strcmp_cg (s1, s2, __s1_len)) \
+- : (__builtin_constant_p (s2) && __string2_1bptr_p (s2) \
+- && (__s2_len = strlen (s2), __s2_len < 4) \
+- ? (__builtin_constant_p (s1) && __string2_1bptr_p (s1) \
+- ? __builtin_strcmp (s1, s2) \
+- : __strcmp_gc (s1, s2, __s2_len)) \
+- : __builtin_strcmp (s1, s2)))); })
+-# else
+-# define strcmp(s1, s2) \
+- __extension__ \
+- ({ size_t __s1_len, __s2_len; \
+- (__builtin_constant_p (s1) && __builtin_constant_p (s2) \
+- && (__s1_len = strlen (s1), __s2_len = strlen (s2), \
+- (!__string2_1bptr_p (s1) || __s1_len >= 4) \
+- && (!__string2_1bptr_p (s2) || __s2_len >= 4)) \
+- ? memcmp ((const char *) (s1), (const char *) (s2), \
+- (__s1_len < __s2_len ? __s1_len : __s2_len) + 1) \
+- : (__builtin_constant_p (s1) && __string2_1bptr_p (s1) \
+- && (__s1_len = strlen (s1), __s1_len < 4) \
+- ? (__builtin_constant_p (s2) && __string2_1bptr_p (s2) \
+- ? __strcmp_cc (s1, s2, __s1_len) \
+- : __strcmp_cg (s1, s2, __s1_len)) \
+- : (__builtin_constant_p (s2) && __string2_1bptr_p (s2) \
+- && (__s2_len = strlen (s2), __s2_len < 4) \
+- ? (__builtin_constant_p (s1) && __string2_1bptr_p (s1) \
+- ? __strcmp_cc (s1, s2, __s2_len) \
+- : __strcmp_gc (s1, s2, __s2_len)) \
+- : strcmp (s1, s2)))); })
++# define strncat(dest, src, n) __builtin_strncat (dest, src, n)
+ # endif
+-
+-# define __strcmp_cc(s1, s2, l) \
+- (__extension__ ({ int __result = \
+- (((const unsigned char *) (const char *) (s1))[0] \
+- - ((const unsigned char *) (const char *)(s2))[0]); \
+- if (l > 0 && __result == 0) \
+- { \
+- __result = (((const unsigned char *) \
+- (const char *) (s1))[1] \
+- - ((const unsigned char *) \
+- (const char *) (s2))[1]); \
+- if (l > 1 && __result == 0) \
+- { \
+- __result = \
+- (((const unsigned char *) \
+- (const char *) (s1))[2] \
+- - ((const unsigned char *) \
+- (const char *) (s2))[2]); \
+- if (l > 2 && __result == 0) \
+- __result = \
+- (((const unsigned char *) \
+- (const char *) (s1))[3] \
+- - ((const unsigned char *) \
+- (const char *) (s2))[3]); \
+- } \
+- } \
+- __result; }))
+-
+-# define __strcmp_cg(s1, s2, l1) \
+- (__extension__ ({ const unsigned char *__s2 = \
+- (const unsigned char *) (const char *) (s2); \
+- int __result = \
+- (((const unsigned char *) (const char *) (s1))[0] \
+- - __s2[0]); \
+- if (l1 > 0 && __result == 0) \
+- { \
+- __result = (((const unsigned char *) \
+- (const char *) (s1))[1] - __s2[1]); \
+- if (l1 > 1 && __result == 0) \
+- { \
+- __result = (((const unsigned char *) \
+- (const char *) (s1))[2] - __s2[2]); \
+- if (l1 > 2 && __result == 0) \
+- __result = (((const unsigned char *) \
+- (const char *) (s1))[3] \
+- - __s2[3]); \
+- } \
+- } \
+- __result; }))
+-
+-# define __strcmp_gc(s1, s2, l2) \
+- (__extension__ ({ const unsigned char *__s1 = \
+- (const unsigned char *) (const char *) (s1); \
+- register int __result = \
+- __s1[0] - ((const unsigned char *) \
+- (const char *) (s2))[0]; \
+- if (l2 > 0 && __result == 0) \
+- { \
+- __result = (__s1[1] \
+- - ((const unsigned char *) \
+- (const char *) (s2))[1]); \
+- if (l2 > 1 && __result == 0) \
+- { \
+- __result = \
+- (__s1[2] - ((const unsigned char *) \
+- (const char *) (s2))[2]); \
+- if (l2 > 2 && __result == 0) \
+- __result = \
+- (__s1[3] \
+- - ((const unsigned char *) \
+- (const char *) (s2))[3]); \
+- } \
+- } \
+- __result; }))
+-#endif
+-
+-
+-/* Compare N characters of S1 and S2. */
+-#ifndef _HAVE_STRING_ARCH_strncmp
+-# define strncmp(s1, s2, n) \
+- (__extension__ (__builtin_constant_p (n) \
+- && ((__builtin_constant_p (s1) \
+- && strlen (s1) < ((size_t) (n))) \
+- || (__builtin_constant_p (s2) \
+- && strlen (s2) < ((size_t) (n)))) \
+- ? strcmp (s1, s2) : strncmp (s1, s2, n)))
+ #endif
+
+
+ /* Return the length of the initial segment of S which
+ consists entirely of characters not in REJECT. */
+-#if !defined _HAVE_STRING_ARCH_strcspn || defined _FORCE_INLINES
+-# ifndef _HAVE_STRING_ARCH_strcspn
+-# if __GNUC_PREREQ (3, 2)
+-# define strcspn(s, reject) \
+- __extension__ \
+- ({ char __r0, __r1, __r2; \
+- (__builtin_constant_p (reject) && __string2_1bptr_p (reject) \
+- ? ((__builtin_constant_p (s) && __string2_1bptr_p (s)) \
+- ? __builtin_strcspn (s, reject) \
+- : ((__r0 = ((const char *) (reject))[0], __r0 == '\0') \
+- ? strlen (s) \
+- : ((__r1 = ((const char *) (reject))[1], __r1 == '\0') \
+- ? __strcspn_c1 (s, __r0) \
+- : ((__r2 = ((const char *) (reject))[2], __r2 == '\0') \
+- ? __strcspn_c2 (s, __r0, __r1) \
+- : (((const char *) (reject))[3] == '\0' \
+- ? __strcspn_c3 (s, __r0, __r1, __r2) \
+- : __builtin_strcspn (s, reject)))))) \
+- : __builtin_strcspn (s, reject)); })
+-# else
+-# define strcspn(s, reject) \
+- __extension__ \
+- ({ char __r0, __r1, __r2; \
+- (__builtin_constant_p (reject) && __string2_1bptr_p (reject) \
+- ? ((__r0 = ((const char *) (reject))[0], __r0 == '\0') \
+- ? strlen (s) \
+- : ((__r1 = ((const char *) (reject))[1], __r1 == '\0') \
+- ? __strcspn_c1 (s, __r0) \
+- : ((__r2 = ((const char *) (reject))[2], __r2 == '\0') \
+- ? __strcspn_c2 (s, __r0, __r1) \
+- : (((const char *) (reject))[3] == '\0' \
+- ? __strcspn_c3 (s, __r0, __r1, __r2) \
+- : strcspn (s, reject))))) \
+- : strcspn (s, reject)); })
+-# endif
+-# endif
+-
+-__STRING_INLINE size_t __strcspn_c1 (const char *__s, int __reject);
+-__STRING_INLINE size_t
+-__strcspn_c1 (const char *__s, int __reject)
+-{
+- size_t __result = 0;
+- while (__s[__result] != '\0' && __s[__result] != __reject)
+- ++__result;
+- return __result;
+-}
+-
+-__STRING_INLINE size_t __strcspn_c2 (const char *__s, int __reject1,
+- int __reject2);
+-__STRING_INLINE size_t
+-__strcspn_c2 (const char *__s, int __reject1, int __reject2)
+-{
+- size_t __result = 0;
+- while (__s[__result] != '\0' && __s[__result] != __reject1
+- && __s[__result] != __reject2)
+- ++__result;
+- return __result;
+-}
+-
+-__STRING_INLINE size_t __strcspn_c3 (const char *__s, int __reject1,
+- int __reject2, int __reject3);
+-__STRING_INLINE size_t
+-__strcspn_c3 (const char *__s, int __reject1, int __reject2,
+- int __reject3)
+-{
+- size_t __result = 0;
+- while (__s[__result] != '\0' && __s[__result] != __reject1
+- && __s[__result] != __reject2 && __s[__result] != __reject3)
+- ++__result;
+- return __result;
+-}
++#ifndef _HAVE_STRING_ARCH_strcspn
++# define strcspn(s, reject) __builtin_strcspn (s, reject)
+ #endif
+
+
+ /* Return the length of the initial segment of S which
+ consists entirely of characters in ACCEPT. */
+-#if !defined _HAVE_STRING_ARCH_strspn || defined _FORCE_INLINES
+-# ifndef _HAVE_STRING_ARCH_strspn
+-# if __GNUC_PREREQ (3, 2)
+-# define strspn(s, accept) \
+- __extension__ \
+- ({ char __a0, __a1, __a2; \
+- (__builtin_constant_p (accept) && __string2_1bptr_p (accept) \
+- ? ((__builtin_constant_p (s) && __string2_1bptr_p (s)) \
+- ? __builtin_strspn (s, accept) \
+- : ((__a0 = ((const char *) (accept))[0], __a0 == '\0') \
+- ? ((void) (s), (size_t) 0) \
+- : ((__a1 = ((const char *) (accept))[1], __a1 == '\0') \
+- ? __strspn_c1 (s, __a0) \
+- : ((__a2 = ((const char *) (accept))[2], __a2 == '\0') \
+- ? __strspn_c2 (s, __a0, __a1) \
+- : (((const char *) (accept))[3] == '\0' \
+- ? __strspn_c3 (s, __a0, __a1, __a2) \
+- : __builtin_strspn (s, accept)))))) \
+- : __builtin_strspn (s, accept)); })
+-# else
+-# define strspn(s, accept) \
+- __extension__ \
+- ({ char __a0, __a1, __a2; \
+- (__builtin_constant_p (accept) && __string2_1bptr_p (accept) \
+- ? ((__a0 = ((const char *) (accept))[0], __a0 == '\0') \
+- ? ((void) (s), (size_t) 0) \
+- : ((__a1 = ((const char *) (accept))[1], __a1 == '\0') \
+- ? __strspn_c1 (s, __a0) \
+- : ((__a2 = ((const char *) (accept))[2], __a2 == '\0') \
+- ? __strspn_c2 (s, __a0, __a1) \
+- : (((const char *) (accept))[3] == '\0' \
+- ? __strspn_c3 (s, __a0, __a1, __a2) \
+- : strspn (s, accept))))) \
+- : strspn (s, accept)); })
+-# endif
+-# endif
+-
+-__STRING_INLINE size_t __strspn_c1 (const char *__s, int __accept);
+-__STRING_INLINE size_t
+-__strspn_c1 (const char *__s, int __accept)
+-{
+- size_t __result = 0;
+- /* Please note that __accept never can be '\0'. */
+- while (__s[__result] == __accept)
+- ++__result;
+- return __result;
+-}
+-
+-__STRING_INLINE size_t __strspn_c2 (const char *__s, int __accept1,
+- int __accept2);
+-__STRING_INLINE size_t
+-__strspn_c2 (const char *__s, int __accept1, int __accept2)
+-{
+- size_t __result = 0;
+- /* Please note that __accept1 and __accept2 never can be '\0'. */
+- while (__s[__result] == __accept1 || __s[__result] == __accept2)
+- ++__result;
+- return __result;
+-}
+-
+-__STRING_INLINE size_t __strspn_c3 (const char *__s, int __accept1,
+- int __accept2, int __accept3);
+-__STRING_INLINE size_t
+-__strspn_c3 (const char *__s, int __accept1, int __accept2, int __accept3)
+-{
+- size_t __result = 0;
+- /* Please note that __accept1 to __accept3 never can be '\0'. */
+- while (__s[__result] == __accept1 || __s[__result] == __accept2
+- || __s[__result] == __accept3)
+- ++__result;
+- return __result;
+-}
++#ifndef _HAVE_STRING_ARCH_strspn
++# define strspn(s, accept) __builtin_strspn (s, accept)
+ #endif
+
+
+ /* Find the first occurrence in S of any character in ACCEPT. */
+-#if !defined _HAVE_STRING_ARCH_strpbrk || defined _FORCE_INLINES
+-# ifndef _HAVE_STRING_ARCH_strpbrk
+-# if __GNUC_PREREQ (3, 2)
+-# define strpbrk(s, accept) \
+- __extension__ \
+- ({ char __a0, __a1, __a2; \
+- (__builtin_constant_p (accept) && __string2_1bptr_p (accept) \
+- ? ((__builtin_constant_p (s) && __string2_1bptr_p (s)) \
+- ? __builtin_strpbrk (s, accept) \
+- : ((__a0 = ((const char *) (accept))[0], __a0 == '\0') \
+- ? ((void) (s), (char *) NULL) \
+- : ((__a1 = ((const char *) (accept))[1], __a1 == '\0') \
+- ? __builtin_strchr (s, __a0) \
+- : ((__a2 = ((const char *) (accept))[2], __a2 == '\0') \
+- ? __strpbrk_c2 (s, __a0, __a1) \
+- : (((const char *) (accept))[3] == '\0' \
+- ? __strpbrk_c3 (s, __a0, __a1, __a2) \
+- : __builtin_strpbrk (s, accept)))))) \
+- : __builtin_strpbrk (s, accept)); })
+-# else
+-# define strpbrk(s, accept) \
+- __extension__ \
+- ({ char __a0, __a1, __a2; \
+- (__builtin_constant_p (accept) && __string2_1bptr_p (accept) \
+- ? ((__a0 = ((const char *) (accept))[0], __a0 == '\0') \
+- ? ((void) (s), (char *) NULL) \
+- : ((__a1 = ((const char *) (accept))[1], __a1 == '\0') \
+- ? strchr (s, __a0) \
+- : ((__a2 = ((const char *) (accept))[2], __a2 == '\0') \
+- ? __strpbrk_c2 (s, __a0, __a1) \
+- : (((const char *) (accept))[3] == '\0' \
+- ? __strpbrk_c3 (s, __a0, __a1, __a2) \
+- : strpbrk (s, accept))))) \
+- : strpbrk (s, accept)); })
+-# endif
+-# endif
+-
+-__STRING_INLINE char *__strpbrk_c2 (const char *__s, int __accept1,
+- int __accept2);
+-__STRING_INLINE char *
+-__strpbrk_c2 (const char *__s, int __accept1, int __accept2)
+-{
+- /* Please note that __accept1 and __accept2 never can be '\0'. */
+- while (*__s != '\0' && *__s != __accept1 && *__s != __accept2)
+- ++__s;
+- return *__s == '\0' ? NULL : (char *) (size_t) __s;
+-}
+-
+-__STRING_INLINE char *__strpbrk_c3 (const char *__s, int __accept1,
+- int __accept2, int __accept3);
+-__STRING_INLINE char *
+-__strpbrk_c3 (const char *__s, int __accept1, int __accept2, int __accept3)
+-{
+- /* Please note that __accept1 to __accept3 never can be '\0'. */
+- while (*__s != '\0' && *__s != __accept1 && *__s != __accept2
+- && *__s != __accept3)
+- ++__s;
+- return *__s == '\0' ? NULL : (char *) (size_t) __s;
+-}
+-#endif
+-
+-
+-/* Find the first occurrence of NEEDLE in HAYSTACK. Newer gcc versions
+- do this itself. */
+-#if !defined _HAVE_STRING_ARCH_strstr && !__GNUC_PREREQ (2, 97)
+-# define strstr(haystack, needle) \
+- (__extension__ (__builtin_constant_p (needle) && __string2_1bptr_p (needle) \
+- ? (((const char *) (needle))[0] == '\0' \
+- ? (char *) (size_t) (haystack) \
+- : (((const char *) (needle))[1] == '\0' \
+- ? strchr (haystack, \
+- ((const char *) (needle))[0]) \
+- : strstr (haystack, needle))) \
+- : strstr (haystack, needle)))
++#ifndef _HAVE_STRING_ARCH_strpbrk
++# define strpbrk(s, accept) __builtin_strpbrk (s, accept)
+ #endif
+
+
+diff --git a/string/strncat.c b/string/strncat.c
+index dcfb04d..a9cb913 100644
+--- a/string/strncat.c
++++ b/string/strncat.c
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 1991,1997,2011 Free Software Foundation, Inc.
++/* Copyright (C) 1991-2022 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -13,14 +13,10 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+- <http://www.gnu.org/licenses/>. */
++ <https://www.gnu.org/licenses/>. */
+
+ #include <string.h>
+
+-#ifdef _LIBC
+-# include <memcopy.h>
+-#endif
+-
+ #ifndef STRNCAT
+ # undef strncat
+ # define STRNCAT strncat
+@@ -29,54 +25,16 @@
+ char *
+ STRNCAT (char *s1, const char *s2, size_t n)
+ {
+- char c;
+ char *s = s1;
+
+ /* Find the end of S1. */
+- do
+- c = *s1++;
+- while (c != '\0');
+-
+- /* Make S1 point before next character, so we can increment
+- it while memory is read (wins on pipelined cpus). */
+- s1 -= 2;
++ s1 += strlen (s1);
+
+- if (n >= 4)
+- {
+- size_t n4 = n >> 2;
+- do
+- {
+- c = *s2++;
+- *++s1 = c;
+- if (c == '\0')
+- return s;
+- c = *s2++;
+- *++s1 = c;
+- if (c == '\0')
+- return s;
+- c = *s2++;
+- *++s1 = c;
+- if (c == '\0')
+- return s;
+- c = *s2++;
+- *++s1 = c;
+- if (c == '\0')
+- return s;
+- } while (--n4 > 0);
+- n &= 3;
+- }
++ size_t ss = __strnlen (s2, n);
+
+- while (n > 0)
+- {
+- c = *s2++;
+- *++s1 = c;
+- if (c == '\0')
+- return s;
+- n--;
+- }
+-
+- if (c != '\0')
+- *++s1 = '\0';
++ s1[ss] = '\0';
++ memcpy (s1, s2, ss);
+
+ return s;
+ }
++
+diff --git a/string/strncpy.c b/string/strncpy.c
+index 19d501e..83fb610 100644
+--- a/string/strncpy.c
++++ b/string/strncpy.c
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 1991, 1997, 2003 Free Software Foundation, Inc.
++/* Copyright (C) 1991-2022 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -13,75 +13,22 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+- <http://www.gnu.org/licenses/>. */
++ <https://www.gnu.org/licenses/>. */
+
+ #include <string.h>
+-#include <memcopy.h>
+
+ #undef strncpy
+
+ #ifndef STRNCPY
+-#define STRNCPY strncpy
++ #define STRNCPY strncpy
+ #endif
+
+ char *
+ STRNCPY (char *s1, const char *s2, size_t n)
+ {
+- char c;
+- char *s = s1;
+-
+- --s1;
+-
+- if (n >= 4)
+- {
+- size_t n4 = n >> 2;
+-
+- for (;;)
+- {
+- c = *s2++;
+- *++s1 = c;
+- if (c == '\0')
+- break;
+- c = *s2++;
+- *++s1 = c;
+- if (c == '\0')
+- break;
+- c = *s2++;
+- *++s1 = c;
+- if (c == '\0')
+- break;
+- c = *s2++;
+- *++s1 = c;
+- if (c == '\0')
+- break;
+- if (--n4 == 0)
+- goto last_chars;
+- }
+- n = n - (s1 - s) - 1;
+- if (n == 0)
+- return s;
+- goto zero_fill;
+- }
+-
+- last_chars:
+- n &= 3;
+- if (n == 0)
+- return s;
+-
+- do
+- {
+- c = *s2++;
+- *++s1 = c;
+- if (--n == 0)
+- return s;
+- }
+- while (c != '\0');
+-
+- zero_fill:
+- do
+- *++s1 = '\0';
+- while (--n > 0);
+-
+- return s;
++ size_t size = __strnlen (s2, n);
++ if (size != n)
++ memset (s1 + size, '\0', n - size);
++ return memcpy (s1, s2, size);
+ }
+ libc_hidden_builtin_def (strncpy)
+diff --git a/sysdeps/gnu/bits/utmp.h b/sysdeps/gnu/bits/utmp.h
+index aed2750..434a533 100644
+--- a/sysdeps/gnu/bits/utmp.h
++++ b/sysdeps/gnu/bits/utmp.h
+@@ -59,10 +59,14 @@ struct utmp
+ {
+ short int ut_type; /* Type of login. */
+ pid_t ut_pid; /* Process ID of login process. */
+- char ut_line[UT_LINESIZE]; /* Devicename. */
+- char ut_id[4]; /* Inittab ID. */
+- char ut_user[UT_NAMESIZE]; /* Username. */
+- char ut_host[UT_HOSTSIZE]; /* Hostname for remote login. */
++ char ut_line[UT_LINESIZE]
++ __attribute_nonstring__; /* Devicename. */
++ char ut_id[4]
++ __attribute_nonstring__; /* Inittab ID. */
++ char ut_user[UT_NAMESIZE]
++ __attribute_nonstring__; /* Username. */
++ char ut_host[UT_HOSTSIZE]
++ __attribute_nonstring__; /* Hostname for remote login. */
+ struct exit_status ut_exit; /* Exit status of a process marked
+ as DEAD_PROCESS. */
+ /* The ut_session and ut_tv fields must be the same size when compiled
+diff --git a/sysdeps/gnu/bits/utmpx.h b/sysdeps/gnu/bits/utmpx.h
+index f8716ca..13d84e4 100644
+--- a/sysdeps/gnu/bits/utmpx.h
++++ b/sysdeps/gnu/bits/utmpx.h
+@@ -56,10 +56,14 @@ struct utmpx
+ {
+ short int ut_type; /* Type of login. */
+ __pid_t ut_pid; /* Process ID of login process. */
+- char ut_line[__UT_LINESIZE]; /* Devicename. */
+- char ut_id[4]; /* Inittab ID. */
+- char ut_user[__UT_NAMESIZE]; /* Username. */
+- char ut_host[__UT_HOSTSIZE]; /* Hostname for remote login. */
++ char ut_line[__UT_LINESIZE]
++ __attribute_nonstring__; /* Devicename. */
++ char ut_id[4]
++ __attribute_nonstring__; /* Inittab ID. */
++ char ut_user[__UT_NAMESIZE]
++ __attribute_nonstring__; /* Username. */
++ char ut_host[__UT_HOSTSIZE]
++ __attribute_nonstring__; /* Hostname for remote login. */
+ struct __exit_status ut_exit; /* Exit status of a process marked
+ as DEAD_PROCESS. */
+
+diff --git a/sysdeps/unix/sysv/linux/if_index.c b/sysdeps/unix/sysv/linux/if_index.c
+index 8ba5eae..b620d21 100644
+--- a/sysdeps/unix/sysv/linux/if_index.c
++++ b/sysdeps/unix/sysv/linux/if_index.c
+@@ -38,12 +38,19 @@ __if_nametoindex (const char *ifname)
+ return 0;
+ #else
+ struct ifreq ifr;
++ if (strlen (ifname) >= IFNAMSIZ)
++ {
++ __set_errno (ENODEV);
++ return 0;
++ }
++
++ strncpy (ifr.ifr_name, ifname, sizeof (ifr.ifr_name));
++
+ int fd = __opensock ();
+
+ if (fd < 0)
+ return 0;
+
+- strncpy (ifr.ifr_name, ifname, sizeof (ifr.ifr_name));
+ if (__ioctl (fd, SIOCGIFINDEX, &ifr) < 0)
+ {
+ int saved_errno = errno;
+diff --git a/timezone/zic.c b/timezone/zic.c
+index a5202a1..772d081 100644
+--- a/timezone/zic.c
++++ b/timezone/zic.c
+@@ -1609,7 +1609,7 @@ writezone(const char *const name, const char *const string)
+ }
+ #define DO(field) ((void) fwrite(tzh.field, sizeof tzh.field, 1, fp))
+ tzh = tzh0;
+- (void) strncpy(tzh.tzh_magic, TZ_MAGIC, sizeof tzh.tzh_magic);
++ memcpy(tzh.tzh_magic, TZ_MAGIC, sizeof tzh.tzh_magic);
+ tzh.tzh_version[0] = ZIC_VERSION;
+ convert(eitol(thistypecnt), tzh.tzh_ttisgmtcnt);
+ convert(eitol(thistypecnt), tzh.tzh_ttisstdcnt);
diff --git a/tensorflow-arm64-build/builder.packages.txt b/tensorflow-arm64-build/builder.packages.txt
new file mode 100644
index 00000000..3a0d2cd1
--- /dev/null
+++ b/tensorflow-arm64-build/builder.packages.txt
@@ -0,0 +1,35 @@
+# Packages needed to install Python from source
+# See https://github.com/pyenv/pyenv/wiki#suggested-build-environment
+build-essential
+curl
+libbz2-dev
+libffi-dev
+liblzma-dev
+libncurses5-dev
+libreadline-dev
+libsqlite3-dev
+libssl-dev
+libxml2-dev
+libxmlsec1-dev
+llvm
+make
+tk-dev
+wget
+xz-utils
+zlib1g-dev
+git
+
+# Packages needed to build devtoolset
+file
+flex
+g++
+make
+patch
+rpm2cpio
+unar
+wget
+xz-utils
+cpio
+gawk
+texinfo
+gettext
diff --git a/tensorflow-arm64-build/builder.patchelf/build_patchelf.sh b/tensorflow-arm64-build/builder.patchelf/build_patchelf.sh
new file mode 100755
index 00000000..898e1b53
--- /dev/null
+++ b/tensorflow-arm64-build/builder.patchelf/build_patchelf.sh
@@ -0,0 +1,14 @@
+#!/bin/bash -eu
+
+# Need a newer version of patchelf as the installed version is buggy in 20.04
+# so get patchelf source from 22.04 ie 'jammy' and build it to avoid dependency
+# problems that would occur with a binary package
+
+mkdir -p /patchelf
+cd /patchelf
+echo deb-src http://ports.ubuntu.com/ubuntu-ports/ jammy universe>>/etc/apt/sources.list
+apt-get update
+apt-get -y build-dep patchelf/jammy
+apt-get -b source patchelf/jammy
+
+# This will leave a .deb file for installation in a later stage
diff --git a/tensorflow-arm64-build/devel.bashrc b/tensorflow-arm64-build/devel.bashrc
new file mode 100644
index 00000000..755d4878
--- /dev/null
+++ b/tensorflow-arm64-build/devel.bashrc
@@ -0,0 +1,26 @@
+# Copyright 2021 The TensorFlow Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# ==============================================================================
+
+# Do not print anything if this is not being used interactively
+[ -z "$PS1" ] && return
+
+# Set up attractive prompt
+export PS1="\[\e[31m\]tf-docker\[\e[m\] \[\e[33m\]\w\[\e[m\] > "
+export TERM=xterm-256color
+alias grep="grep --color=auto"
+alias ls="ls --color=auto"
+# Fix nvidia-docker
+ldconfig
diff --git a/tensorflow-arm64-build/devel.packages.txt b/tensorflow-arm64-build/devel.packages.txt
new file mode 100644
index 00000000..a0215c97
--- /dev/null
+++ b/tensorflow-arm64-build/devel.packages.txt
@@ -0,0 +1,44 @@
+# Other build-related tools
+autoconf
+automake
+build-essential
+ca-certificates
+cmake
+llvm-17
+clang-17
+clang-format-12
+lld-17
+colordiff
+curl
+ffmpeg
+gdb
+git
+jq
+less
+libcurl3-dev
+libcurl4-openssl-dev
+libfreetype6-dev
+libhdf5-serial-dev
+libomp-17-dev
+libssl-dev
+libtool
+libxml2-dev
+libxslt1-dev
+libzmq3-dev
+mlocate
+moreutils
+openjdk-11-jdk
+openjdk-11-jre-headless
+patchelf
+pkg-config
+python3-dev
+python3-setuptools
+rsync
+software-properties-common
+sudo
+swig
+unzip
+vim
+wget
+zip
+zlib1g-dev
diff --git a/tensorflow-arm64-build/devel.requirements.txt b/tensorflow-arm64-build/devel.requirements.txt
new file mode 100644
index 00000000..388a34ad
--- /dev/null
+++ b/tensorflow-arm64-build/devel.requirements.txt
@@ -0,0 +1,5 @@
+portpicker ~= 1.6.0
+setuptools >= 68.2.2
+# For wheel verification, and uploading
+auditwheel ~= 5.4.0
+twine ~= 4.0.2
diff --git a/tensorflow-arm64-build/devel.usertools/aarch64.bazelrc b/tensorflow-arm64-build/devel.usertools/aarch64.bazelrc
new file mode 100644
index 00000000..f41974b5
--- /dev/null
+++ b/tensorflow-arm64-build/devel.usertools/aarch64.bazelrc
@@ -0,0 +1,86 @@
+# This bazelrc can build a CPU-supporting TF package.
+
+# Convenient cache configurations
+# Use a cache directory mounted to /tf/cache. Very useful!
+build:sigbuild_local_cache --disk_cache=/tf/cache
+# Use the public-access TF DevInfra cache (read only)
+build:sigbuild_remote_cache --remote_cache="https://storage.googleapis.com/tensorflow-devinfra-bazel-cache/manylinux2014" --remote_upload_local_results=false
+# Change the value of CACHEBUSTER when upgrading the toolchain, or when testing
+# different compilation methods. E.g. for a PR to test a new CUDA version, set
+# the CACHEBUSTER to the PR number.
+build --action_env=CACHEBUSTER=20220325
+
+# Use Python 3.X as installed in container image
+build --action_env PYTHON_BIN_PATH="/usr/local/bin/python3"
+build --python_path="/usr/local/bin/python3"
+
+# Build TensorFlow v2
+build --define=tf_api_version=2 --action_env=TF2_BEHAVIOR=1
+
+# Prevent double-compilation of some TF code, ref. b/183279666 (internal)
+# > TF's gen_api_init_files has a genrule to run the core TensorFlow code
+# > on the host machine. If we don't have --distinct_host_configuration=false,
+# > the core TensorFlow code will be built once for the host and once for the
+# > target platform.
+# See also https://docs.bazel.build/versions/master/guide.html#build-configurations-and-cross-compilation
+build --distinct_host_configuration=false
+
+# Store performance profiling log in the mounted artifact directory.
+# The profile can be viewed by visiting chrome://tracing in a Chrome browser.
+# See https://docs.bazel.build/versions/main/skylark/performance.html#performance-profiling
+build --profile=/tf/pkg/profile.json.gz
+
+# Use the rebuilt gcc toolchain to compile for manylinux2014
+build --crosstool_top="@ml2014_aarch64_config_aarch64//crosstool:toolchain"
+test --crosstool_top="@ml2014_aarch64_config_aarch64//crosstool:toolchain"
+
+build --copt="-mtune=generic" --copt="-march=armv8-a" --copt="-O3"
+
+# Test-related settings below this point.
+test --build_tests_only --keep_going --test_output=errors --verbose_failures=true
+test --test_timeout=500,900,-1,-1
+# Give only the list of failed tests at the end of the log
+test --test_summary=short
+
+# "nonpip" tests are regular py_test tests.
+# Pass --config=nonpip to run the same suite of tests. If you want to run just
+# one test for investigation, you don't need --config=nonpip; just run the
+# bazel test invocation as normal.
+test:nonpip_filters --test_tag_filters=-no_oss,-oss_serial,-gpu,-tpu,-benchmark-test,-v1only,-no_aarch64,-no_oss_py38,-no_oss_py39,-no_oss_py310
+test:nonpip_filters --build_tag_filters=-no_oss,-oss_serial,-gpu,-tpu,-benchmark-test,-v1only,-no_aarch64,-no_oss_py38,-no_oss_py39,-no_oss_py310
+test:nonpip_filters --test_lang_filters=py --flaky_test_attempts=3 --test_size_filters=small,medium
+test:nonpip --config=nonpip_filters -- //tensorflow/... -//tensorflow/python/integration_testing/... -//tensorflow/compiler/tf2tensorrt/... -//tensorflow/compiler/xrt/... -//tensorflow/core/tpu/... -//tensorflow/lite/... -//tensorflow/tools/toolchains/...
+
+# "pip tests" run a similar suite of tests the "nonpip" tests, but do something
+# odd to attempt to validate the quality of the pip package. The wheel is
+# installed into a virtual environment, and then that venv is used to run all
+# bazel tests with a special flag "--define=no_tensorflow_py_deps=true", which
+# drops all the bazel dependencies for each py_test; this makes all the tests
+# use the wheel's TensorFlow installation instead of the one made available
+# through bazel. This must be done in a different root directory, //bazel_pip/...,
+# because "import tensorflow" run from the root directory would instead import
+# the folder instead of the venv package.
+#
+# Pass --config=pip to run the same suite of tests. If you want to run just one
+# test for investigation, you'll need --config=pip_venv instead, and then you
+# can specify whichever target you want.
+test:pip_venv --action_env PYTHON_BIN_PATH="/bazel_pip/bin/python3"
+test:pip_venv --action_env PYTHON_LIB_PATH="/bazel_pip/lib/python3/site-packages"
+test:pip_venv --python_path="/bazel_pip/bin/python3"
+test:pip_venv --define=no_tensorflow_py_deps=true
+test:pip --config=pip_venv
+# Yes, we don't exclude the gpu tests on pip for some reason.
+test:pip_filters --test_tag_filters=-nopip,-no_pip,-no_oss,-oss_serial,-v1only,-no_aarch64,-no_oss_py38,-no_oss_py39,-no_oss_py310
+test:pip_filters --build_tag_filters=-nopip,-no_pip,-no_oss,-oss_serial,-v1only,-no_aarch64,-no_oss_py38,-no_oss_py39,-no_oss_py310
+test:pip_filters --test_lang_filters=py --flaky_test_attempts=3 --test_size_filters=small,medium
+test:pip --config=pip_filters -- //bazel_pip/tensorflow/... -//bazel_pip/tensorflow/python/integration_testing/... -//bazel_pip/tensorflow/compiler/tf2tensorrt/... -//bazel_pip/tensorflow/compiler/xrt/... -//bazel_pip/tensorflow/core/tpu/... -//bazel_pip/tensorflow/lite/... -//tensorflow/tools/toolchains/...
+
+# For building libtensorflow archives
+test:libtensorflow_test -- //tensorflow/tools/lib_package:libtensorflow_test //tensorflow/tools/lib_package:libtensorflow_java_test
+build:libtensorflow_build -- //tensorflow/tools/lib_package:libtensorflow.tar.gz //tensorflow/tools/lib_package:libtensorflow_jni.tar.gz //tensorflow/java:libtensorflow.jar //tensorflow/java:libtensorflow-src.jar //tensorflow/tools/lib_package:libtensorflow_proto.zip
+
+# For continuous builds
+test:pycpp_filters --test_tag_filters=-no_oss,-oss_serial,-gpu,-tpu,-benchmark-test,-v1only,-no_aarch64,-no_oss_py38,-no_oss_py39,-no_oss_py310
+test:pycpp_filters --build_tag_filters=-no_oss,-oss_serial,-gpu,-tpu,-benchmark-test,-v1only,-no_aarch64,-no_oss_py38,-no_oss_py39,-no_oss_py310
+test:pycpp_filters --test_lang_filters=cc,py --flaky_test_attempts=3 --test_size_filters=small,medium
+test:pycpp --config=pycpp_filters -- //tensorflow/... -//tensorflow/python/integration_testing/... -//tensorflow/compiler/tf2tensorrt/... -//tensorflow/compiler/xrt/... -//tensorflow/core/tpu/... -//tensorflow/lite/... -//tensorflow/tools/toolchains/...
diff --git a/tensorflow-arm64-build/devel.usertools/aarch64_clang.bazelrc b/tensorflow-arm64-build/devel.usertools/aarch64_clang.bazelrc
new file mode 100644
index 00000000..cde53db4
--- /dev/null
+++ b/tensorflow-arm64-build/devel.usertools/aarch64_clang.bazelrc
@@ -0,0 +1,100 @@
+# This bazelrc can build a CPU-supporting TF package.
+
+# Convenient cache configurations
+# Use a cache directory mounted to /tf/cache. Very useful!
+build:sigbuild_local_cache --disk_cache=/tf/cache
+# Use the public-access TF DevInfra cache (read only)
+build:sigbuild_remote_cache --remote_cache="https://storage.googleapis.com/tensorflow-devinfra-bazel-cache/manylinux2014" --remote_upload_local_results=false
+# Change the value of CACHEBUSTER when upgrading the toolchain, or when testing
+# different compilation methods. E.g. for a PR to test a new CUDA version, set
+# the CACHEBUSTER to the PR number.
+build --action_env=CACHEBUSTER=20220325
+
+# Use Python 3.X as installed in container image
+build --action_env PYTHON_BIN_PATH="/usr/local/bin/python3"
+build --python_path="/usr/local/bin/python3"
+
+# Build TensorFlow v2
+build --define=tf_api_version=2 --action_env=TF2_BEHAVIOR=1
+
+# Use lld as the linker
+build --linkopt="-fuse-ld=lld"
+build --linkopt="-lm"
+build --linkopt="-Wl,--undefined-version"
+build --host_linkopt="-fuse-ld=lld"
+build --host_linkopt="-lm"
+build --host_linkopt="-Wl,--undefined-version"
+
+# Prevent double-compilation of some TF code, ref. b/183279666 (internal)
+# > TF's gen_api_init_files has a genrule to run the core TensorFlow code
+# > on the host machine. If we don't have --distinct_host_configuration=false,
+# > the core TensorFlow code will be built once for the host and once for the
+# > target platform.
+# See also https://docs.bazel.build/versions/master/guide.html#build-configurations-and-cross-compilation
+build --distinct_host_configuration=false
+
+# Disable clang extension that rejects type definitions within offsetof.
+# This was added in clang-16 by https://reviews.llvm.org/D133574.
+# Can be removed once upb is updated, since a type definition is used within
+# offset of in the current version of ubp.
+# See https://github.com/protocolbuffers/upb/blob/9effcbcb27f0a665f9f345030188c0b291e32482/upb/upb.c#L183.
+build --copt=-Wno-gnu-offsetof-extensions
+
+# Store performance profiling log in the mounted artifact directory.
+# The profile can be viewed by visiting chrome://tracing in a Chrome browser.
+# See https://docs.bazel.build/versions/main/skylark/performance.html#performance-profiling
+build --profile=/tf/pkg/profile.json.gz
+
+# Use the rebuilt gcc toolchain to compile for manylinux2014
+build --crosstool_top="@ml2014_clang_aarch64_config_aarch64//crosstool:toolchain"
+
+build --copt="-mtune=generic" --copt="-march=armv8-a" --copt="-O3"
+
+# Test-related settings below this point.
+test --build_tests_only --keep_going --test_output=errors --verbose_failures=true
+test --test_timeout=500,900,-1,-1
+# Give only the list of failed tests at the end of the log
+test --test_summary=short
+
+# "nonpip" tests are regular py_test tests.
+# Pass --config=nonpip to run the same suite of tests. If you want to run just
+# one test for investigation, you don't need --config=nonpip; just run the
+# bazel test invocation as normal.
+test:nonpip_filters --test_tag_filters=-no_oss,-oss_serial,-gpu,-tpu,-benchmark-test,-v1only,-no_aarch64,-no_oss_py38,-no_oss_py39,-no_oss_py310
+test:nonpip_filters --build_tag_filters=-no_oss,-oss_serial,-gpu,-tpu,-benchmark-test,-v1only,-no_aarch64,-no_oss_py38,-no_oss_py39,-no_oss_py310
+test:nonpip_filters --test_lang_filters=py --flaky_test_attempts=3 --test_size_filters=small,medium
+test:nonpip --config=nonpip_filters -- //tensorflow/... -//tensorflow/python/integration_testing/... -//tensorflow/compiler/tf2tensorrt/... -//tensorflow/compiler/xrt/... -//tensorflow/core/tpu/... -//tensorflow/lite/... -//tensorflow/tools/toolchains/...
+
+# "pip tests" run a similar suite of tests the "nonpip" tests, but do something
+# odd to attempt to validate the quality of the pip package. The wheel is
+# installed into a virtual environment, and then that venv is used to run all
+# bazel tests with a special flag "--define=no_tensorflow_py_deps=true", which
+# drops all the bazel dependencies for each py_test; this makes all the tests
+# use the wheel's TensorFlow installation instead of the one made available
+# through bazel. This must be done in a different root directory, //bazel_pip/...,
+# because "import tensorflow" run from the root directory would instead import
+# the folder instead of the venv package.
+#
+# Pass --config=pip to run the same suite of tests. If you want to run just one
+# test for investigation, you'll need --config=pip_venv instead, and then you
+# can specify whichever target you want.
+test:pip_venv --action_env PYTHON_BIN_PATH="/bazel_pip/bin/python3"
+test:pip_venv --action_env PYTHON_LIB_PATH="/bazel_pip/lib/python3/site-packages"
+test:pip_venv --python_path="/bazel_pip/bin/python3"
+test:pip_venv --define=no_tensorflow_py_deps=true
+test:pip --config=pip_venv
+# Yes, we don't exclude the gpu tests on pip for some reason.
+test:pip_filters --test_tag_filters=-nopip,-no_pip,-no_oss,-oss_serial,-v1only,-no_aarch64,-no_oss_py38,-no_oss_py39,-no_oss_py310
+test:pip_filters --build_tag_filters=-nopip,-no_pip,-no_oss,-oss_serial,-v1only,-no_aarch64,-no_oss_py38,-no_oss_py39,-no_oss_py310
+test:pip_filters --test_lang_filters=py --flaky_test_attempts=3 --test_size_filters=small,medium
+test:pip --config=pip_filters -- //bazel_pip/tensorflow/... -//bazel_pip/tensorflow/python/integration_testing/... -//bazel_pip/tensorflow/compiler/tf2tensorrt/... -//bazel_pip/tensorflow/compiler/xrt/... -//bazel_pip/tensorflow/core/tpu/... -//bazel_pip/tensorflow/lite/... -//tensorflow/tools/toolchains/...
+
+# For building libtensorflow archives
+test:libtensorflow_test -- //tensorflow/tools/lib_package:libtensorflow_test //tensorflow/tools/lib_package:libtensorflow_java_test
+build:libtensorflow_build -- //tensorflow/tools/lib_package:libtensorflow.tar.gz //tensorflow/tools/lib_package:libtensorflow_jni.tar.gz //tensorflow/java:libtensorflow.jar //tensorflow/java:libtensorflow-src.jar //tensorflow/tools/lib_package:libtensorflow_proto.zip
+
+# For continuous builds
+test:pycpp_filters --test_tag_filters=-no_oss,-oss_serial,-gpu,-tpu,-benchmark-test,-v1only,-no_aarch64,-no_oss_py38,-no_oss_py39,-no_oss_py310
+test:pycpp_filters --build_tag_filters=-no_oss,-oss_serial,-gpu,-tpu,-benchmark-test,-v1only,-no_aarch64,-no_oss_py38,-no_oss_py39,-no_oss_py310
+test:pycpp_filters --test_lang_filters=cc,py --flaky_test_attempts=3 --test_size_filters=small,medium
+test:pycpp --config=pycpp_filters -- //tensorflow/... -//tensorflow/python/integration_testing/... -//tensorflow/compiler/tf2tensorrt/... -//tensorflow/compiler/xrt/... -//tensorflow/core/tpu/... -//tensorflow/lite/... -//tensorflow/tools/toolchains/...
diff --git a/tensorflow-arm64-build/devel.usertools/code_check_changed_files.bats b/tensorflow-arm64-build/devel.usertools/code_check_changed_files.bats
new file mode 100644
index 00000000..78e5b19e
--- /dev/null
+++ b/tensorflow-arm64-build/devel.usertools/code_check_changed_files.bats
@@ -0,0 +1,76 @@
+# vim: filetype=bash
+#
+# Copyright 2022 The TensorFlow Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ==============================================================================
+
+setup_file() {
+ cd /tf/tensorflow
+ bazel version # Start the bazel server
+ # Without this, git errors if /tf/tensorflow directory owner is different
+ git config --global --add safe.directory /tf/tensorflow
+ # Note that you could generate a list of all the affected targets with e.g.:
+ # bazel query $(paste -sd "+" $BATS_FILE_TMPDIR/changed_files) --keep_going
+ # Only shows Added, Changed, Modified, Renamed, and Type-changed files
+ if [[ "$(git rev-parse --abbrev-ref HEAD)" = "pull_branch" ]]; then
+ # TF's CI runs 'git fetch origin "pull/PR#/merge:pull_branch"'
+ # To get the as-merged branch during the CI tests
+ git diff --diff-filter ACMRT --name-only pull_branch^ pull_branch > $BATS_FILE_TMPDIR/changed_files
+ else
+ # If the branch is not present, then diff against origin/master
+ git diff --diff-filter ACMRT --name-only origin/master > $BATS_FILE_TMPDIR/changed_files
+ fi
+}
+
+# Note: this is excluded on the full code base, since any submitted code must
+# have passed Google's internal style guidelines.
+@test "Check buildifier formatting on BUILD files" {
+ echo "buildifier formatting is recommended. Here are the suggested fixes:"
+ echo "============================="
+ grep -e 'BUILD' $BATS_FILE_TMPDIR/changed_files \
+ | xargs buildifier -v -mode=diff -diff_command="git diff --no-index"
+}
+
+# Note: this is excluded on the full code base, since any submitted code must
+# have passed Google's internal style guidelines.
+@test "Check formatting for C++ files" {
+ skip "clang-format doesn't match internal clang-format checker"
+ echo "clang-format is recommended. Here are the suggested changes:"
+ echo "============================="
+ grep -e '\.h$' -e '\.cc$' $BATS_FILE_TMPDIR/changed_files > $BATS_TEST_TMPDIR/files || true
+ if [[ ! -s $BATS_TEST_TMPDIR/files ]]; then return 0; fi
+ xargs -a $BATS_TEST_TMPDIR/files -i -n1 -P $(nproc --all) \
+ bash -c 'clang-format-12 --style=Google {} | git diff --no-index {} -' \
+ | tee $BATS_TEST_TMPDIR/needs_help.txt
+ echo "You can use clang-format --style=Google -i <file> to apply changes to a file."
+ [[ ! -s $BATS_TEST_TMPDIR/needs_help.txt ]]
+}
+
+# Note: this is excluded on the full code base, since any submitted code must
+# have passed Google's internal style guidelines.
+@test "Check pylint for Python files" {
+ echo "Python formatting is recommended. Here are the pylint errors:"
+ echo "============================="
+ grep -e "\.py$" $BATS_FILE_TMPDIR/changed_files > $BATS_TEST_TMPDIR/files || true
+ if [[ ! -s $BATS_TEST_TMPDIR/files ]]; then return 0; fi
+ xargs -a $BATS_TEST_TMPDIR/files -n1 -P $(nproc --all) \
+ python -m pylint --rcfile=tensorflow/tools/ci_build/pylintrc --score false \
+ | grep -v "**** Module" \
+ | tee $BATS_TEST_TMPDIR/needs_help.txt
+ [[ ! -s $BATS_TEST_TMPDIR/needs_help.txt ]]
+}
+
+teardown_file() {
+ bazel shutdown
+}
diff --git a/tensorflow-arm64-build/devel.usertools/code_check_full.bats b/tensorflow-arm64-build/devel.usertools/code_check_full.bats
new file mode 100644
index 00000000..99e2e0d5
--- /dev/null
+++ b/tensorflow-arm64-build/devel.usertools/code_check_full.bats
@@ -0,0 +1,307 @@
+# vim: filetype=bash
+#
+# Copyright 2022 The TensorFlow Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ==============================================================================
+setup_file() {
+ cd /tf/tensorflow
+ bazel version # Start the bazel server
+}
+
+# Do a bazel query specifically for the licenses checker. It searches for
+# targets matching the provided query, which start with // or @ but not
+# //tensorflow (so it looks for //third_party, //external, etc.), and then
+# gathers the list of all packages (i.e. directories) which contain those
+# targets.
+license_query() {
+ bazel cquery --experimental_cc_shared_library "$1" --keep_going \
+ | grep -e "^//" -e "^@" \
+ | grep -E -v "^//tensorflow" \
+ | sed -e 's|:.*||' \
+ | sort -u
+}
+
+# Verify that, given a build target and a license-list generator target, all of
+# the dependencies of that target which include a license notice file are then
+# included when generating that license. Necessary because the license targets
+# in TensorFlow are manually enumerated rather than generated automatically.
+do_external_licenses_check(){
+ BUILD_TARGET="$1"
+ LICENSES_TARGET="$2"
+
+ # grep patterns for targets which are allowed to be missing from the licenses
+ cat > $BATS_TEST_TMPDIR/allowed_to_be_missing <<EOF
+@absl_py//absl
+@bazel_tools//platforms
+@bazel_tools//third_party/
+@bazel_tools//tools
+@local
+@com_google_absl//absl
+@org_tensorflow//
+@com_github_googlecloudplatform_google_cloud_cpp//google
+@com_github_grpc_grpc//src/compiler
+@platforms//os
+@ruy//
+EOF
+
+ # grep patterns for targets which are allowed to be extra licenses
+ cat > $BATS_TEST_TMPDIR/allowed_to_be_extra <<EOF
+//third_party/mkl
+//third_party/mkl_dnn
+@absl_py//
+@bazel_tools//src
+@bazel_tools//platforms
+@bazel_tools//tools/
+@org_tensorflow//tensorflow
+@com_google_absl//
+//external
+@local
+@com_github_googlecloudplatform_google_cloud_cpp//
+@embedded_jdk//
+^//$
+@ruy//
+EOF
+
+ license_query "attr('licenses', 'notice', deps($BUILD_TARGET))" > $BATS_TEST_TMPDIR/expected_licenses
+ license_query "deps($LICENSES_TARGET)" > $BATS_TEST_TMPDIR/actual_licenses
+
+ # Column 1 is left only, Column 2 is right only, Column 3 is shared lines
+ # Select lines unique to actual_licenses, i.e. extra licenses.
+ comm -1 -3 $BATS_TEST_TMPDIR/expected_licenses $BATS_TEST_TMPDIR/actual_licenses | grep -v -f $BATS_TEST_TMPDIR/allowed_to_be_extra > $BATS_TEST_TMPDIR/actual_extra_licenses || true
+ # Select lines unique to expected_licenses, i.e. missing licenses
+ comm -2 -3 $BATS_TEST_TMPDIR/expected_licenses $BATS_TEST_TMPDIR/actual_licenses | grep -v -f $BATS_TEST_TMPDIR/allowed_to_be_missing > $BATS_TEST_TMPDIR/actual_missing_licenses || true
+
+ if [[ -s $BATS_TEST_TMPDIR/actual_extra_licenses ]]; then
+ echo "Please remove the following extra licenses from $LICENSES_TARGET:"
+ cat $BATS_TEST_TMPDIR/actual_extra_licenses
+ fi
+
+ if [[ -s $BATS_TEST_TMPDIR/actual_missing_licenses ]]; then
+ echo "Please include the missing licenses for the following packages in $LICENSES_TARGET:"
+ cat $BATS_TEST_TMPDIR/actual_missing_licenses
+ fi
+
+ # Fail if either of the two "extras" or "missing" lists are present. If so,
+ # then the user will see the above error messages.
+ [[ ! -s $BATS_TEST_TMPDIR/actual_extra_licenses ]] && [[ ! -s $BATS_TEST_TMPDIR/actual_missing_licenses ]]
+}
+
+@test "Pip package generated license includes all dependencies' licenses" {
+ do_external_licenses_check \
+ "//tensorflow/tools/pip_package:wheel" \
+ "//tensorflow/tools/pip_package:licenses"
+}
+
+@test "Libtensorflow generated license includes all dependencies' licenses" {
+ do_external_licenses_check \
+ "//tensorflow:libtensorflow.so" \
+ "//tensorflow/tools/lib_package:clicenses_generate"
+}
+
+@test "Java library generated license includes all dependencies' licenses" {
+ do_external_licenses_check \
+ "//tensorflow/java:libtensorflow_jni.so" \
+ "//tensorflow/tools/lib_package:jnilicenses_generate"
+}
+
+# This test ensures that all the targets built into the Python package include
+# their dependencies. It's a rewritten version of the "smoke test", an older
+# Python script that was very difficult to understand. See
+# https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/pip_package/pip_smoke_test.py
+@test "Pip package includes all required //tensorflow dependencies" {
+ # grep patterns for packages whose dependencies can be ignored
+ cat > $BATS_TEST_TMPDIR/ignore_deps_for_these_packages <<EOF
+//tensorflow/lite
+//tensorflow/compiler/mlir/lite
+//tensorflow/compiler/mlir/tfrt
+//tensorflow/core/runtime_fallback
+//tensorflow/core/tfrt
+//tensorflow/python/kernel_tests/signal
+//tensorflow/examples
+//tensorflow/tools/android
+//tensorflow/python/eager/benchmarks
+EOF
+
+ # grep patterns for files and targets which don't need to be in the pip
+ # package, ever.
+ cat > $BATS_TEST_TMPDIR/ignore_these_deps <<EOF
+benchmark
+_test$
+_test.py$
+_test_cpu$
+_test_cpu.py$
+_test_gpu$
+_test_gpu.py$
+_test_lib$
+//tensorflow/cc/saved_model:saved_model_test_files
+//tensorflow/cc/saved_model:saved_model_half_plus_two
+//tensorflow:no_tensorflow_py_deps
+//tensorflow/tools/pip_package:win_pip_package_marker
+//tensorflow/core:image_testdata
+//tensorflow/core/lib/lmdb:lmdb_testdata
+//tensorflow/core/lib/lmdb/testdata:lmdb_testdata
+//tensorflow/core/kernels/cloud:bigquery_reader_ops
+//tensorflow/python:extra_py_tests_deps
+//tensorflow/python:mixed_precision
+//tensorflow/python:tf_optimizer
+//tensorflow/python:compare_test_proto_py
+//tensorflow/python/framework:test_ops_2
+//tensorflow/python/framework:test_file_system.so
+//tensorflow/python/debug:grpc_tensorflow_server.par
+//tensorflow/python/feature_column:vocabulary_testdata
+//tensorflow/python/util:nest_test_main_lib
+//tensorflow/lite/experimental/examples/lstm:rnn_cell
+//tensorflow/lite/experimental/examples/lstm:rnn_cell.py
+//tensorflow/lite/experimental/examples/lstm:unidirectional_sequence_lstm_test
+//tensorflow/lite/experimental/examples/lstm:unidirectional_sequence_lstm_test.py
+//tensorflow/lite/python:interpreter
+//tensorflow/lite/python:interpreter_test
+//tensorflow/lite/python:interpreter.py
+//tensorflow/lite/python:interpreter_test.py
+EOF
+
+ # Get the full list of files and targets which get included into the pip
+ # package
+ bazel query --keep_going 'deps(//tensorflow/tools/pip_package:wheel)' | sort -u > $BATS_TEST_TMPDIR/pip_deps
+ # Find all Python py_test targets not tagged "no_pip" or "manual", excluding
+ # any targets in ignored packages. Combine this list of targets into a bazel
+ # query list (e.g. the list becomes "target+target2+target3")
+ bazel query --keep_going 'kind(py_test, //tensorflow/python/...) - attr("tags", "no_pip|manual", //tensorflow/python/...)' | grep -v -f $BATS_TEST_TMPDIR/ignore_deps_for_these_packages | paste -sd "+" - > $BATS_TEST_TMPDIR/deps
+ # Find all one-step dependencies of those tests which are from //tensorflow
+ # (since external deps will come from Python-level pip dependencies),
+ # excluding dependencies and files that are known to be unneccessary.
+ # This creates a list of targets under //tensorflow that are required for
+ # TensorFlow python tests.
+ bazel query --keep_going "deps($(cat $BATS_TEST_TMPDIR/deps), 1)" | grep "^//tensorflow" | grep -v -f $BATS_TEST_TMPDIR/ignore_these_deps | sort -u > $BATS_TEST_TMPDIR/required_deps
+
+
+ # Find if any required dependencies are missing from the list of dependencies
+ # included in the pip package.
+ # (comm: Column 1 is left, Column 2 is right, Column 3 is shared lines)
+ comm -2 -3 $BATS_TEST_TMPDIR/required_deps $BATS_TEST_TMPDIR/pip_deps > $BATS_TEST_TMPDIR/missing_deps || true
+
+ if [[ -s $BATS_TEST_TMPDIR/missing_deps ]]; then
+ cat <<EOF
+One or more test dependencies are not in the pip package.
+If these test dependencies need to be in the TensorFlow pip package, please
+add them to //tensorflow/tools/pip_package/BUILD. Otherwise, add the no_pip tag
+to the test, or change code_check_full.bats in the SIG Build repository. That's
+https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/tf_sig_build_dockerfiles/devel.usertools/code_check_full.bats
+Here are the affected tests:
+EOF
+ while read dep; do
+ echo "For dependency $dep:"
+ # For every missing dependency, find the tests which directly depend on
+ # it, and print that list for debugging. Not really clear if this is
+ # helpful since the only examples I've seen are enormous.
+ bazel query "rdeps(kind(py_test, $(cat $BATS_TEST_TMPDIR/deps)), $dep, 1)"
+ done < $BATS_TEST_TMPDIR/missing_deps
+ exit 1
+ fi
+}
+
+# The Python package is not allowed to depend on any CUDA packages.
+@test "Pip package doesn't depend on CUDA" {
+ bazel cquery \
+ --experimental_cc_shared_library \
+ --@local_config_cuda//:enable_cuda \
+ "somepath(//tensorflow/tools/pip_package:wheel, " \
+ "@local_config_cuda//cuda:cudart + "\
+ "@local_config_cuda//cuda:cudart + "\
+ "@local_config_cuda//cuda:cuda_driver + "\
+ "@local_config_cuda//cuda:cudnn + "\
+ "@local_config_cuda//cuda:curand + "\
+ "@local_config_cuda//cuda:cusolver + "\
+ "@local_config_tensorrt//:tensorrt)" --keep_going > $BATS_TEST_TMPDIR/out
+
+ cat <<EOF
+There was a path found connecting //tensorflow/tools/pip_package:wheel
+to a banned CUDA dependency. Here's the output from bazel query:
+EOF
+ cat $BATS_TEST_TMPDIR/out
+ [[ ! -s $BATS_TEST_TMPDIR/out ]]
+}
+
+@test "Pip package doesn't depend on CUDA for static builds (i.e. Windows)" {
+ bazel cquery \
+ --experimental_cc_shared_library \
+ --@local_config_cuda//:enable_cuda \
+ --define framework_shared_object=false \
+ "somepath(//tensorflow/tools/pip_package:wheel, " \
+ "@local_config_cuda//cuda:cudart + "\
+ "@local_config_cuda//cuda:cudart + "\
+ "@local_config_cuda//cuda:cuda_driver + "\
+ "@local_config_cuda//cuda:cudnn + "\
+ "@local_config_cuda//cuda:curand + "\
+ "@local_config_cuda//cuda:cusolver + "\
+ "@local_config_tensorrt//:tensorrt)" --keep_going > $BATS_TEST_TMPDIR/out
+
+ cat <<EOF
+There was a path found connecting //tensorflow/tools/pip_package:wheel
+to a banned CUDA dependency when '--define framework_shared_object=false' is set.
+This means that a CUDA target was probably included via an is_static condition,
+used when targeting platforms like Windows where we build statically instead
+of dynamically. Here's the output from bazel query:
+EOF
+ cat $BATS_TEST_TMPDIR/out
+ [[ ! -s $BATS_TEST_TMPDIR/out ]]
+}
+
+@test "All tensorflow.org/code links point to real files" {
+ for i in $(grep -onI 'https://www.tensorflow.org/code/[a-zA-Z0-9/._-]\+' -r tensorflow); do
+ target=$(echo $i | sed 's!.*https://www.tensorflow.org/code/!!g')
+
+ if [[ ! -f $target ]] && [[ ! -d $target ]]; then
+ echo "$i" >> errors.txt
+ fi
+ if [[ -e errors.txt ]]; then
+ echo "Broken links found:"
+ cat errors.txt
+ rm errors.txt
+ false
+ fi
+ done
+}
+
+@test "No duplicate files on Windows" {
+ cat <<EOF
+Please rename files so there are no repeats. For example, README.md and
+Readme.md would be the same file on Windows. In this test, you would get a
+warning for "readme.md" because it makes everything lowercase. There are
+repeats of these filename(s) with different casing:
+EOF
+ find . | tr '[A-Z]' '[a-z]' | sort | uniq -d | tee $BATS_FILE_TMPDIR/repeats
+ [[ ! -s $BATS_FILE_TMPDIR/repeats ]]
+}
+
+# It's unclear why, but running this on //tensorflow/... is faster than running
+# only on affected targets, usually. There are targets in //tensorflow/lite that
+# don't pass --nobuild, so they're on their own.
+#
+# Although buildifier checks for formatting as well, "bazel build nobuild"
+# checks for cross-file issues like bad includes or missing BUILD definitions.
+#
+# We can't test on the windows toolchains because they're using a legacy
+# toolchain format (or something) that specifies the toolchain directly instead
+# of as a "repository". They can't be valid on Linux because Linux can't do
+# anything with a Windows-only toolchain, and bazel errors if trying to build
+# that directory.
+@test "bazel nobuild passes on all of TF except TF Lite and win toolchains" {
+ bazel build --experimental_cc_shared_library --nobuild --keep_going -- //tensorflow/... -//tensorflow/lite/... -//tensorflow/tools/toolchains/win/... -//tensorflow/tools/toolchains/win_1803/...
+}
+
+
+teardown_file() {
+ bazel shutdown
+}
diff --git a/tensorflow-arm64-build/devel.usertools/get_test_list.sh b/tensorflow-arm64-build/devel.usertools/get_test_list.sh
new file mode 100755
index 00000000..3a0cc330
--- /dev/null
+++ b/tensorflow-arm64-build/devel.usertools/get_test_list.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+#
+# Copyright 2022 The TensorFlow Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ==============================================================================
+#
+# Usage: get_test_list.sh OUTPUT BAZEL_TEST_COMMAND...
+# Writes the list of tests that would be run from BAZEL_TEST_COMMAND to OUTPUT.
+# Hides all extra output and always exits with success for now.
+
+OUTPUT=$1
+shift
+"$@" --test_summary=short --check_tests_up_to_date 2>/dev/null | sort -u | awk '{print $1}' | grep "^//" | tee $OUTPUT
diff --git a/tensorflow-arm64-build/devel.usertools/rename_and_verify_wheels.sh b/tensorflow-arm64-build/devel.usertools/rename_and_verify_wheels.sh
new file mode 100755
index 00000000..788602d5
--- /dev/null
+++ b/tensorflow-arm64-build/devel.usertools/rename_and_verify_wheels.sh
@@ -0,0 +1,19 @@
+#!/usr/bin/env bash
+#
+# Check and rename wheels with auditwheel. Inserts the platform tags like
+# "manylinux_xyz" into the wheel filename.
+set -euxo pipefail
+
+for wheel in /tf/pkg/*.whl; do
+ echo "Checking and renaming $wheel..."
+ time python3 -m auditwheel repair --plat manylinux2014_aarch64 "$wheel" --wheel-dir /tf/pkg 2>&1 | tee check.txt
+
+ # We don't need the original wheel if it was renamed
+ new_wheel=$(grep --extended-regexp --only-matching '/tf/pkg/\S+.whl' check.txt)
+ if [[ "$new_wheel" != "$wheel" ]]; then
+ rm "$wheel"
+ wheel="$new_wheel"
+ fi
+
+ TF_WHEEL="$wheel" bats /usertools/wheel_verification.bats --timing
+done
diff --git a/tensorflow-arm64-build/devel.usertools/repack_libtensorflow.sh b/tensorflow-arm64-build/devel.usertools/repack_libtensorflow.sh
new file mode 100755
index 00000000..0f549bf0
--- /dev/null
+++ b/tensorflow-arm64-build/devel.usertools/repack_libtensorflow.sh
@@ -0,0 +1,64 @@
+#!/bin/bash
+#
+# Copyright 2022 The TensorFlow Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# ==============================================================================
+#
+# Repacks libtensorflow tarballs into $DIR with provided $TARBALL_SUFFIX,
+# and also repacks libtensorflow-src.jar into a standardized format.
+
+# Helper function to copy a srcjar after moving any source files
+# directly under the root to the "maven-style" src/main/java layout
+#
+# Source files generated by annotation processors appear directly
+# under the root of srcjars jars created by bazel, rather than under
+# the maven-style src/main/java subdirectory.
+#
+# Bazel manages annotation generated source as follows: First, it
+# calls javac with options that create generated files under a
+# bazel-out directory. Next, it archives the generated source files
+# into a srcjar directly under the root. There doesn't appear to be a
+# simple way to parameterize this from bazel, hence this helper to
+# "normalize" the srcjar layout.
+#
+# Arguments:
+# src_jar - path to the original srcjar
+# dest_jar - path to the destination
+# Returns:
+# None
+function cp_normalized_srcjar() {
+ src_jar="$1"
+ dest_jar="$2"
+ tmp_dir=$(mktemp -d)
+ cp "${src_jar}" "${tmp_dir}/orig.jar"
+ pushd "${tmp_dir}"
+ # Extract any src/ files
+ jar -xf "${tmp_dir}/orig.jar" src/
+ # Extract any org/ files under src/main/java
+ (mkdir -p src/main/java && cd src/main/java && jar -xf "${tmp_dir}/orig.jar" org/)
+ # Repackage src/
+ jar -cMf "${tmp_dir}/new.jar" src
+ popd
+ cp "${tmp_dir}/new.jar" "${dest_jar}"
+ rm -rf "${tmp_dir}"
+}
+DIR=$1
+TARBALL_SUFFIX=$2
+mkdir -p "$DIR"
+cp bazel-bin/tensorflow/tools/lib_package/libtensorflow.tar.gz "${DIR}/libtensorflow${TARBALL_SUFFIX}.tar.gz"
+cp bazel-bin/tensorflow/tools/lib_package/libtensorflow_jni.tar.gz "${DIR}/libtensorflow_jni${TARBALL_SUFFIX}.tar.gz"
+cp bazel-bin/tensorflow/java/libtensorflow.jar "${DIR}"
+cp_normalized_srcjar bazel-bin/tensorflow/java/libtensorflow-src.jar "${DIR}/libtensorflow-src.jar"
+cp bazel-bin/tensorflow/tools/lib_package/libtensorflow_proto.zip "${DIR}"
diff --git a/tensorflow-arm64-build/devel.usertools/setup_venv_test.sh b/tensorflow-arm64-build/devel.usertools/setup_venv_test.sh
new file mode 100755
index 00000000..db05f3d3
--- /dev/null
+++ b/tensorflow-arm64-build/devel.usertools/setup_venv_test.sh
@@ -0,0 +1,35 @@
+#!/usr/bin/env bash
+#
+# Copyright 2022 The TensorFlow Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ==============================================================================
+set -euxo pipefail
+
+# Run this from inside the tensorflow github directory.
+# Usage: setup_venv_test.sh venv_and_symlink_name "glob pattern for one wheel file"
+# Example: setup_venv_test.sh bazel_pip "/tf/pkg/*.whl"
+#
+# This will create a venv with that wheel file installed in it, and a symlink
+# in ./venv_and_symlink_name/tensorflow to ./tensorflow. We use this for the
+# "pip" tests.
+
+python -m venv /$1
+mkdir -p $1
+rm -f ./$1/tensorflow
+ln -s $(ls /$1/lib) /$1/lib/python3
+ln -s ../tensorflow $1/tensorflow
+# extglob is necessary for @(a|b) pattern matching
+# see "extglob" in the bash manual page ($ man bash)
+bash -O extglob -c "/$1/bin/pip install $2"
+/$1/bin/pip install -r /usertools/test.requirements.txt
diff --git a/tensorflow-arm64-build/devel.usertools/squash_testlogs.py b/tensorflow-arm64-build/devel.usertools/squash_testlogs.py
new file mode 100755
index 00000000..49c6c2d5
--- /dev/null
+++ b/tensorflow-arm64-build/devel.usertools/squash_testlogs.py
@@ -0,0 +1,116 @@
+#!/usr/bin/env python3
+# pylint:disable=protected-access
+#
+# Copyright 2022 The TensorFlow Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ==============================================================================
+"""Merge all JUnit test.xml files in one directory into one.
+
+Usage: squash_testlogs.py START_DIRECTORY OUTPUT_FILE
+
+Example: squash_testlogs.py /tf/pkg/testlogs /tf/pkg/merged.xml
+
+Recursively find all the JUnit test.xml files in one directory, and merge any
+of them that contain failures into one file. The TensorFlow DevInfra team
+uses this to generate a simple overview of an entire pip and nonpip test
+invocation, since the normal logs that Bazel creates are too large for the
+internal invocation viewer.
+"""
+import collections
+import os
+import re
+import subprocess
+import sys
+from junitparser import JUnitXml
+
+result = JUnitXml()
+try:
+ files = subprocess.check_output(
+ ["grep", "-rlE", '(failures|errors)="[1-9]', sys.argv[1]])
+except subprocess.CalledProcessError as e:
+ print("No failures found to log!")
+ exit(0)
+
+# For test cases, only show the ones that failed that have text (a log)
+seen = collections.Counter()
+runfiles_matcher = re.compile(r"(/.*\.runfiles/)")
+
+
+for f in files.strip().splitlines():
+ # Just ignore any failures, they're probably not important
+ try:
+ r = JUnitXml.fromfile(f)
+ except Exception as e: # pylint: disable=broad-except
+ print("Ignoring this XML parse failure in {}: ".format(f), str(e))
+
+ source_file = re.search(r"/(bazel_pip|tensorflow)/.*",
+ f.decode("utf-8")).group(0)
+ for testsuite in r:
+ testsuite._elem.set("source_file", source_file)
+ # Remove empty testcases
+ for p in testsuite._elem.xpath(".//testcase"):
+ if not len(p): # pylint: disable=g-explicit-length-test
+ testsuite._elem.remove(p)
+ # Change "testsuite > testcase,system-out" to "testsuite > testcase > error"
+ for p in testsuite._elem.xpath(".//system-out"):
+ for c in p.getparent().xpath(".//error | .//failure"):
+ c.text = p.text
+ p.getparent().remove(p)
+ # Remove duplicate results of the same exact test (e.g. due to retry
+ # attempts)
+ for p in testsuite._elem.xpath(".//error | .//failure"):
+ # Sharded tests have target names like this:
+ # WindowOpsTest.test_tflite_convert0 (<function hann_window at
+ # 0x7fc61728dd40>, 10, False, tf.float32)
+ # Where 0x... is a thread ID (or something) that is not important for
+ # debugging, but breaks this "number of failures" counter because it's
+ # different for repetitions of the same test. We use re.sub(r"0x\w+")
+ # to remove it.
+ key = re.sub(r"0x\w+", "", p.getparent().get("name", "")) + p.text
+ if key in seen:
+ testsuite._elem.remove(p.getparent())
+ seen[key] += 1
+ # Remove this testsuite if it doesn't have anything in it any more
+ if len(testsuite) == 0: # pylint: disable=g-explicit-length-test
+ r._elem.remove(testsuite._elem)
+ if len(r) > 0: # pylint: disable=g-explicit-length-test
+ result += r
+
+# Insert the number of failures for each test to help identify flakes
+# need to clarify for shard
+for p in result._elem.xpath(".//error | .//failure"):
+ key = re.sub(r"0x\w+", "", p.getparent().get("name", "")) + p.text
+ p.text = runfiles_matcher.sub("[testroot]/", p.text)
+ source_file = p.getparent().getparent().get("source_file", "")
+ p.text += f"\nNOTE: From {source_file}"
+ if "bazel_pip" in source_file:
+ p.text += ("\nNOTE: This is a --config=pip test. Remove 'bazel_pip' to find"
+ " the file.")
+ n_failures = seen[key]
+ p.text += f"\nNOTE: Number of failures for this test: {seen[key]}."
+ p.text += "\n Most TF jobs run tests three times to root out flakes."
+ if seen[key] == 3:
+ p.text += ("\n Since there were three failures, this is not flaky, and"
+ " it")
+ p.text += "\n probably caused the Kokoro invocation to fail."
+ else:
+ p.text += ("\n Since there were not three failures, this is probably a"
+ " flake.")
+ p.text += ("\n Flakes make this pkg/pip_and_nonpip_tests target show "
+ "as failing,")
+ p.text += "\n but do not make the Kokoro invocation fail."
+
+os.makedirs(os.path.dirname(sys.argv[2]), exist_ok=True)
+result.update_statistics()
+result.write(sys.argv[2])
diff --git a/tensorflow-arm64-build/devel.usertools/test.requirements.txt b/tensorflow-arm64-build/devel.usertools/test.requirements.txt
new file mode 100644
index 00000000..b7343979
--- /dev/null
+++ b/tensorflow-arm64-build/devel.usertools/test.requirements.txt
@@ -0,0 +1,6 @@
+# Test dependencies for pip tests
+grpcio ~= 1.42.0
+portpicker ~= 1.5.2
+scipy ~= 1.7.3
+jax ~= 0.2.26
+jaxlib ~= 0.1.75
diff --git a/tensorflow-arm64-build/devel.usertools/wheel_verification.bats b/tensorflow-arm64-build/devel.usertools/wheel_verification.bats
new file mode 100644
index 00000000..3f83d9a5
--- /dev/null
+++ b/tensorflow-arm64-build/devel.usertools/wheel_verification.bats
@@ -0,0 +1,73 @@
+# Copyright 2022 The TensorFlow Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ==============================================================================
+# Suite of verification tests for the SINGLE TensorFlow wheel in /tf/pkg
+# or whatever path is set as $TF_WHEEL.
+
+setup_file() {
+ cd /tf/pkg
+ if [[ -z "$TF_WHEEL" ]]; then
+ export TF_WHEEL=$(find /tf/pkg -iname "*.whl")
+ fi
+}
+
+teardown_file() {
+ rm -rf /tf/venv
+}
+
+@test "Wheel is manylinux2014 (manylinux_2_17) compliant" {
+ python3 -m auditwheel show "$TF_WHEEL" > audit.txt
+ grep --quiet -zoP 'is consistent with the following platform tag:\n"manylinux_2_17_(aarch|x86_)64"\.' audit.txt
+}
+
+@test "Wheel conforms to upstream size limitations" {
+ WHEEL_MEGABYTES=$(stat --format %s "$TF_WHEEL" | awk '{print int($1/(1024*1024))}')
+ # Googlers: search for "test_tf_whl_size"
+ case "$TF_WHEEL" in
+ # CPU:
+ *cpu*manylinux*) LARGEST_OK_SIZE=220 ;;
+ # GPU:
+ *manylinux*) LARGEST_OK_SIZE=580 ;;
+ # Unknown:
+ *)
+ echo "The wheel's name is in an unknown format."
+ exit 1
+ ;;
+ esac
+ # >&3 forces output in bats even if the test passes. See
+ # https://bats-core.readthedocs.io/en/stable/writing-tests.html#printing-to-the-terminal
+ echo "# Size of $TF_WHEEL is $WHEEL_MEGABYTES / $LARGEST_OK_SIZE megabytes." >&3
+ test "$WHEEL_MEGABYTES" -le "$LARGEST_OK_SIZE"
+}
+
+# Note: this runs before the tests further down the file, so TF is installed in
+# the venv and the venv is active when those tests run. The venv gets cleaned
+# up in teardown_file() above.
+@test "Wheel is installable" {
+ python3 -m venv /tf/venv
+ source /tf/venv/bin/activate
+ python3 -m pip install --upgrade setuptools wheel
+ python3 -m pip install "$TF_WHEEL"
+}
+
+@test "TensorFlow is importable" {
+ source /tf/venv/bin/activate
+ python3 -c 'import tensorflow as tf; t1=tf.constant([1,2,3,4]); t2=tf.constant([5,6,7,8]); print(tf.add(t1,t2).shape)'
+}
+
+# Is this still useful?
+@test "TensorFlow has Keras" {
+ source /tf/venv/bin/activate
+ python3 -c 'import sys; import tensorflow as tf; sys.exit(0 if "keras" in tf.keras.__name__ else 1)'
+}
diff --git a/tensorflow-arm64-build/ld.so.conf b/tensorflow-arm64-build/ld.so.conf
new file mode 100644
index 00000000..a6ca9e09
--- /dev/null
+++ b/tensorflow-arm64-build/ld.so.conf
@@ -0,0 +1 @@
+/lib64
diff --git a/tensorflow-arm64-build/setup.packages.sh b/tensorflow-arm64-build/setup.packages.sh
new file mode 100755
index 00000000..f808cf7d
--- /dev/null
+++ b/tensorflow-arm64-build/setup.packages.sh
@@ -0,0 +1,28 @@
+#!/usr/bin/env bash
+#
+# Copyright 2022 The TensorFlow Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ==============================================================================
+#
+# setup.packages.sh: Given a list of Ubuntu packages, install them and clean up.
+# Usage: setup.packages.sh <package_list.txt>
+set -e
+
+# Prevent apt install tzinfo from asking our location (assumes UTC)
+export DEBIAN_FRONTEND=noninteractive
+
+apt-get update
+# Remove commented lines and blank lines
+apt-get install -y --no-install-recommends $(sed -e '/^\s*#.*$/d' -e '/^\s*$/d' "$1" | sort -u)
+rm -rf /var/lib/apt/lists/*
diff --git a/tensorflow-arm64-build/setup.python.sh b/tensorflow-arm64-build/setup.python.sh
new file mode 100755
index 00000000..735f5931
--- /dev/null
+++ b/tensorflow-arm64-build/setup.python.sh
@@ -0,0 +1,60 @@
+#!/usr/bin/env bash
+#
+# Copyright 2022 The TensorFlow Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ==============================================================================
+#
+# setup.python.sh: Install a specific Python version and packages for it.
+# Usage: setup.python.sh <pyversion> <requirements.txt>
+set -xe
+
+source ~/.bashrc
+VERSION=$1
+REQUIREMENTS=$2
+
+add-apt-repository ppa:deadsnakes/ppa
+# Install Python packages for this container's version
+cat >pythons.txt <<EOF
+$VERSION
+$VERSION-dev
+$VERSION-venv
+$VERSION-distutils
+EOF
+/setup.packages.sh pythons.txt
+
+# Re-link pyconfig.h from aarch64-linux-gnu into the devtoolset directory
+# for any Python version present
+pushd /usr/include/aarch64-linux-gnu
+for f in $(ls | grep python); do
+ # set up symlink for devtoolset-10
+ rm -f /dt10/usr/include/aarch64-linux-gnu/$f
+ ln -s /usr/include/aarch64-linux-gnu/$f /dt10/usr/include/aarch64-linux-gnu/$f
+done
+popd
+
+# Python 3.10 include headers fix:
+# sysconfig.get_path('include') incorrectly points to /usr/local/include/python
+# map /usr/include/python3.10 to /usr/local/include/python3.10
+if [[ ! -f "/usr/local/include/$VERSION" ]]; then
+ ln -sf /usr/include/$VERSION /usr/local/include/$VERSION
+fi
+
+# Install pip
+curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
+/usr/bin/$VERSION get-pip.py
+/usr/bin/$VERSION -m pip install --no-cache-dir --upgrade pip
+/usr/bin/$VERSION -m pip install -U setuptools
+
+# Disable the cache dir to save image space, and install packages
+/usr/bin/$VERSION -m pip install --no-cache-dir -r $REQUIREMENTS -U
diff --git a/tensorflow-arm64-build/setup.sources.sh b/tensorflow-arm64-build/setup.sources.sh
new file mode 100755
index 00000000..ea8dc376
--- /dev/null
+++ b/tensorflow-arm64-build/setup.sources.sh
@@ -0,0 +1,45 @@
+#!/usr/bin/env bash
+#
+# Copyright 2022 The TensorFlow Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ==============================================================================
+#
+# setup.python.sh: Install a specific Python version and packages for it.
+# Usage: setup.python.sh <pyversion> <requirements.txt>
+
+# Sets up custom apt sources for our TF images.
+
+# Prevent apt install tzinfo from asking our location (assumes UTC)
+export DEBIAN_FRONTEND=noninteractive
+
+# Set up shared custom sources
+apt-get update
+apt-get install -y gnupg ca-certificates
+
+# Deadsnakes: https://launchpad.net/~deadsnakes/+archive/ubuntu/ppa
+apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F23C5A6CF475977595C89F51BA6932366A755776
+
+# LLVM/Clang: https://apt.llvm.org/
+apt-key adv --fetch-keys https://apt.llvm.org/llvm-snapshot.gpg.key
+
+# Set up custom sources
+cat >/etc/apt/sources.list.d/custom.list <<SOURCES
+# More Python versions: Deadsnakes
+deb http://ppa.launchpad.net/deadsnakes/ppa/ubuntu focal main
+deb-src http://ppa.launchpad.net/deadsnakes/ppa/ubuntu focal main
+
+# LLVM/Clang 17 repository
+deb http://apt.llvm.org/focal/ llvm-toolchain-focal-17 main
+deb-src http://apt.llvm.org/focal/ llvm-toolchain-focal-17 main
+SOURCES
diff --git a/trusty-amd64-tcwg-base/Dockerfile b/trusty-amd64-tcwg-base/Dockerfile
deleted file mode 100644
index 989b01b4..00000000
--- a/trusty-amd64-tcwg-base/Dockerfile
+++ /dev/null
@@ -1,130 +0,0 @@
-# Auto generated from tcwg-base/Dockerfile.in. Do not edit.
-FROM ubuntu:trusty
-
-RUN (url="http://archive.ubuntu.com/ubuntu/"; \
- ubuntu=trusty; \
- for i in $ubuntu $ubuntu-updates $ubuntu-backports $ubuntu-security; do \
- for j in deb deb-src; do \
- echo "$j $url $i main restricted universe multiverse"; \
- done; \
- echo; \
- done) > /etc/apt/sources.list \
- && dpkg --add-architecture i386 \
- && apt-get update \
- && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y devscripts \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
- alien \
- autoconf \
- autogen \
- automake \
- bc \
- bison \
- binutils-aarch64-linux-gnu \
- binutils-arm-linux-gnueabihf \
- bsd-mailx \
- build-essential \
- byacc \
- ccache \
- ccrypt \
- chrpath \
- clang \
- cmake \
- debhelper \
- dejagnu \
- dh-autoreconf \
- dh-translations \
- distro-info-data \
- emacs \
- fakeroot \
- flex \
- g++-multilib \
- gawk \
- gdb \
- gdbserver \
- git \
- git-review \
- groff \
- less \
- libexpat1-dev \
- libglib2.0-dev \
- liblzma-dev \
- libncurses5-dev \
- libpython2.7-dev \
- libreadline-dev \
- libssl-dev \
- libtcnative-1 \
- libtool \
- linux-tools-generic \
- lzop \
- make \
- mingw-w64 \
- mingw32 \
- net-tools \
- netcat \
- nfs-kernel-server \
- ninja-build \
- openjdk-7-jdk \
- openssh-server \
- pkg-config \
- python-dev \
- python-virtualenv \
- postfix \
- pxz \
- qemu-system-arm \
- qemu-user \
- rsync \
- subversion \
- sudo \
- tclsh \
- texinfo \
- texlive-fonts-recommended \
- texlive-latex-recommended \
- time \
- valgrind \
- vim \
- wget \
- wine \
- xz-utils \
- zip \
- zlib1g-dev \
- && apt-get clean \
- && rm -rf \
- /var/lib/apt/lists/* \
- /tmp/* \
- /var/tmp/*
-
-RUN install -D -p -m0755 /usr/share/doc/git/contrib/workdir/git-new-workdir /usr/local/bin/git-new-workdir \
- && sed -i -e 's:^session *required *pam_loginuid.so:# session required pam_loginuid.so:' /etc/pam.d/sshd \
- && mkdir -p /var/run/sshd \
- && sed -i \
- -e "/.*MaxStartups.*/d" \
- -e "/.*MaxSesssions.*/d" /etc/ssh/sshd_config \
- && echo "MaxStartups 256" >> /etc/ssh/sshd_config \
- && echo "MaxSessions 256" >> /etc/ssh/sshd_config
-
-COPY postfix-main.cf.in /etc/postfix/main.cf
-COPY postfix-sasl_password.in /etc/postfix/sasl_password
-
-RUN chown root:root /etc/postfix/sasl_password \
- && chmod 600 /etc/postfix/sasl_password
-
-RUN mkdir /tmp/docker-install-qemu.$$ \
- && cd /tmp/docker-install-qemu.$$ \
- && qemu_ver=2.8.0 && wget --progress=dot:giga http://download.qemu-project.org/qemu-${qemu_ver}.tar.xz \
- && tar xf qemu-${qemu_ver}.tar.xz \
- && mkdir build && cd build \
- && ../qemu-${qemu_ver}/configure --prefix=/usr/local --target-list=armeb-linux-user \
- && make all install -j $(nproc --all) \
- && cd && rm -rf /tmp/docker-install-qemu.$$
-
-# We use ssh multiplexing, which creates sockets in /tmp. Overlayfs,
-# which docker is using, can't host sockets, so we use a scratch mount
-# for /tmp. This requires that we add --rm option to "docker run"
-# invocations (e.g., mark "Remove volumes" checkbox in docker plugin) to
-# cleanup host directories used for the scratch mounts.
-VOLUME /tmp
-
-EXPOSE 22
-CMD ["/usr/sbin/sshd", "-D"]
-# checksum: 6cf2d3a7a502cfb1f51aaba92249556e
diff --git a/trusty-amd64-tcwg-base/gerrit-branches b/trusty-amd64-tcwg-base/gerrit-branches
deleted file mode 120000
index 3cbaca1d..00000000
--- a/trusty-amd64-tcwg-base/gerrit-branches
+++ /dev/null
@@ -1 +0,0 @@
-../tcwg-base/gerrit-branches \ No newline at end of file
diff --git a/trusty-amd64-tcwg-base/trusty-amd64-tcwg-build/Dockerfile b/trusty-amd64-tcwg-base/trusty-amd64-tcwg-build/Dockerfile
deleted file mode 100644
index 38ea264b..00000000
--- a/trusty-amd64-tcwg-base/trusty-amd64-tcwg-build/Dockerfile
+++ /dev/null
@@ -1,18 +0,0 @@
-# Auto generated from tcwg-base/tcwg-build/Dockerfile.in. Do not edit.
-FROM linaro/ci-amd64-tcwg-base-ubuntu:trusty
-
-RUN groupadd -g 9000 tcwg-infra \
- && useradd -m -g tcwg-infra -G kvm -u 11827 tcwg-buildslave \
- && useradd -m -g tcwg-infra -G kvm -u 12326 tcwg-benchmark \
- && echo '%tcwg-infra ALL = NOPASSWD: ALL' > /etc/sudoers.d/jenkins \
- && chmod 0440 /etc/sudoers.d/jenkins \
- && mkdir -p /home/tcwg-buildslave/workspace
-
-COPY tcwg-buildslave /home/tcwg-buildslave
-COPY tcwg-benchmark /home/tcwg-benchmark
-
-RUN chown -R tcwg-buildslave:tcwg-infra /home/tcwg-buildslave/ \
- && chown -R tcwg-benchmark:tcwg-infra /home/tcwg-benchmark/ \
- && chmod 0700 /home/tcwg-buildslave/.ssh/ /home/tcwg-benchmark/.ssh/ \
- && chmod 0600 /home/tcwg-buildslave/.ssh/* /home/tcwg-benchmark/.ssh/*
-# checksum: 9ce6e312f075378dc2980f5a8431ac7a
diff --git a/trusty-amd64-tcwg-base/trusty-amd64-tcwg-build/gerrit-branches b/trusty-amd64-tcwg-base/trusty-amd64-tcwg-build/gerrit-branches
deleted file mode 120000
index 628350a5..00000000
--- a/trusty-amd64-tcwg-base/trusty-amd64-tcwg-build/gerrit-branches
+++ /dev/null
@@ -1 +0,0 @@
-../../tcwg-base/tcwg-build/gerrit-branches \ No newline at end of file
diff --git a/trusty-amd64-tcwg-base/trusty-amd64-tcwg-dev/Dockerfile b/trusty-amd64-tcwg-base/trusty-amd64-tcwg-dev/Dockerfile
deleted file mode 100644
index 2294e57b..00000000
--- a/trusty-amd64-tcwg-base/trusty-amd64-tcwg-dev/Dockerfile
+++ /dev/null
@@ -1,49 +0,0 @@
-# Auto generated from tcwg-base/tcwg-dev/Dockerfile.in. Do not edit.
-FROM linaro/ci-amd64-tcwg-base-ubuntu:trusty
-
-COPY run.sh .
-COPY start.sh .
-
-RUN apt-get update \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y \
- software-properties-common \
- && apt-get clean \
- && rm -rf \
- /var/lib/apt/lists/* \
- /tmp/* \
- /var/tmp/*
-
-RUN apt-get update \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y \
- apt-file \
- git-gui \
- git-svn \
- gnat \
- less \
- locales \
- libgmp-dev \
- libmpc-dev \
- libmpfr-dev \
- mc \
- screen \
- stgit \
- tmux \
- unifdef \
- && apt-get clean \
- && rm -rf \
- /var/lib/apt/lists/* \
- /tmp/* \
- /var/tmp/*
-
-RUN sed -i -e '/.*AuthorizedKeysFile/ d' /etc/ssh/sshd_config \
- && echo "AuthorizedKeysFile %h/.ssh/authorized_keys.docker" >> /etc/ssh/sshd_config \
- && locale-gen en_US.UTF-8 && update-locale LANG=en_US.UTF-8 \
- && apt-file update
-
-# Create directories required for X11.
-RUN mkdir -p /tmp/.X11-unix /tmp/.ICE-unix \
- && chmod 1777 /tmp/.X11-unix /tmp/.ICE-unix
-
-ENTRYPOINT ["/run.sh"]
-CMD ["start.sh"]
-# checksum: 6ebcfe89f577b9b89996da9aace4394f
diff --git a/trusty-amd64-tcwg-base/trusty-amd64-tcwg-dev/gerrit-branches b/trusty-amd64-tcwg-base/trusty-amd64-tcwg-dev/gerrit-branches
deleted file mode 120000
index cd148228..00000000
--- a/trusty-amd64-tcwg-base/trusty-amd64-tcwg-dev/gerrit-branches
+++ /dev/null
@@ -1 +0,0 @@
-../../tcwg-base/tcwg-dev/gerrit-branches \ No newline at end of file
diff --git a/trusty-arm64-tcwg-base/Dockerfile b/trusty-arm64-tcwg-base/Dockerfile
deleted file mode 100644
index a7dea549..00000000
--- a/trusty-arm64-tcwg-base/Dockerfile
+++ /dev/null
@@ -1,111 +0,0 @@
-# Auto generated from tcwg-base/Dockerfile.in. Do not edit.
-FROM linaro/base-arm64-ubuntu:trusty
-
-RUN (url="http://ports.ubuntu.com/ubuntu-ports/"; \
- ubuntu=trusty; \
- for i in $ubuntu $ubuntu-updates $ubuntu-backports $ubuntu-security; do \
- for j in deb deb-src; do \
- echo "$j $url $i main restricted universe multiverse"; \
- done; \
- echo; \
- done) > /etc/apt/sources.list \
- && apt-get update \
- && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y devscripts \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
- alien \
- autoconf \
- autogen \
- automake \
- bc \
- bison \
- bsd-mailx \
- build-essential \
- byacc \
- ccache \
- ccrypt \
- chrpath \
- clang \
- cmake \
- debhelper \
- dejagnu \
- dh-autoreconf \
- dh-translations \
- distro-info-data \
- emacs \
- fakeroot \
- flex \
- gawk \
- gdb \
- gdbserver \
- git \
- git-review \
- groff \
- less \
- libexpat1-dev \
- liblzma-dev \
- libncurses5-dev \
- libpython2.7-dev \
- libreadline-dev \
- libssl-dev \
- libtcnative-1 \
- libtool \
- linux-tools-generic \
- lzop \
- make \
- net-tools \
- netcat \
- ninja-build \
- openjdk-7-jdk \
- openssh-server \
- python-dev \
- python-virtualenv \
- postfix \
- pxz \
- qemu-system-arm \
- qemu-user \
- rsync \
- subversion \
- sudo \
- tclsh \
- texinfo \
- texlive-fonts-recommended \
- texlive-latex-recommended \
- time \
- valgrind \
- vim \
- wget \
- xz-utils \
- zip \
- zlib1g-dev \
- && apt-get clean \
- && rm -rf \
- /var/lib/apt/lists/* \
- /tmp/* \
- /var/tmp/*
-
-RUN install -D -p -m0755 /usr/share/doc/git/contrib/workdir/git-new-workdir /usr/local/bin/git-new-workdir \
- && sed -i -e 's:^session *required *pam_loginuid.so:# session required pam_loginuid.so:' /etc/pam.d/sshd \
- && mkdir -p /var/run/sshd \
- && sed -i \
- -e "/.*MaxStartups.*/d" \
- -e "/.*MaxSesssions.*/d" /etc/ssh/sshd_config \
- && echo "MaxStartups 256" >> /etc/ssh/sshd_config \
- && echo "MaxSessions 256" >> /etc/ssh/sshd_config
-
-COPY postfix-main.cf.in /etc/postfix/main.cf
-COPY postfix-sasl_password.in /etc/postfix/sasl_password
-
-RUN chown root:root /etc/postfix/sasl_password \
- && chmod 600 /etc/postfix/sasl_password
-
-# We use ssh multiplexing, which creates sockets in /tmp. Overlayfs,
-# which docker is using, can't host sockets, so we use a scratch mount
-# for /tmp. This requires that we add --rm option to "docker run"
-# invocations (e.g., mark "Remove volumes" checkbox in docker plugin) to
-# cleanup host directories used for the scratch mounts.
-VOLUME /tmp
-
-EXPOSE 22
-CMD ["/usr/sbin/sshd", "-D"]
-# checksum: c0eca062aa8000976bdccdb2438e4bad
diff --git a/trusty-arm64-tcwg-base/gerrit-branches b/trusty-arm64-tcwg-base/gerrit-branches
deleted file mode 120000
index 3cbaca1d..00000000
--- a/trusty-arm64-tcwg-base/gerrit-branches
+++ /dev/null
@@ -1 +0,0 @@
-../tcwg-base/gerrit-branches \ No newline at end of file
diff --git a/trusty-arm64-tcwg-base/trusty-arm64-tcwg-build/Dockerfile b/trusty-arm64-tcwg-base/trusty-arm64-tcwg-build/Dockerfile
deleted file mode 100644
index 0f672b1b..00000000
--- a/trusty-arm64-tcwg-base/trusty-arm64-tcwg-build/Dockerfile
+++ /dev/null
@@ -1,18 +0,0 @@
-# Auto generated from tcwg-base/tcwg-build/Dockerfile.in. Do not edit.
-FROM linaro/ci-arm64-tcwg-base-ubuntu:trusty
-
-RUN groupadd -g 9000 tcwg-infra \
- && useradd -m -g tcwg-infra -G kvm -u 11827 tcwg-buildslave \
- && useradd -m -g tcwg-infra -G kvm -u 12326 tcwg-benchmark \
- && echo '%tcwg-infra ALL = NOPASSWD: ALL' > /etc/sudoers.d/jenkins \
- && chmod 0440 /etc/sudoers.d/jenkins \
- && mkdir -p /home/tcwg-buildslave/workspace
-
-COPY tcwg-buildslave /home/tcwg-buildslave
-COPY tcwg-benchmark /home/tcwg-benchmark
-
-RUN chown -R tcwg-buildslave:tcwg-infra /home/tcwg-buildslave/ \
- && chown -R tcwg-benchmark:tcwg-infra /home/tcwg-benchmark/ \
- && chmod 0700 /home/tcwg-buildslave/.ssh/ /home/tcwg-benchmark/.ssh/ \
- && chmod 0600 /home/tcwg-buildslave/.ssh/* /home/tcwg-benchmark/.ssh/*
-# checksum: 5de8c4d4fdc7b8b350210c347928cfee
diff --git a/trusty-arm64-tcwg-base/trusty-arm64-tcwg-build/gerrit-branches b/trusty-arm64-tcwg-base/trusty-arm64-tcwg-build/gerrit-branches
deleted file mode 120000
index 628350a5..00000000
--- a/trusty-arm64-tcwg-base/trusty-arm64-tcwg-build/gerrit-branches
+++ /dev/null
@@ -1 +0,0 @@
-../../tcwg-base/tcwg-build/gerrit-branches \ No newline at end of file
diff --git a/trusty-arm64-tcwg-base/trusty-arm64-tcwg-build/trusty-arm64-tcwg-test/Dockerfile b/trusty-arm64-tcwg-base/trusty-arm64-tcwg-build/trusty-arm64-tcwg-test/Dockerfile
deleted file mode 100644
index 55869b62..00000000
--- a/trusty-arm64-tcwg-base/trusty-arm64-tcwg-build/trusty-arm64-tcwg-test/Dockerfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# Auto generated from tcwg-base/tcwg-build/tcwg-test/Dockerfile.in. Do not edit.
-FROM linaro/ci-arm64-tcwg-build-ubuntu:trusty
-
-COPY tcwg-buildslave/.ssh /root/.ssh
-
-RUN chmod 0700 /root/.ssh/ \
- && sed -i -e "/.*PermitRootLogin.*/d" /etc/ssh/sshd_config \
- && echo "PermitRootLogin without-password" >> /etc/ssh/sshd_config
-# checksum: dc8c825d9bfcc23ca4d58280831726a6
diff --git a/trusty-arm64-tcwg-base/trusty-arm64-tcwg-build/trusty-arm64-tcwg-test/build.sh b/trusty-arm64-tcwg-base/trusty-arm64-tcwg-build/trusty-arm64-tcwg-test/build.sh
deleted file mode 120000
index 44bceb16..00000000
--- a/trusty-arm64-tcwg-base/trusty-arm64-tcwg-build/trusty-arm64-tcwg-test/build.sh
+++ /dev/null
@@ -1 +0,0 @@
-../../../tcwg-base/tcwg-build/tcwg-test/build.sh \ No newline at end of file
diff --git a/trusty-arm64-tcwg-base/trusty-arm64-tcwg-build/trusty-arm64-tcwg-test/gerrit-branches b/trusty-arm64-tcwg-base/trusty-arm64-tcwg-build/trusty-arm64-tcwg-test/gerrit-branches
deleted file mode 120000
index 4bcb423c..00000000
--- a/trusty-arm64-tcwg-base/trusty-arm64-tcwg-build/trusty-arm64-tcwg-test/gerrit-branches
+++ /dev/null
@@ -1 +0,0 @@
-../../../tcwg-base/tcwg-build/tcwg-test/gerrit-branches \ No newline at end of file
diff --git a/trusty-arm64-tcwg-base/trusty-arm64-tcwg-dev/Dockerfile b/trusty-arm64-tcwg-base/trusty-arm64-tcwg-dev/Dockerfile
deleted file mode 100644
index 1f2e2d0d..00000000
--- a/trusty-arm64-tcwg-base/trusty-arm64-tcwg-dev/Dockerfile
+++ /dev/null
@@ -1,48 +0,0 @@
-# Auto generated from tcwg-base/tcwg-dev/Dockerfile.in. Do not edit.
-FROM linaro/ci-arm64-tcwg-base-ubuntu:trusty
-
-COPY run.sh .
-COPY start.sh .
-
-RUN apt-get update \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y \
- software-properties-common \
- && apt-get clean \
- && rm -rf \
- /var/lib/apt/lists/* \
- /tmp/* \
- /var/tmp/*
-
-RUN apt-get update \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y \
- apt-file \
- git-gui \
- git-svn \
- less \
- locales \
- libgmp-dev \
- libmpc-dev \
- libmpfr-dev \
- mc \
- screen \
- stgit \
- tmux \
- unifdef \
- && apt-get clean \
- && rm -rf \
- /var/lib/apt/lists/* \
- /tmp/* \
- /var/tmp/*
-
-RUN sed -i -e '/.*AuthorizedKeysFile/ d' /etc/ssh/sshd_config \
- && echo "AuthorizedKeysFile %h/.ssh/authorized_keys.docker" >> /etc/ssh/sshd_config \
- && locale-gen en_US.UTF-8 && update-locale LANG=en_US.UTF-8 \
- && apt-file update
-
-# Create directories required for X11.
-RUN mkdir -p /tmp/.X11-unix /tmp/.ICE-unix \
- && chmod 1777 /tmp/.X11-unix /tmp/.ICE-unix
-
-ENTRYPOINT ["/run.sh"]
-CMD ["start.sh"]
-# checksum: df2f7edfa6eb02b085cac309faf50ad3
diff --git a/trusty-arm64-tcwg-base/trusty-arm64-tcwg-dev/gerrit-branches b/trusty-arm64-tcwg-base/trusty-arm64-tcwg-dev/gerrit-branches
deleted file mode 120000
index cd148228..00000000
--- a/trusty-arm64-tcwg-base/trusty-arm64-tcwg-dev/gerrit-branches
+++ /dev/null
@@ -1 +0,0 @@
-../../tcwg-base/tcwg-dev/gerrit-branches \ No newline at end of file
diff --git a/trusty-armhf-tcwg-base/Dockerfile b/trusty-armhf-tcwg-base/Dockerfile
deleted file mode 100644
index e2761feb..00000000
--- a/trusty-armhf-tcwg-base/Dockerfile
+++ /dev/null
@@ -1,111 +0,0 @@
-# Auto generated from tcwg-base/Dockerfile.in. Do not edit.
-FROM linaro/base-armhf-ubuntu:trusty
-
-RUN (url="http://ports.ubuntu.com/ubuntu-ports/"; \
- ubuntu=trusty; \
- for i in $ubuntu $ubuntu-updates $ubuntu-backports $ubuntu-security; do \
- for j in deb deb-src; do \
- echo "$j $url $i main restricted universe multiverse"; \
- done; \
- echo; \
- done) > /etc/apt/sources.list \
- && apt-get update \
- && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y devscripts \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
- alien \
- autoconf \
- autogen \
- automake \
- bc \
- bison \
- bsd-mailx \
- build-essential \
- byacc \
- ccache \
- ccrypt \
- chrpath \
- clang \
- cmake \
- debhelper \
- dejagnu \
- dh-autoreconf \
- dh-translations \
- distro-info-data \
- emacs \
- fakeroot \
- flex \
- gawk \
- gdb \
- gdbserver \
- git \
- git-review \
- groff \
- less \
- libexpat1-dev \
- liblzma-dev \
- libncurses5-dev \
- libpython2.7-dev \
- libreadline-dev \
- libssl-dev \
- libtcnative-1 \
- libtool \
- linux-tools-generic \
- lzop \
- make \
- net-tools \
- netcat \
- ninja-build \
- openjdk-7-jdk \
- openssh-server \
- python-dev \
- python-virtualenv \
- postfix \
- pxz \
- qemu-system-arm \
- qemu-user \
- rsync \
- subversion \
- sudo \
- tclsh \
- texinfo \
- texlive-fonts-recommended \
- texlive-latex-recommended \
- time \
- valgrind \
- vim \
- wget \
- xz-utils \
- zip \
- zlib1g-dev \
- && apt-get clean \
- && rm -rf \
- /var/lib/apt/lists/* \
- /tmp/* \
- /var/tmp/*
-
-RUN install -D -p -m0755 /usr/share/doc/git/contrib/workdir/git-new-workdir /usr/local/bin/git-new-workdir \
- && sed -i -e 's:^session *required *pam_loginuid.so:# session required pam_loginuid.so:' /etc/pam.d/sshd \
- && mkdir -p /var/run/sshd \
- && sed -i \
- -e "/.*MaxStartups.*/d" \
- -e "/.*MaxSesssions.*/d" /etc/ssh/sshd_config \
- && echo "MaxStartups 256" >> /etc/ssh/sshd_config \
- && echo "MaxSessions 256" >> /etc/ssh/sshd_config
-
-COPY postfix-main.cf.in /etc/postfix/main.cf
-COPY postfix-sasl_password.in /etc/postfix/sasl_password
-
-RUN chown root:root /etc/postfix/sasl_password \
- && chmod 600 /etc/postfix/sasl_password
-
-# We use ssh multiplexing, which creates sockets in /tmp. Overlayfs,
-# which docker is using, can't host sockets, so we use a scratch mount
-# for /tmp. This requires that we add --rm option to "docker run"
-# invocations (e.g., mark "Remove volumes" checkbox in docker plugin) to
-# cleanup host directories used for the scratch mounts.
-VOLUME /tmp
-
-EXPOSE 22
-CMD ["linux32", "/usr/sbin/sshd", "-D"]
-# checksum: 37d0f23df417dc59345e85c618fc4437
diff --git a/trusty-armhf-tcwg-base/gerrit-branches b/trusty-armhf-tcwg-base/gerrit-branches
deleted file mode 120000
index 3cbaca1d..00000000
--- a/trusty-armhf-tcwg-base/gerrit-branches
+++ /dev/null
@@ -1 +0,0 @@
-../tcwg-base/gerrit-branches \ No newline at end of file
diff --git a/trusty-armhf-tcwg-base/trusty-armhf-tcwg-build/Dockerfile b/trusty-armhf-tcwg-base/trusty-armhf-tcwg-build/Dockerfile
deleted file mode 100644
index 1c9e64dc..00000000
--- a/trusty-armhf-tcwg-base/trusty-armhf-tcwg-build/Dockerfile
+++ /dev/null
@@ -1,18 +0,0 @@
-# Auto generated from tcwg-base/tcwg-build/Dockerfile.in. Do not edit.
-FROM linaro/ci-armhf-tcwg-base-ubuntu:trusty
-
-RUN groupadd -g 9000 tcwg-infra \
- && useradd -m -g tcwg-infra -G kvm -u 11827 tcwg-buildslave \
- && useradd -m -g tcwg-infra -G kvm -u 12326 tcwg-benchmark \
- && echo '%tcwg-infra ALL = NOPASSWD: ALL' > /etc/sudoers.d/jenkins \
- && chmod 0440 /etc/sudoers.d/jenkins \
- && mkdir -p /home/tcwg-buildslave/workspace
-
-COPY tcwg-buildslave /home/tcwg-buildslave
-COPY tcwg-benchmark /home/tcwg-benchmark
-
-RUN chown -R tcwg-buildslave:tcwg-infra /home/tcwg-buildslave/ \
- && chown -R tcwg-benchmark:tcwg-infra /home/tcwg-benchmark/ \
- && chmod 0700 /home/tcwg-buildslave/.ssh/ /home/tcwg-benchmark/.ssh/ \
- && chmod 0600 /home/tcwg-buildslave/.ssh/* /home/tcwg-benchmark/.ssh/*
-# checksum: e601ad462d4a4a23f9e950d78de0aa5d
diff --git a/trusty-armhf-tcwg-base/trusty-armhf-tcwg-build/gerrit-branches b/trusty-armhf-tcwg-base/trusty-armhf-tcwg-build/gerrit-branches
deleted file mode 120000
index 628350a5..00000000
--- a/trusty-armhf-tcwg-base/trusty-armhf-tcwg-build/gerrit-branches
+++ /dev/null
@@ -1 +0,0 @@
-../../tcwg-base/tcwg-build/gerrit-branches \ No newline at end of file
diff --git a/trusty-armhf-tcwg-base/trusty-armhf-tcwg-build/trusty-armhf-tcwg-test/Dockerfile b/trusty-armhf-tcwg-base/trusty-armhf-tcwg-build/trusty-armhf-tcwg-test/Dockerfile
deleted file mode 100644
index 15ea46ce..00000000
--- a/trusty-armhf-tcwg-base/trusty-armhf-tcwg-build/trusty-armhf-tcwg-test/Dockerfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# Auto generated from tcwg-base/tcwg-build/tcwg-test/Dockerfile.in. Do not edit.
-FROM linaro/ci-armhf-tcwg-build-ubuntu:trusty
-
-COPY tcwg-buildslave/.ssh /root/.ssh
-
-RUN chmod 0700 /root/.ssh/ \
- && sed -i -e "/.*PermitRootLogin.*/d" /etc/ssh/sshd_config \
- && echo "PermitRootLogin without-password" >> /etc/ssh/sshd_config
-# checksum: 9583d23d885b59e3b3a3f2e6b3e44c38
diff --git a/trusty-armhf-tcwg-base/trusty-armhf-tcwg-build/trusty-armhf-tcwg-test/build.sh b/trusty-armhf-tcwg-base/trusty-armhf-tcwg-build/trusty-armhf-tcwg-test/build.sh
deleted file mode 120000
index 44bceb16..00000000
--- a/trusty-armhf-tcwg-base/trusty-armhf-tcwg-build/trusty-armhf-tcwg-test/build.sh
+++ /dev/null
@@ -1 +0,0 @@
-../../../tcwg-base/tcwg-build/tcwg-test/build.sh \ No newline at end of file
diff --git a/trusty-armhf-tcwg-base/trusty-armhf-tcwg-build/trusty-armhf-tcwg-test/gerrit-branches b/trusty-armhf-tcwg-base/trusty-armhf-tcwg-build/trusty-armhf-tcwg-test/gerrit-branches
deleted file mode 120000
index 4bcb423c..00000000
--- a/trusty-armhf-tcwg-base/trusty-armhf-tcwg-build/trusty-armhf-tcwg-test/gerrit-branches
+++ /dev/null
@@ -1 +0,0 @@
-../../../tcwg-base/tcwg-build/tcwg-test/gerrit-branches \ No newline at end of file
diff --git a/trusty-armhf-tcwg-base/trusty-armhf-tcwg-dev/Dockerfile b/trusty-armhf-tcwg-base/trusty-armhf-tcwg-dev/Dockerfile
deleted file mode 100644
index 6f5af073..00000000
--- a/trusty-armhf-tcwg-base/trusty-armhf-tcwg-dev/Dockerfile
+++ /dev/null
@@ -1,49 +0,0 @@
-# Auto generated from tcwg-base/tcwg-dev/Dockerfile.in. Do not edit.
-FROM linaro/ci-armhf-tcwg-base-ubuntu:trusty
-
-COPY run.sh .
-COPY start.sh .
-
-RUN apt-get update \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y \
- software-properties-common \
- && apt-get clean \
- && rm -rf \
- /var/lib/apt/lists/* \
- /tmp/* \
- /var/tmp/*
-
-RUN apt-get update \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y \
- apt-file \
- git-gui \
- git-svn \
- gnat \
- less \
- locales \
- libgmp-dev \
- libmpc-dev \
- libmpfr-dev \
- mc \
- screen \
- stgit \
- tmux \
- unifdef \
- && apt-get clean \
- && rm -rf \
- /var/lib/apt/lists/* \
- /tmp/* \
- /var/tmp/*
-
-RUN sed -i -e '/.*AuthorizedKeysFile/ d' /etc/ssh/sshd_config \
- && echo "AuthorizedKeysFile %h/.ssh/authorized_keys.docker" >> /etc/ssh/sshd_config \
- && locale-gen en_US.UTF-8 && update-locale LANG=en_US.UTF-8 \
- && apt-file update
-
-# Create directories required for X11.
-RUN mkdir -p /tmp/.X11-unix /tmp/.ICE-unix \
- && chmod 1777 /tmp/.X11-unix /tmp/.ICE-unix
-
-ENTRYPOINT ["linux32", "/run.sh"]
-CMD ["start.sh"]
-# checksum: 3ebcf08c631348a6ee99ee7b0a574c23
diff --git a/trusty-armhf-tcwg-base/trusty-armhf-tcwg-dev/gerrit-branches b/trusty-armhf-tcwg-base/trusty-armhf-tcwg-dev/gerrit-branches
deleted file mode 120000
index cd148228..00000000
--- a/trusty-armhf-tcwg-base/trusty-armhf-tcwg-dev/gerrit-branches
+++ /dev/null
@@ -1 +0,0 @@
-../../tcwg-base/tcwg-dev/gerrit-branches \ No newline at end of file
diff --git a/trusty-i386-tcwg-base/Dockerfile b/trusty-i386-tcwg-base/Dockerfile
deleted file mode 100644
index 7b626ff3..00000000
--- a/trusty-i386-tcwg-base/Dockerfile
+++ /dev/null
@@ -1,130 +0,0 @@
-# Auto generated from tcwg-base/Dockerfile.in. Do not edit.
-FROM linaro/base-i386-ubuntu:trusty
-
-RUN (url="http://archive.ubuntu.com/ubuntu/"; \
- ubuntu=trusty; \
- for i in $ubuntu $ubuntu-updates $ubuntu-backports $ubuntu-security; do \
- for j in deb deb-src; do \
- echo "$j $url $i main restricted universe multiverse"; \
- done; \
- echo; \
- done) > /etc/apt/sources.list \
- && apt-get update \
- && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y \
- && dpkg-divert --local --rename --add /sbin/initctl \
- && ln -s /bin/true /sbin/initctl \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y devscripts \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
- alien \
- autoconf \
- autogen \
- automake \
- bc \
- bison \
- binutils-aarch64-linux-gnu \
- binutils-arm-linux-gnueabihf \
- bsd-mailx \
- build-essential \
- byacc \
- ccache \
- ccrypt \
- chrpath \
- clang \
- cmake \
- debhelper \
- dejagnu \
- dh-autoreconf \
- dh-translations \
- distro-info-data \
- emacs \
- fakeroot \
- flex \
- g++-multilib \
- gawk \
- gdb \
- gdbserver \
- git \
- git-review \
- groff \
- less \
- libexpat1-dev \
- libglib2.0-dev \
- liblzma-dev \
- libncurses5-dev \
- libpython2.7-dev \
- libreadline-dev \
- libssl-dev \
- libtcnative-1 \
- libtool \
- linux-tools-generic \
- lzop \
- make \
- mingw-w64 \
- mingw32 \
- net-tools \
- netcat \
- ninja-build \
- openjdk-7-jdk \
- openssh-server \
- pkg-config \
- python-dev \
- python-virtualenv \
- postfix \
- pxz \
- qemu-system-arm \
- qemu-user \
- rsync \
- subversion \
- sudo \
- tclsh \
- texinfo \
- texlive-fonts-recommended \
- texlive-latex-recommended \
- time \
- valgrind \
- vim \
- wget \
- wine \
- xz-utils \
- zip \
- zlib1g-dev \
- && apt-get clean \
- && rm -rf \
- /var/lib/apt/lists/* \
- /tmp/* \
- /var/tmp/*
-
-RUN install -D -p -m0755 /usr/share/doc/git/contrib/workdir/git-new-workdir /usr/local/bin/git-new-workdir \
- && sed -i -e 's:^session *required *pam_loginuid.so:# session required pam_loginuid.so:' /etc/pam.d/sshd \
- && mkdir -p /var/run/sshd \
- && sed -i \
- -e "/.*MaxStartups.*/d" \
- -e "/.*MaxSesssions.*/d" /etc/ssh/sshd_config \
- && echo "MaxStartups 256" >> /etc/ssh/sshd_config \
- && echo "MaxSessions 256" >> /etc/ssh/sshd_config
-
-COPY postfix-main.cf.in /etc/postfix/main.cf
-COPY postfix-sasl_password.in /etc/postfix/sasl_password
-
-RUN chown root:root /etc/postfix/sasl_password \
- && chmod 600 /etc/postfix/sasl_password
-
-RUN mkdir /tmp/docker-install-qemu.$$ \
- && cd /tmp/docker-install-qemu.$$ \
- && qemu_ver=2.8.0 && wget --progress=dot:giga http://download.qemu-project.org/qemu-${qemu_ver}.tar.xz \
- && tar xf qemu-${qemu_ver}.tar.xz \
- && mkdir build && cd build \
- && ../qemu-${qemu_ver}/configure --prefix=/usr/local --target-list=armeb-linux-user \
- && make all install -j $(nproc --all) \
- && cd && rm -rf /tmp/docker-install-qemu.$$
-
-# We use ssh multiplexing, which creates sockets in /tmp. Overlayfs,
-# which docker is using, can't host sockets, so we use a scratch mount
-# for /tmp. This requires that we add --rm option to "docker run"
-# invocations (e.g., mark "Remove volumes" checkbox in docker plugin) to
-# cleanup host directories used for the scratch mounts.
-VOLUME /tmp
-
-EXPOSE 22
-CMD ["linux32", "/usr/sbin/sshd", "-D"]
-# checksum: bfa366e193b3821fca47f1da60c0af0e
diff --git a/trusty-i386-tcwg-base/gerrit-branches b/trusty-i386-tcwg-base/gerrit-branches
deleted file mode 120000
index 3cbaca1d..00000000
--- a/trusty-i386-tcwg-base/gerrit-branches
+++ /dev/null
@@ -1 +0,0 @@
-../tcwg-base/gerrit-branches \ No newline at end of file
diff --git a/trusty-i386-tcwg-base/trusty-i386-tcwg-build/Dockerfile b/trusty-i386-tcwg-base/trusty-i386-tcwg-build/Dockerfile
deleted file mode 100644
index dd271c4c..00000000
--- a/trusty-i386-tcwg-base/trusty-i386-tcwg-build/Dockerfile
+++ /dev/null
@@ -1,18 +0,0 @@
-# Auto generated from tcwg-base/tcwg-build/Dockerfile.in. Do not edit.
-FROM linaro/ci-i386-tcwg-base-ubuntu:trusty
-
-RUN groupadd -g 9000 tcwg-infra \
- && useradd -m -g tcwg-infra -G kvm -u 11827 tcwg-buildslave \
- && useradd -m -g tcwg-infra -G kvm -u 12326 tcwg-benchmark \
- && echo '%tcwg-infra ALL = NOPASSWD: ALL' > /etc/sudoers.d/jenkins \
- && chmod 0440 /etc/sudoers.d/jenkins \
- && mkdir -p /home/tcwg-buildslave/workspace
-
-COPY tcwg-buildslave /home/tcwg-buildslave
-COPY tcwg-benchmark /home/tcwg-benchmark
-
-RUN chown -R tcwg-buildslave:tcwg-infra /home/tcwg-buildslave/ \
- && chown -R tcwg-benchmark:tcwg-infra /home/tcwg-benchmark/ \
- && chmod 0700 /home/tcwg-buildslave/.ssh/ /home/tcwg-benchmark/.ssh/ \
- && chmod 0600 /home/tcwg-buildslave/.ssh/* /home/tcwg-benchmark/.ssh/*
-# checksum: d1a93f00cce488976b44c87865c32888
diff --git a/trusty-i386-tcwg-base/trusty-i386-tcwg-build/gerrit-branches b/trusty-i386-tcwg-base/trusty-i386-tcwg-build/gerrit-branches
deleted file mode 120000
index 628350a5..00000000
--- a/trusty-i386-tcwg-base/trusty-i386-tcwg-build/gerrit-branches
+++ /dev/null
@@ -1 +0,0 @@
-../../tcwg-base/tcwg-build/gerrit-branches \ No newline at end of file
diff --git a/utopic-amd64-art/Dockerfile b/utopic-amd64-art/Dockerfile
index 1e134b03..4048f537 100644
--- a/utopic-amd64-art/Dockerfile
+++ b/utopic-amd64-art/Dockerfile
@@ -36,9 +36,11 @@ RUN dpkg --add-architecture i386 \
openssh-client \
openssh-server \
patch \
+ parallel \
python-mako \
python-networkx \
python-requests \
+ python3-requests \
rsync \
scons \
time \
@@ -50,9 +52,9 @@ RUN dpkg --add-architecture i386 \
&& wget -q \
http://snapshot.debian.org/archive/debian/20160609T104519Z/pool/main/a/acpica-unix/acpica-tools_20160527-1_amd64.deb \
http://de.archive.ubuntu.com/ubuntu/pool/main/m/make-dfsg/make_3.81-8.2ubuntu3_amd64.deb \
- http://mirrors.kernel.org/ubuntu/pool/universe/o/openjdk-8/openjdk-8-jre-headless_8u45-b14-1_amd64.deb \
- http://mirrors.kernel.org/ubuntu/pool/universe/o/openjdk-8/openjdk-8-jre_8u45-b14-1_amd64.deb \
- http://mirrors.kernel.org/ubuntu/pool/universe/o/openjdk-8/openjdk-8-jdk_8u45-b14-1_amd64.deb \
+ http://mirrors.edge.kernel.org/ubuntu/pool/universe/o/openjdk-8/openjdk-8-jre-headless_8u181-b13-1_amd64.deb \
+ http://mirrors.edge.kernel.org/ubuntu/pool/universe/o/openjdk-8/openjdk-8-jre_8u181-b13-1_amd64.deb \
+ http://mirrors.edge.kernel.org/ubuntu/pool/universe/o/openjdk-8/openjdk-8-jdk_8u181-b13-1_amd64.deb \
&& dpkg -i --force-all *.deb \
&& apt-mark hold make \
&& apt-get clean \
diff --git a/utopic-amd64-art/build.sh b/utopic-amd64-art/build.sh
index c4f6cc75..45869147 100755
--- a/utopic-amd64-art/build.sh
+++ b/utopic-amd64-art/build.sh
@@ -16,6 +16,6 @@ ARCHITECTURE=$(basename ${PWD} | cut -f2 -d '-')
cp -a ../setup-sshd .
-image=linaro/ci-${ARCHITECTURE}-art-ubuntu:${DISTRIBUTION}
+image=linaro/jenkins-${ARCHITECTURE}-art-ubuntu:${DISTRIBUTION}
docker build --pull --tag=$image .
echo $image > .docker-tag
diff --git a/xenial-amd64-chromium/Dockerfile b/xenial-amd64-chromium/Dockerfile
deleted file mode 100644
index af250b75..00000000
--- a/xenial-amd64-chromium/Dockerfile
+++ /dev/null
@@ -1,60 +0,0 @@
-FROM ubuntu:xenial
-
-COPY *.list *.key /etc/apt/sources.list.d/
-
-RUN dpkg --add-architecture i386 \
- && echo 'deb http://archive.ubuntu.com/ubuntu/ xenial multiverse' > /etc/apt/sources.list.d/multiverse.list \
- && echo 'deb http://archive.ubuntu.com/ubuntu/ xenial-proposed main' > /etc/apt/sources.list.d/xenial-proposed.list \
- && echo 'Package: *' > /etc/apt/preferences.d/proposed-updates \
- && echo 'Pin: release a=xenial-proposed' >> /etc/apt/preferences.d/proposed-updates \
- && echo 'Pin-Priority: 400' >> /etc/apt/preferences.d/proposed-updates \
- && echo 'locales locales/locales_to_be_generated multiselect C.UTF-8 UTF-8, en_US.UTF-8 UTF-8 ' | debconf-set-selections \
- && echo 'locales locales/default_environment_locale select en_US.UTF-8' | debconf-set-selections \
- && apt-key add /etc/apt/sources.list.d/*.key \
- && apt-get update \
- && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y locales \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
- ca-certificates \
- curl \
- file \
- git \
- lsb-release \
- make \
- openjdk-8-jdk \
- openssh-server \
- python-requests \
- sudo \
- wget \
- lib32z1/xenial-proposed \
- lib32z1-dev/xenial-proposed \
- zlib1g/xenial-proposed \
- zlib1g:i386/xenial-proposed \
- zlib1g-dev:i386/xenial-proposed \
- && wget -q \
- http://de.archive.ubuntu.com/ubuntu/pool/main/m/make-dfsg/make_3.81-8.2ubuntu3_amd64.deb \
- && dpkg -i --force-all *.deb \
- && apt-mark hold make \
- && apt-get clean
-
-RUN useradd -m buildslave \
- && echo 'buildslave ALL = NOPASSWD: ALL' > /etc/sudoers.d/jenkins \
- && chmod 0440 /etc/sudoers.d/jenkins \
- && mkdir -p /var/run/sshd /home/buildslave/bin \
- && curl https://chromium.googlesource.com/chromium/src/build/+/master/install-build-deps.sh?format=TEXT | base64 -d > /home/buildslave/bin/install-build-deps.sh \
- && chmod a+x /home/buildslave/bin/* \
- && git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git /home/buildslave/depot_tools \
- && echo 'PATH="/home/buildslave/depot_tools:$PATH"' >> /home/buildslave/.profile \
- && chown -R buildslave:buildslave /home/buildslave/bin /home/buildslave/depot_tools \
- && echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula boolean true | debconf-set-selections \
- && bash /home/buildslave/bin/install-build-deps.sh --no-syms --no-chromeos-fonts --no-prompt \
- && apt-get clean \
- && rm -rf \
- /etc/apt/sources.list.d/*.key \
- /var/lib/apt/lists/* \
- /tmp/* \
- /var/tmp/* \
- *.deb
-
-EXPOSE 22
-CMD ["/usr/sbin/sshd", "-D"]
diff --git a/xenial-amd64-tcwg-base/Dockerfile b/xenial-amd64-tcwg-base/Dockerfile
deleted file mode 100644
index 874823bc..00000000
--- a/xenial-amd64-tcwg-base/Dockerfile
+++ /dev/null
@@ -1,129 +0,0 @@
-# Auto generated from tcwg-base/Dockerfile.in. Do not edit.
-FROM ubuntu:xenial
-
-RUN (url="http://archive.ubuntu.com/ubuntu/"; \
- ubuntu=xenial; \
- for i in $ubuntu $ubuntu-updates $ubuntu-backports $ubuntu-security; do \
- for j in deb deb-src; do \
- echo "$j $url $i main restricted universe multiverse"; \
- done; \
- echo; \
- done) > /etc/apt/sources.list \
- && dpkg --add-architecture i386 \
- && apt-get update \
- && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y devscripts \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
- alien \
- autoconf \
- autogen \
- automake \
- bc \
- bison \
- binutils-aarch64-linux-gnu \
- binutils-arm-linux-gnueabihf \
- bsd-mailx \
- build-essential \
- byacc \
- ccache \
- ccrypt \
- chrpath \
- clang \
- cmake \
- debhelper \
- dejagnu \
- dh-autoreconf \
- dh-translations \
- distro-info-data \
- emacs \
- fakeroot \
- flex \
- g++-multilib \
- gawk \
- gdb \
- gdbserver \
- git \
- git-review \
- groff \
- less \
- libexpat1-dev \
- libglib2.0-dev \
- liblzma-dev \
- libncurses5-dev \
- libpython2.7-dev \
- libreadline-dev \
- libssl-dev \
- libtcnative-1 \
- libtool \
- linux-tools-generic \
- lzop \
- make \
- mingw-w64 \
- net-tools \
- netcat \
- nfs-kernel-server \
- ninja-build \
- openjdk-8-jdk \
- openssh-server \
- pkg-config \
- python-dev \
- postfix \
- pxz \
- qemu-system-arm \
- qemu-user \
- rsync \
- subversion \
- sudo \
- tclsh \
- texinfo \
- texlive-fonts-recommended \
- texlive-latex-recommended \
- time \
- valgrind \
- vim \
- virtualenv \
- wget \
- wine \
- xz-utils \
- zip \
- zlib1g-dev \
- && apt-get clean \
- && rm -rf \
- /var/lib/apt/lists/* \
- /tmp/* \
- /var/tmp/*
-
-RUN install -D -p -m0755 /usr/share/doc/git/contrib/workdir/git-new-workdir /usr/local/bin/git-new-workdir \
- && sed -i -e 's:^session *required *pam_loginuid.so:# session required pam_loginuid.so:' /etc/pam.d/sshd \
- && mkdir -p /var/run/sshd \
- && sed -i \
- -e "/.*MaxStartups.*/d" \
- -e "/.*MaxSesssions.*/d" /etc/ssh/sshd_config \
- && echo "MaxStartups 256" >> /etc/ssh/sshd_config \
- && echo "MaxSessions 256" >> /etc/ssh/sshd_config
-
-COPY postfix-main.cf.in /etc/postfix/main.cf
-COPY postfix-sasl_password.in /etc/postfix/sasl_password
-
-RUN chown root:root /etc/postfix/sasl_password \
- && chmod 600 /etc/postfix/sasl_password
-
-RUN mkdir /tmp/docker-install-qemu.$$ \
- && cd /tmp/docker-install-qemu.$$ \
- && qemu_ver=2.8.0 && wget --progress=dot:giga http://download.qemu-project.org/qemu-${qemu_ver}.tar.xz \
- && tar xf qemu-${qemu_ver}.tar.xz \
- && mkdir build && cd build \
- && ../qemu-${qemu_ver}/configure --prefix=/usr/local --target-list=armeb-linux-user \
- && make all install -j $(nproc --all) \
- && cd && rm -rf /tmp/docker-install-qemu.$$
-
-# We use ssh multiplexing, which creates sockets in /tmp. Overlayfs,
-# which docker is using, can't host sockets, so we use a scratch mount
-# for /tmp. This requires that we add --rm option to "docker run"
-# invocations (e.g., mark "Remove volumes" checkbox in docker plugin) to
-# cleanup host directories used for the scratch mounts.
-VOLUME /tmp
-
-EXPOSE 22
-CMD ["/usr/sbin/sshd", "-D"]
-# checksum: 48814af3cc6c29ab8bb78e937ee860b5
diff --git a/xenial-amd64-tcwg-base/gerrit-branches b/xenial-amd64-tcwg-base/gerrit-branches
deleted file mode 120000
index 3cbaca1d..00000000
--- a/xenial-amd64-tcwg-base/gerrit-branches
+++ /dev/null
@@ -1 +0,0 @@
-../tcwg-base/gerrit-branches \ No newline at end of file
diff --git a/xenial-amd64-tcwg-base/xenial-amd64-tcwg-build/Dockerfile b/xenial-amd64-tcwg-base/xenial-amd64-tcwg-build/Dockerfile
deleted file mode 100644
index 8106b7bc..00000000
--- a/xenial-amd64-tcwg-base/xenial-amd64-tcwg-build/Dockerfile
+++ /dev/null
@@ -1,18 +0,0 @@
-# Auto generated from tcwg-base/tcwg-build/Dockerfile.in. Do not edit.
-FROM linaro/ci-amd64-tcwg-base-ubuntu:xenial
-
-RUN groupadd -g 9000 tcwg-infra \
- && useradd -m -g tcwg-infra -G kvm -u 11827 tcwg-buildslave \
- && useradd -m -g tcwg-infra -G kvm -u 12326 tcwg-benchmark \
- && echo '%tcwg-infra ALL = NOPASSWD: ALL' > /etc/sudoers.d/jenkins \
- && chmod 0440 /etc/sudoers.d/jenkins \
- && mkdir -p /home/tcwg-buildslave/workspace
-
-COPY tcwg-buildslave /home/tcwg-buildslave
-COPY tcwg-benchmark /home/tcwg-benchmark
-
-RUN chown -R tcwg-buildslave:tcwg-infra /home/tcwg-buildslave/ \
- && chown -R tcwg-benchmark:tcwg-infra /home/tcwg-benchmark/ \
- && chmod 0700 /home/tcwg-buildslave/.ssh/ /home/tcwg-benchmark/.ssh/ \
- && chmod 0600 /home/tcwg-buildslave/.ssh/* /home/tcwg-benchmark/.ssh/*
-# checksum: 710acbfdcccff739b76435ef75be994e
diff --git a/xenial-amd64-tcwg-base/xenial-amd64-tcwg-build/gerrit-branches b/xenial-amd64-tcwg-base/xenial-amd64-tcwg-build/gerrit-branches
deleted file mode 120000
index 628350a5..00000000
--- a/xenial-amd64-tcwg-base/xenial-amd64-tcwg-build/gerrit-branches
+++ /dev/null
@@ -1 +0,0 @@
-../../tcwg-base/tcwg-build/gerrit-branches \ No newline at end of file
diff --git a/xenial-amd64-tcwg-base/xenial-amd64-tcwg-dev/Dockerfile b/xenial-amd64-tcwg-base/xenial-amd64-tcwg-dev/Dockerfile
deleted file mode 100644
index 618500ac..00000000
--- a/xenial-amd64-tcwg-base/xenial-amd64-tcwg-dev/Dockerfile
+++ /dev/null
@@ -1,49 +0,0 @@
-# Auto generated from tcwg-base/tcwg-dev/Dockerfile.in. Do not edit.
-FROM linaro/ci-amd64-tcwg-base-ubuntu:xenial
-
-COPY run.sh .
-COPY start.sh .
-
-RUN apt-get update \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y \
- software-properties-common \
- && apt-get clean \
- && rm -rf \
- /var/lib/apt/lists/* \
- /tmp/* \
- /var/tmp/*
-
-RUN apt-get update \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y \
- apt-file \
- git-gui \
- git-svn \
- gnat-5 \
- less \
- locales \
- libgmp-dev \
- libmpc-dev \
- libmpfr-dev \
- mc \
- screen \
- stgit \
- tmux \
- unifdef \
- && apt-get clean \
- && rm -rf \
- /var/lib/apt/lists/* \
- /tmp/* \
- /var/tmp/*
-
-RUN sed -i -e '/.*AuthorizedKeysFile/ d' /etc/ssh/sshd_config \
- && echo "AuthorizedKeysFile %h/.ssh/authorized_keys.docker" >> /etc/ssh/sshd_config \
- && locale-gen en_US.UTF-8 && update-locale LANG=en_US.UTF-8 \
- && apt-file update
-
-# Create directories required for X11.
-RUN mkdir -p /tmp/.X11-unix /tmp/.ICE-unix \
- && chmod 1777 /tmp/.X11-unix /tmp/.ICE-unix
-
-ENTRYPOINT ["/run.sh"]
-CMD ["start.sh"]
-# checksum: dcc5804aedae03114b28d305dcbc2904
diff --git a/xenial-amd64-tcwg-base/xenial-amd64-tcwg-dev/gerrit-branches b/xenial-amd64-tcwg-base/xenial-amd64-tcwg-dev/gerrit-branches
deleted file mode 120000
index cd148228..00000000
--- a/xenial-amd64-tcwg-base/xenial-amd64-tcwg-dev/gerrit-branches
+++ /dev/null
@@ -1 +0,0 @@
-../../tcwg-base/tcwg-dev/gerrit-branches \ No newline at end of file
diff --git a/xenial-amd64/Dockerfile b/xenial-amd64/Dockerfile
index 84acbc35..d26b4122 100644
--- a/xenial-amd64/Dockerfile
+++ b/xenial-amd64/Dockerfile
@@ -7,6 +7,7 @@ RUN dpkg --add-architecture i386 \
&& apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends software-properties-common \
&& add-apt-repository -y ppa:git-core/ppa \
+ && add-apt-repository ppa:openjdk-r/ppa \
&& apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y devscripts \
@@ -22,6 +23,7 @@ RUN dpkg --add-architecture i386 \
ccache \
clang \
clang-format-3.8 \
+ clang-tidy-3.8 \
curl \
debhelper \
debian-archive-keyring \
@@ -50,11 +52,12 @@ RUN dpkg --add-architecture i386 \
linaro-image-tools \
lsb-release \
make \
- openjdk-8-jdk \
+ openjdk-11-jdk \
openssh-server \
python-mako \
python-networkx \
python-requests \
+ python3-requests \
pxz \
qemu-user-static \
rsync \
diff --git a/xenial-amd64/build.sh b/xenial-amd64/build.sh
index 1203ab3b..1fc5b660 100755
--- a/xenial-amd64/build.sh
+++ b/xenial-amd64/build.sh
@@ -17,6 +17,6 @@ ARCHITECTURE=$(basename ${PWD} | cut -f2 -d '-')
cp -a ../linaro-overlay-repo.list ../linaro-overlay-repo.key .
sed -e "s|@DISTRIBUTION@|${DISTRIBUTION}|" -i *.list
-image=linaro/ci-${ARCHITECTURE}-ubuntu:${DISTRIBUTION}
+image=linaro/jenkins-${ARCHITECTURE}-ubuntu:${DISTRIBUTION}
docker build --pull --tag=$image .
echo $image > .docker-tag
diff --git a/xenial-arm64-gitlab/Dockerfile b/xenial-arm64-gitlab/Dockerfile
new file mode 100644
index 00000000..65208e96
--- /dev/null
+++ b/xenial-arm64-gitlab/Dockerfile
@@ -0,0 +1,95 @@
+FROM ubuntu:bionic as builder
+
+# Install required packages
+RUN apt-get update -q \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends \
+ build-essential \
+ autoconf \
+ automake \
+ autopoint \
+ zlib1g-dev \
+ byacc \
+ cmake \
+ python-pip \
+ git \
+ gcc \
+ g++ \
+ gcc-6 \
+ g++-6 \
+ libssl1.0-dev \
+ libyaml-dev \
+ libffi-dev \
+ libreadline-dev \
+ libgdbm-dev \
+ libncurses5-dev \
+ make \
+ bzip2 \
+ curl \
+ ca-certificates \
+ locales \
+ openssh-server \
+ libexpat1-dev \
+ gettext \
+ libz-dev \
+ fakeroot \
+ python-dev \
+ python-setuptools \
+ ccache \
+ distcc \
+ unzip \
+ tzdata \
+ apt-transport-https \
+ gnupg
+
+RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen
+RUN locale-gen en_US.UTF-8
+ENV LANG en_US.UTF-8
+ENV LANGUAGE en_US:en
+ENV LC_ALL en_US.UTF-8
+
+RUN pip install awscli
+
+ENV GO_VERSION 1.13.9
+RUN curl -fsSL "https://storage.googleapis.com/golang/go${GO_VERSION}.linux-arm64.tar.gz" \
+ | tar -xzC /usr/local \
+ && ln -sf /usr/local/go/bin/go /usr/local/go/bin/gofmt /usr/local/go/bin/godoc /usr/local/bin/
+
+ENV RUBY_VERSION 2.6.5
+RUN curl -fsSL "https://cache.ruby-lang.org/pub/ruby/2.6/ruby-${RUBY_VERSION}.tar.gz" \
+ | tar -xzC /tmp \
+ && cd /tmp/ruby-${RUBY_VERSION} \
+ && ./configure --disable-install-rdoc --disable-install-doc --disable-install-capi\
+ && make \
+ && make install
+
+ENV RUBYGEMS_VERSION 2.6.13
+RUN /usr/local/bin/gem update --system ${RUBYGEMS_VERSION} --no-document
+
+ENV BUNDLER_VERSION 1.17.3
+RUN /usr/local/bin/gem install bundler --version ${BUNDLER_VERSION} --no-document
+
+ENV LICENSE_FINDER_VERSION 3.1.1
+RUN /usr/local/bin/gem install license_finder --version ${LICENSE_FINDER_VERSION} --no-document
+
+ENV NODE_VERSION 12.4.0
+RUN curl -fsSL "https://nodejs.org/download/release/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-arm64.tar.gz" \
+ | tar --strip-components 1 -xzC /usr/local/ \
+ && node --version
+
+ENV YARN_VERSION 1.16.0
+RUN mkdir /usr/local/yarn \
+ && curl -fsSL "https://yarnpkg.com/downloads/${YARN_VERSION}/yarn-v${YARN_VERSION}.tar.gz" \
+ | tar -xzC /usr/local/yarn --strip 1 \
+ && ln -sf /usr/local/yarn/bin/yarn /usr/local/bin/ \
+ && yarn --version
+
+RUN mkdir -p /opt/gitlab /var/cache/omnibus ~/.ssh
+
+RUN git config --global user.email "packages@gitlab.com"
+RUN git config --global user.name "GitLab Inc."
+
+RUN rm -rf /tmp/*
+
+FROM ubuntu:bionic
+MAINTAINER GitLab Inc. <support@gitlab.com>
+COPY --from=builder / /
diff --git a/xenial-arm64-gitlab/build.sh b/xenial-arm64-gitlab/build.sh
new file mode 100755
index 00000000..8cded612
--- /dev/null
+++ b/xenial-arm64-gitlab/build.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+set -e
+
+image=linaro/gitlab-arm64
+
+docker build --pull --tag=$image .
+echo $image > .docker-tag
diff --git a/xenial-arm64-tcwg-base/Dockerfile b/xenial-arm64-tcwg-base/Dockerfile
deleted file mode 100644
index cf0be40f..00000000
--- a/xenial-arm64-tcwg-base/Dockerfile
+++ /dev/null
@@ -1,112 +0,0 @@
-# Auto generated from tcwg-base/Dockerfile.in. Do not edit.
-FROM linaro/base-arm64-ubuntu:xenial
-
-RUN (url="http://ports.ubuntu.com/ubuntu-ports/"; \
- ubuntu=xenial; \
- for i in $ubuntu $ubuntu-updates $ubuntu-backports $ubuntu-security; do \
- for j in deb deb-src; do \
- echo "$j $url $i main restricted universe multiverse"; \
- done; \
- echo; \
- done) > /etc/apt/sources.list \
- && apt-get update \
- && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y devscripts \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
- alien \
- autoconf \
- autogen \
- automake \
- bc \
- bison \
- bsd-mailx \
- build-essential \
- byacc \
- ccache \
- ccrypt \
- chrpath \
- clang \
- cmake \
- debhelper \
- dejagnu \
- dh-autoreconf \
- dh-translations \
- distro-info-data \
- emacs \
- fakeroot \
- flex \
- gawk \
- gdb \
- gdbserver \
- git \
- git-review \
- groff \
- less \
- libexpat1-dev \
- liblzma-dev \
- libncurses5-dev \
- libpython2.7-dev \
- libreadline-dev \
- libssl-dev \
- libtcnative-1 \
- libtool \
- linux-tools-generic \
- lzop \
- make \
- net-tools \
- netcat \
- nfs-kernel-server \
- ninja-build \
- openjdk-8-jdk \
- openssh-server \
- python-dev \
- postfix \
- pxz \
- qemu-system-arm \
- qemu-user \
- rsync \
- subversion \
- sudo \
- tclsh \
- texinfo \
- texlive-fonts-recommended \
- texlive-latex-recommended \
- time \
- valgrind \
- vim \
- virtualenv \
- wget \
- xz-utils \
- zip \
- zlib1g-dev \
- && apt-get clean \
- && rm -rf \
- /var/lib/apt/lists/* \
- /tmp/* \
- /var/tmp/*
-
-RUN install -D -p -m0755 /usr/share/doc/git/contrib/workdir/git-new-workdir /usr/local/bin/git-new-workdir \
- && sed -i -e 's:^session *required *pam_loginuid.so:# session required pam_loginuid.so:' /etc/pam.d/sshd \
- && mkdir -p /var/run/sshd \
- && sed -i \
- -e "/.*MaxStartups.*/d" \
- -e "/.*MaxSesssions.*/d" /etc/ssh/sshd_config \
- && echo "MaxStartups 256" >> /etc/ssh/sshd_config \
- && echo "MaxSessions 256" >> /etc/ssh/sshd_config
-
-COPY postfix-main.cf.in /etc/postfix/main.cf
-COPY postfix-sasl_password.in /etc/postfix/sasl_password
-
-RUN chown root:root /etc/postfix/sasl_password \
- && chmod 600 /etc/postfix/sasl_password
-
-# We use ssh multiplexing, which creates sockets in /tmp. Overlayfs,
-# which docker is using, can't host sockets, so we use a scratch mount
-# for /tmp. This requires that we add --rm option to "docker run"
-# invocations (e.g., mark "Remove volumes" checkbox in docker plugin) to
-# cleanup host directories used for the scratch mounts.
-VOLUME /tmp
-
-EXPOSE 22
-CMD ["/usr/sbin/sshd", "-D"]
-# checksum: 398e83d368854d72506e7530116ff57a
diff --git a/xenial-arm64-tcwg-base/gerrit-branches b/xenial-arm64-tcwg-base/gerrit-branches
deleted file mode 120000
index 3cbaca1d..00000000
--- a/xenial-arm64-tcwg-base/gerrit-branches
+++ /dev/null
@@ -1 +0,0 @@
-../tcwg-base/gerrit-branches \ No newline at end of file
diff --git a/xenial-arm64-tcwg-base/xenial-arm64-tcwg-build/Dockerfile b/xenial-arm64-tcwg-base/xenial-arm64-tcwg-build/Dockerfile
deleted file mode 100644
index e6e943c7..00000000
--- a/xenial-arm64-tcwg-base/xenial-arm64-tcwg-build/Dockerfile
+++ /dev/null
@@ -1,18 +0,0 @@
-# Auto generated from tcwg-base/tcwg-build/Dockerfile.in. Do not edit.
-FROM linaro/ci-arm64-tcwg-base-ubuntu:xenial
-
-RUN groupadd -g 9000 tcwg-infra \
- && useradd -m -g tcwg-infra -G kvm -u 11827 tcwg-buildslave \
- && useradd -m -g tcwg-infra -G kvm -u 12326 tcwg-benchmark \
- && echo '%tcwg-infra ALL = NOPASSWD: ALL' > /etc/sudoers.d/jenkins \
- && chmod 0440 /etc/sudoers.d/jenkins \
- && mkdir -p /home/tcwg-buildslave/workspace
-
-COPY tcwg-buildslave /home/tcwg-buildslave
-COPY tcwg-benchmark /home/tcwg-benchmark
-
-RUN chown -R tcwg-buildslave:tcwg-infra /home/tcwg-buildslave/ \
- && chown -R tcwg-benchmark:tcwg-infra /home/tcwg-benchmark/ \
- && chmod 0700 /home/tcwg-buildslave/.ssh/ /home/tcwg-benchmark/.ssh/ \
- && chmod 0600 /home/tcwg-buildslave/.ssh/* /home/tcwg-benchmark/.ssh/*
-# checksum: 32a27b3b729064776a076ccd5199b8e2
diff --git a/xenial-arm64-tcwg-base/xenial-arm64-tcwg-build/gerrit-branches b/xenial-arm64-tcwg-base/xenial-arm64-tcwg-build/gerrit-branches
deleted file mode 120000
index 628350a5..00000000
--- a/xenial-arm64-tcwg-base/xenial-arm64-tcwg-build/gerrit-branches
+++ /dev/null
@@ -1 +0,0 @@
-../../tcwg-base/tcwg-build/gerrit-branches \ No newline at end of file
diff --git a/xenial-arm64-tcwg-base/xenial-arm64-tcwg-build/xenial-arm64-tcwg-test/Dockerfile b/xenial-arm64-tcwg-base/xenial-arm64-tcwg-build/xenial-arm64-tcwg-test/Dockerfile
deleted file mode 100644
index ef1ce192..00000000
--- a/xenial-arm64-tcwg-base/xenial-arm64-tcwg-build/xenial-arm64-tcwg-test/Dockerfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# Auto generated from tcwg-base/tcwg-build/tcwg-test/Dockerfile.in. Do not edit.
-FROM linaro/ci-arm64-tcwg-build-ubuntu:xenial
-
-COPY tcwg-buildslave/.ssh /root/.ssh
-
-RUN chmod 0700 /root/.ssh/ \
- && sed -i -e "/.*PermitRootLogin.*/d" /etc/ssh/sshd_config \
- && echo "PermitRootLogin without-password" >> /etc/ssh/sshd_config
-# checksum: 9d6f202aa1c9a2f4391cb0687d75c45a
diff --git a/xenial-arm64-tcwg-base/xenial-arm64-tcwg-build/xenial-arm64-tcwg-test/build.sh b/xenial-arm64-tcwg-base/xenial-arm64-tcwg-build/xenial-arm64-tcwg-test/build.sh
deleted file mode 120000
index 44bceb16..00000000
--- a/xenial-arm64-tcwg-base/xenial-arm64-tcwg-build/xenial-arm64-tcwg-test/build.sh
+++ /dev/null
@@ -1 +0,0 @@
-../../../tcwg-base/tcwg-build/tcwg-test/build.sh \ No newline at end of file
diff --git a/xenial-arm64-tcwg-base/xenial-arm64-tcwg-build/xenial-arm64-tcwg-test/gerrit-branches b/xenial-arm64-tcwg-base/xenial-arm64-tcwg-build/xenial-arm64-tcwg-test/gerrit-branches
deleted file mode 120000
index 4bcb423c..00000000
--- a/xenial-arm64-tcwg-base/xenial-arm64-tcwg-build/xenial-arm64-tcwg-test/gerrit-branches
+++ /dev/null
@@ -1 +0,0 @@
-../../../tcwg-base/tcwg-build/tcwg-test/gerrit-branches \ No newline at end of file
diff --git a/xenial-arm64-tcwg-base/xenial-arm64-tcwg-dev/Dockerfile b/xenial-arm64-tcwg-base/xenial-arm64-tcwg-dev/Dockerfile
deleted file mode 100644
index 4534b5cc..00000000
--- a/xenial-arm64-tcwg-base/xenial-arm64-tcwg-dev/Dockerfile
+++ /dev/null
@@ -1,49 +0,0 @@
-# Auto generated from tcwg-base/tcwg-dev/Dockerfile.in. Do not edit.
-FROM linaro/ci-arm64-tcwg-base-ubuntu:xenial
-
-COPY run.sh .
-COPY start.sh .
-
-RUN apt-get update \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y \
- software-properties-common \
- && apt-get clean \
- && rm -rf \
- /var/lib/apt/lists/* \
- /tmp/* \
- /var/tmp/*
-
-RUN apt-get update \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y \
- apt-file \
- git-gui \
- git-svn \
- gnat-5 \
- less \
- locales \
- libgmp-dev \
- libmpc-dev \
- libmpfr-dev \
- mc \
- screen \
- stgit \
- tmux \
- unifdef \
- && apt-get clean \
- && rm -rf \
- /var/lib/apt/lists/* \
- /tmp/* \
- /var/tmp/*
-
-RUN sed -i -e '/.*AuthorizedKeysFile/ d' /etc/ssh/sshd_config \
- && echo "AuthorizedKeysFile %h/.ssh/authorized_keys.docker" >> /etc/ssh/sshd_config \
- && locale-gen en_US.UTF-8 && update-locale LANG=en_US.UTF-8 \
- && apt-file update
-
-# Create directories required for X11.
-RUN mkdir -p /tmp/.X11-unix /tmp/.ICE-unix \
- && chmod 1777 /tmp/.X11-unix /tmp/.ICE-unix
-
-ENTRYPOINT ["/run.sh"]
-CMD ["start.sh"]
-# checksum: 0e9607cbb3dd157d553ffebd26d6a411
diff --git a/xenial-arm64-tcwg-base/xenial-arm64-tcwg-dev/gerrit-branches b/xenial-arm64-tcwg-base/xenial-arm64-tcwg-dev/gerrit-branches
deleted file mode 120000
index cd148228..00000000
--- a/xenial-arm64-tcwg-base/xenial-arm64-tcwg-dev/gerrit-branches
+++ /dev/null
@@ -1 +0,0 @@
-../../tcwg-base/tcwg-dev/gerrit-branches \ No newline at end of file
diff --git a/xenial-arm64-tcwg-base/xenial-arm64-tcwg-llvmbot/Dockerfile b/xenial-arm64-tcwg-base/xenial-arm64-tcwg-llvmbot/Dockerfile
deleted file mode 100644
index a5327736..00000000
--- a/xenial-arm64-tcwg-base/xenial-arm64-tcwg-llvmbot/Dockerfile
+++ /dev/null
@@ -1,48 +0,0 @@
-# Auto generated from tcwg-base/tcwg-llvmbot/Dockerfile.in. Do not edit.
-FROM linaro/ci-arm64-tcwg-base-ubuntu:xenial
-
-RUN apt-get update \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y \
- buildbot \
- && apt-get clean \
- && rm -rf \
- /var/lib/apt/lists/* \
- /tmp/* \
- /var/tmp/*
-
-COPY buildslave/ llvm-config-buildslave/
-RUN cd ./llvm-config-buildslave/ \
- && HOME=$(pwd) ./llvm-setup \
- && ./cleanup-users \
- && cd ../.. \
- && rm -rf \
- llvm-config-buildslave/ \
- /var/lib/apt/lists/* \
- /tmp/* \
- /var/tmp/* \
- && sudo -i -u buildslave mkdir /home/buildslave/buildslave
-
-# Add ninja with support for memory-threshold job limitation.
-RUN git clone -b master https://github.com/maxim-kuvyrkov/ninja.git \
- && cd ninja \
- && ./configure.py --bootstrap && ./ninja all && ./ninja_test \
- && mv ninja /usr/local/bin/ninja.bin \
- && cd .. \
- && rm -rf ninja
-
-# Add current clang for libcxx bots.
-RUN \
- clang_ver=clang+llvm-5.0.1-aarch64-linux-gnu \
- && cd /usr/local \
- && wget --progress=dot:giga http://releases.llvm.org/5.0.1/$clang_ver.tar.xz \
- && tar xf $clang_ver.tar.xz \
- && rm $clang_ver.tar.xz
-
-VOLUME /home
-
-COPY run.sh .
-COPY start.sh .
-
-ENTRYPOINT ["/run.sh"]
-CMD ["start.sh"]
-# checksum: e518582a2a434e66d9c9388c0bd2fa91
diff --git a/xenial-arm64-tcwg-base/xenial-arm64-tcwg-llvmbot/gerrit-branches b/xenial-arm64-tcwg-base/xenial-arm64-tcwg-llvmbot/gerrit-branches
deleted file mode 120000
index b8865f78..00000000
--- a/xenial-arm64-tcwg-base/xenial-arm64-tcwg-llvmbot/gerrit-branches
+++ /dev/null
@@ -1 +0,0 @@
-../../tcwg-base/tcwg-llvmbot/gerrit-branches \ No newline at end of file
diff --git a/xenial-arm64/Dockerfile b/xenial-arm64/Dockerfile
deleted file mode 100644
index 58ad1d38..00000000
--- a/xenial-arm64/Dockerfile
+++ /dev/null
@@ -1,65 +0,0 @@
-FROM linaro/base-arm64-ubuntu:xenial
-
-COPY *.list *.key /etc/apt/sources.list.d/
-
-RUN echo 'deb http://ports.ubuntu.com/ubuntu-ports xenial main universe' > /etc/apt/sources.list \
- && apt-key add /etc/apt/sources.list.d/*.key \
- && apt-get update \
- && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y devscripts \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
- abootimg \
- acpica-tools \
- android-tools-fsutils \
- autoconf \
- automake \
- bc \
- bison \
- build-essential \
- ccache \
- curl \
- debhelper \
- debian-archive-keyring \
- debian-keyring \
- device-tree-compiler \
- doxygen \
- fakeroot \
- flex \
- gcc \
- gdisk \
- git \
- kernel-wedge \
- kpartx \
- lava-tool \
- libtool \
- libvirt-bin \
- linaro-image-tools \
- lsb-release \
- openjdk-8-jdk \
- openssh-server \
- python-requests \
- qemu-user-static \
- sudo \
- time \
- u-boot-tools \
- uuid-dev \
- virtinst \
- wget \
- zip \
- zsync \
- && apt-get clean \
- && rm -rf \
- /etc/apt/sources.list.d/*.key \
- /var/lib/apt/lists/* \
- /tmp/* \
- /var/tmp/*
-
-RUN useradd -m buildslave \
- && echo 'buildslave ALL = NOPASSWD: ALL' > /etc/sudoers.d/jenkins \
- && chmod 440 /etc/sudoers.d/jenkins \
- && mkdir -p /var/run/sshd
-
-VOLUME ["/var/lib/libvirt"]
-
-EXPOSE 22
-CMD ["/usr/sbin/sshd", "-D"]
diff --git a/xenial-armhf-tcwg-base/Dockerfile b/xenial-armhf-tcwg-base/Dockerfile
deleted file mode 100644
index bd40b0da..00000000
--- a/xenial-armhf-tcwg-base/Dockerfile
+++ /dev/null
@@ -1,112 +0,0 @@
-# Auto generated from tcwg-base/Dockerfile.in. Do not edit.
-FROM linaro/base-armhf-ubuntu:xenial
-
-RUN (url="http://ports.ubuntu.com/ubuntu-ports/"; \
- ubuntu=xenial; \
- for i in $ubuntu $ubuntu-updates $ubuntu-backports $ubuntu-security; do \
- for j in deb deb-src; do \
- echo "$j $url $i main restricted universe multiverse"; \
- done; \
- echo; \
- done) > /etc/apt/sources.list \
- && apt-get update \
- && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y devscripts \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
- alien \
- autoconf \
- autogen \
- automake \
- bc \
- bison \
- bsd-mailx \
- build-essential \
- byacc \
- ccache \
- ccrypt \
- chrpath \
- clang \
- cmake \
- debhelper \
- dejagnu \
- dh-autoreconf \
- dh-translations \
- distro-info-data \
- emacs \
- fakeroot \
- flex \
- gawk \
- gdb \
- gdbserver \
- git \
- git-review \
- groff \
- less \
- libexpat1-dev \
- liblzma-dev \
- libncurses5-dev \
- libpython2.7-dev \
- libreadline-dev \
- libssl-dev \
- libtcnative-1 \
- libtool \
- linux-tools-generic \
- lzop \
- make \
- net-tools \
- netcat \
- nfs-kernel-server \
- ninja-build \
- openjdk-8-jdk \
- openssh-server \
- python-dev \
- postfix \
- pxz \
- qemu-system-arm \
- qemu-user \
- rsync \
- subversion \
- sudo \
- tclsh \
- texinfo \
- texlive-fonts-recommended \
- texlive-latex-recommended \
- time \
- valgrind \
- vim \
- virtualenv \
- wget \
- xz-utils \
- zip \
- zlib1g-dev \
- && apt-get clean \
- && rm -rf \
- /var/lib/apt/lists/* \
- /tmp/* \
- /var/tmp/*
-
-RUN install -D -p -m0755 /usr/share/doc/git/contrib/workdir/git-new-workdir /usr/local/bin/git-new-workdir \
- && sed -i -e 's:^session *required *pam_loginuid.so:# session required pam_loginuid.so:' /etc/pam.d/sshd \
- && mkdir -p /var/run/sshd \
- && sed -i \
- -e "/.*MaxStartups.*/d" \
- -e "/.*MaxSesssions.*/d" /etc/ssh/sshd_config \
- && echo "MaxStartups 256" >> /etc/ssh/sshd_config \
- && echo "MaxSessions 256" >> /etc/ssh/sshd_config
-
-COPY postfix-main.cf.in /etc/postfix/main.cf
-COPY postfix-sasl_password.in /etc/postfix/sasl_password
-
-RUN chown root:root /etc/postfix/sasl_password \
- && chmod 600 /etc/postfix/sasl_password
-
-# We use ssh multiplexing, which creates sockets in /tmp. Overlayfs,
-# which docker is using, can't host sockets, so we use a scratch mount
-# for /tmp. This requires that we add --rm option to "docker run"
-# invocations (e.g., mark "Remove volumes" checkbox in docker plugin) to
-# cleanup host directories used for the scratch mounts.
-VOLUME /tmp
-
-EXPOSE 22
-CMD ["linux32", "/usr/sbin/sshd", "-D"]
-# checksum: 629c67d4f4a70927879832d6301c4462
diff --git a/xenial-armhf-tcwg-base/build.sh b/xenial-armhf-tcwg-base/build.sh
deleted file mode 120000
index 67d8934e..00000000
--- a/xenial-armhf-tcwg-base/build.sh
+++ /dev/null
@@ -1 +0,0 @@
-../tcwg-base/build.sh \ No newline at end of file
diff --git a/xenial-armhf-tcwg-base/gerrit-branches b/xenial-armhf-tcwg-base/gerrit-branches
deleted file mode 120000
index 3cbaca1d..00000000
--- a/xenial-armhf-tcwg-base/gerrit-branches
+++ /dev/null
@@ -1 +0,0 @@
-../tcwg-base/gerrit-branches \ No newline at end of file
diff --git a/xenial-armhf-tcwg-base/xenial-armhf-tcwg-build/Dockerfile b/xenial-armhf-tcwg-base/xenial-armhf-tcwg-build/Dockerfile
deleted file mode 100644
index 958c9360..00000000
--- a/xenial-armhf-tcwg-base/xenial-armhf-tcwg-build/Dockerfile
+++ /dev/null
@@ -1,18 +0,0 @@
-# Auto generated from tcwg-base/tcwg-build/Dockerfile.in. Do not edit.
-FROM linaro/ci-armhf-tcwg-base-ubuntu:xenial
-
-RUN groupadd -g 9000 tcwg-infra \
- && useradd -m -g tcwg-infra -G kvm -u 11827 tcwg-buildslave \
- && useradd -m -g tcwg-infra -G kvm -u 12326 tcwg-benchmark \
- && echo '%tcwg-infra ALL = NOPASSWD: ALL' > /etc/sudoers.d/jenkins \
- && chmod 0440 /etc/sudoers.d/jenkins \
- && mkdir -p /home/tcwg-buildslave/workspace
-
-COPY tcwg-buildslave /home/tcwg-buildslave
-COPY tcwg-benchmark /home/tcwg-benchmark
-
-RUN chown -R tcwg-buildslave:tcwg-infra /home/tcwg-buildslave/ \
- && chown -R tcwg-benchmark:tcwg-infra /home/tcwg-benchmark/ \
- && chmod 0700 /home/tcwg-buildslave/.ssh/ /home/tcwg-benchmark/.ssh/ \
- && chmod 0600 /home/tcwg-buildslave/.ssh/* /home/tcwg-benchmark/.ssh/*
-# checksum: 484fd5849721dbc7371264157f143624
diff --git a/xenial-armhf-tcwg-base/xenial-armhf-tcwg-build/build.sh b/xenial-armhf-tcwg-base/xenial-armhf-tcwg-build/build.sh
deleted file mode 120000
index 50162e02..00000000
--- a/xenial-armhf-tcwg-base/xenial-armhf-tcwg-build/build.sh
+++ /dev/null
@@ -1 +0,0 @@
-../../tcwg-base/tcwg-build/build.sh \ No newline at end of file
diff --git a/xenial-armhf-tcwg-base/xenial-armhf-tcwg-build/gerrit-branches b/xenial-armhf-tcwg-base/xenial-armhf-tcwg-build/gerrit-branches
deleted file mode 120000
index 628350a5..00000000
--- a/xenial-armhf-tcwg-base/xenial-armhf-tcwg-build/gerrit-branches
+++ /dev/null
@@ -1 +0,0 @@
-../../tcwg-base/tcwg-build/gerrit-branches \ No newline at end of file
diff --git a/xenial-armhf-tcwg-base/xenial-armhf-tcwg-build/xenial-armhf-tcwg-test/Dockerfile b/xenial-armhf-tcwg-base/xenial-armhf-tcwg-build/xenial-armhf-tcwg-test/Dockerfile
deleted file mode 100644
index 9f4b650f..00000000
--- a/xenial-armhf-tcwg-base/xenial-armhf-tcwg-build/xenial-armhf-tcwg-test/Dockerfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# Auto generated from tcwg-base/tcwg-build/tcwg-test/Dockerfile.in. Do not edit.
-FROM linaro/ci-armhf-tcwg-build-ubuntu:xenial
-
-COPY tcwg-buildslave/.ssh /root/.ssh
-
-RUN chmod 0700 /root/.ssh/ \
- && sed -i -e "/.*PermitRootLogin.*/d" /etc/ssh/sshd_config \
- && echo "PermitRootLogin without-password" >> /etc/ssh/sshd_config
-# checksum: 3f70f196ffb86f43cdc7369b271c8c1d
diff --git a/xenial-armhf-tcwg-base/xenial-armhf-tcwg-build/xenial-armhf-tcwg-test/build.sh b/xenial-armhf-tcwg-base/xenial-armhf-tcwg-build/xenial-armhf-tcwg-test/build.sh
deleted file mode 120000
index 44bceb16..00000000
--- a/xenial-armhf-tcwg-base/xenial-armhf-tcwg-build/xenial-armhf-tcwg-test/build.sh
+++ /dev/null
@@ -1 +0,0 @@
-../../../tcwg-base/tcwg-build/tcwg-test/build.sh \ No newline at end of file
diff --git a/xenial-armhf-tcwg-base/xenial-armhf-tcwg-build/xenial-armhf-tcwg-test/gerrit-branches b/xenial-armhf-tcwg-base/xenial-armhf-tcwg-build/xenial-armhf-tcwg-test/gerrit-branches
deleted file mode 120000
index 4bcb423c..00000000
--- a/xenial-armhf-tcwg-base/xenial-armhf-tcwg-build/xenial-armhf-tcwg-test/gerrit-branches
+++ /dev/null
@@ -1 +0,0 @@
-../../../tcwg-base/tcwg-build/tcwg-test/gerrit-branches \ No newline at end of file
diff --git a/xenial-armhf-tcwg-base/xenial-armhf-tcwg-dev/Dockerfile b/xenial-armhf-tcwg-base/xenial-armhf-tcwg-dev/Dockerfile
deleted file mode 100644
index 1bbdba71..00000000
--- a/xenial-armhf-tcwg-base/xenial-armhf-tcwg-dev/Dockerfile
+++ /dev/null
@@ -1,49 +0,0 @@
-# Auto generated from tcwg-base/tcwg-dev/Dockerfile.in. Do not edit.
-FROM linaro/ci-armhf-tcwg-base-ubuntu:xenial
-
-COPY run.sh .
-COPY start.sh .
-
-RUN apt-get update \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y \
- software-properties-common \
- && apt-get clean \
- && rm -rf \
- /var/lib/apt/lists/* \
- /tmp/* \
- /var/tmp/*
-
-RUN apt-get update \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y \
- apt-file \
- git-gui \
- git-svn \
- gnat-5 \
- less \
- locales \
- libgmp-dev \
- libmpc-dev \
- libmpfr-dev \
- mc \
- screen \
- stgit \
- tmux \
- unifdef \
- && apt-get clean \
- && rm -rf \
- /var/lib/apt/lists/* \
- /tmp/* \
- /var/tmp/*
-
-RUN sed -i -e '/.*AuthorizedKeysFile/ d' /etc/ssh/sshd_config \
- && echo "AuthorizedKeysFile %h/.ssh/authorized_keys.docker" >> /etc/ssh/sshd_config \
- && locale-gen en_US.UTF-8 && update-locale LANG=en_US.UTF-8 \
- && apt-file update
-
-# Create directories required for X11.
-RUN mkdir -p /tmp/.X11-unix /tmp/.ICE-unix \
- && chmod 1777 /tmp/.X11-unix /tmp/.ICE-unix
-
-ENTRYPOINT ["linux32", "/run.sh"]
-CMD ["start.sh"]
-# checksum: ece1982cfb0a9675f6cb4af314a31779
diff --git a/xenial-armhf-tcwg-base/xenial-armhf-tcwg-dev/gerrit-branches b/xenial-armhf-tcwg-base/xenial-armhf-tcwg-dev/gerrit-branches
deleted file mode 120000
index cd148228..00000000
--- a/xenial-armhf-tcwg-base/xenial-armhf-tcwg-dev/gerrit-branches
+++ /dev/null
@@ -1 +0,0 @@
-../../tcwg-base/tcwg-dev/gerrit-branches \ No newline at end of file
diff --git a/xenial-armhf-tcwg-base/xenial-armhf-tcwg-llvmbot/Dockerfile b/xenial-armhf-tcwg-base/xenial-armhf-tcwg-llvmbot/Dockerfile
deleted file mode 100644
index 00ed72eb..00000000
--- a/xenial-armhf-tcwg-base/xenial-armhf-tcwg-llvmbot/Dockerfile
+++ /dev/null
@@ -1,48 +0,0 @@
-# Auto generated from tcwg-base/tcwg-llvmbot/Dockerfile.in. Do not edit.
-FROM linaro/ci-armhf-tcwg-base-ubuntu:xenial
-
-RUN apt-get update \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y \
- buildbot \
- && apt-get clean \
- && rm -rf \
- /var/lib/apt/lists/* \
- /tmp/* \
- /var/tmp/*
-
-COPY buildslave/ llvm-config-buildslave/
-RUN cd ./llvm-config-buildslave/ \
- && HOME=$(pwd) ./llvm-setup \
- && ./cleanup-users \
- && cd ../.. \
- && rm -rf \
- llvm-config-buildslave/ \
- /var/lib/apt/lists/* \
- /tmp/* \
- /var/tmp/* \
- && sudo -i -u buildslave mkdir /home/buildslave/buildslave
-
-# Add ninja with support for memory-threshold job limitation.
-RUN git clone -b master https://github.com/maxim-kuvyrkov/ninja.git \
- && cd ninja \
- && ./configure.py --bootstrap && ./ninja all && ./ninja_test \
- && mv ninja /usr/local/bin/ninja.bin \
- && cd .. \
- && rm -rf ninja
-
-# Add current clang for libcxx bots.
-RUN \
- clang_ver=clang+llvm-5.0.1-armv7a-linux-gnueabihf \
- && cd /usr/local \
- && wget --progress=dot:giga http://releases.llvm.org/5.0.1/$clang_ver.tar.xz \
- && tar xf $clang_ver.tar.xz \
- && rm $clang_ver.tar.xz
-
-VOLUME /home
-
-COPY run.sh .
-COPY start.sh .
-
-ENTRYPOINT ["linux32", "/run.sh"]
-CMD ["start.sh"]
-# checksum: 478e345cb93c7e7a70535a26606fb9ed
diff --git a/xenial-armhf-tcwg-base/xenial-armhf-tcwg-llvmbot/gerrit-branches b/xenial-armhf-tcwg-base/xenial-armhf-tcwg-llvmbot/gerrit-branches
deleted file mode 120000
index b8865f78..00000000
--- a/xenial-armhf-tcwg-base/xenial-armhf-tcwg-llvmbot/gerrit-branches
+++ /dev/null
@@ -1 +0,0 @@
-../../tcwg-base/tcwg-llvmbot/gerrit-branches \ No newline at end of file
diff --git a/xenial-armhf/Dockerfile b/xenial-armhf/Dockerfile
index 0d96cde0..198ea4e8 100644
--- a/xenial-armhf/Dockerfile
+++ b/xenial-armhf/Dockerfile
@@ -37,6 +37,7 @@ RUN echo 'deb http://ports.ubuntu.com/ubuntu-ports xenial main universe' > /etc/
openjdk-8-jdk \
openssh-server \
python-requests \
+ python3-requests \
qemu-user-static \
sudo \
time \
diff --git a/xenial-armhf/build.sh b/xenial-armhf/build.sh
index 1203ab3b..1fc5b660 100755
--- a/xenial-armhf/build.sh
+++ b/xenial-armhf/build.sh
@@ -17,6 +17,6 @@ ARCHITECTURE=$(basename ${PWD} | cut -f2 -d '-')
cp -a ../linaro-overlay-repo.list ../linaro-overlay-repo.key .
sed -e "s|@DISTRIBUTION@|${DISTRIBUTION}|" -i *.list
-image=linaro/ci-${ARCHITECTURE}-ubuntu:${DISTRIBUTION}
+image=linaro/jenkins-${ARCHITECTURE}-ubuntu:${DISTRIBUTION}
docker build --pull --tag=$image .
echo $image > .docker-tag
diff --git a/xenial-i386-tcwg-base/Dockerfile b/xenial-i386-tcwg-base/Dockerfile
deleted file mode 100644
index d49fa71b..00000000
--- a/xenial-i386-tcwg-base/Dockerfile
+++ /dev/null
@@ -1,130 +0,0 @@
-# Auto generated from tcwg-base/Dockerfile.in. Do not edit.
-FROM linaro/base-i386-ubuntu:xenial
-
-RUN (url="http://archive.ubuntu.com/ubuntu/"; \
- ubuntu=xenial; \
- for i in $ubuntu $ubuntu-updates $ubuntu-backports $ubuntu-security; do \
- for j in deb deb-src; do \
- echo "$j $url $i main restricted universe multiverse"; \
- done; \
- echo; \
- done) > /etc/apt/sources.list \
- && apt-get update \
- && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y \
- && dpkg-divert --local --rename --add /sbin/initctl \
- && ln -s /bin/true /sbin/initctl \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y devscripts \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
- alien \
- autoconf \
- autogen \
- automake \
- bc \
- bison \
- binutils-aarch64-linux-gnu \
- binutils-arm-linux-gnueabihf \
- bsd-mailx \
- build-essential \
- byacc \
- ccache \
- ccrypt \
- chrpath \
- clang \
- cmake \
- debhelper \
- dejagnu \
- dh-autoreconf \
- dh-translations \
- distro-info-data \
- emacs \
- fakeroot \
- flex \
- g++-multilib \
- gawk \
- gdb \
- gdbserver \
- git \
- git-review \
- groff \
- less \
- libexpat1-dev \
- libglib2.0-dev \
- liblzma-dev \
- libncurses5-dev \
- libpython2.7-dev \
- libreadline-dev \
- libssl-dev \
- libtcnative-1 \
- libtool \
- linux-tools-generic \
- lzop \
- make \
- mingw-w64 \
- net-tools \
- netcat \
- nfs-kernel-server \
- ninja-build \
- openjdk-8-jdk \
- openssh-server \
- pkg-config \
- python-dev \
- postfix \
- pxz \
- qemu-system-arm \
- qemu-user \
- rsync \
- subversion \
- sudo \
- tclsh \
- texinfo \
- texlive-fonts-recommended \
- texlive-latex-recommended \
- time \
- valgrind \
- vim \
- virtualenv \
- wget \
- wine \
- xz-utils \
- zip \
- zlib1g-dev \
- && apt-get clean \
- && rm -rf \
- /var/lib/apt/lists/* \
- /tmp/* \
- /var/tmp/*
-
-RUN install -D -p -m0755 /usr/share/doc/git/contrib/workdir/git-new-workdir /usr/local/bin/git-new-workdir \
- && sed -i -e 's:^session *required *pam_loginuid.so:# session required pam_loginuid.so:' /etc/pam.d/sshd \
- && mkdir -p /var/run/sshd \
- && sed -i \
- -e "/.*MaxStartups.*/d" \
- -e "/.*MaxSesssions.*/d" /etc/ssh/sshd_config \
- && echo "MaxStartups 256" >> /etc/ssh/sshd_config \
- && echo "MaxSessions 256" >> /etc/ssh/sshd_config
-
-COPY postfix-main.cf.in /etc/postfix/main.cf
-COPY postfix-sasl_password.in /etc/postfix/sasl_password
-
-RUN chown root:root /etc/postfix/sasl_password \
- && chmod 600 /etc/postfix/sasl_password
-
-RUN mkdir /tmp/docker-install-qemu.$$ \
- && cd /tmp/docker-install-qemu.$$ \
- && qemu_ver=2.8.0 && wget --progress=dot:giga http://download.qemu-project.org/qemu-${qemu_ver}.tar.xz \
- && tar xf qemu-${qemu_ver}.tar.xz \
- && mkdir build && cd build \
- && ../qemu-${qemu_ver}/configure --prefix=/usr/local --target-list=armeb-linux-user \
- && make all install -j $(nproc --all) \
- && cd && rm -rf /tmp/docker-install-qemu.$$
-
-# We use ssh multiplexing, which creates sockets in /tmp. Overlayfs,
-# which docker is using, can't host sockets, so we use a scratch mount
-# for /tmp. This requires that we add --rm option to "docker run"
-# invocations (e.g., mark "Remove volumes" checkbox in docker plugin) to
-# cleanup host directories used for the scratch mounts.
-VOLUME /tmp
-
-EXPOSE 22
-CMD ["linux32", "/usr/sbin/sshd", "-D"]
-# checksum: 79365fd7d8ee7258430265a506cbfed1
diff --git a/xenial-i386-tcwg-base/build.sh b/xenial-i386-tcwg-base/build.sh
deleted file mode 120000
index 67d8934e..00000000
--- a/xenial-i386-tcwg-base/build.sh
+++ /dev/null
@@ -1 +0,0 @@
-../tcwg-base/build.sh \ No newline at end of file
diff --git a/xenial-i386-tcwg-base/gerrit-branches b/xenial-i386-tcwg-base/gerrit-branches
deleted file mode 120000
index 3cbaca1d..00000000
--- a/xenial-i386-tcwg-base/gerrit-branches
+++ /dev/null
@@ -1 +0,0 @@
-../tcwg-base/gerrit-branches \ No newline at end of file
diff --git a/xenial-i386-tcwg-base/xenial-i386-tcwg-build/Dockerfile b/xenial-i386-tcwg-base/xenial-i386-tcwg-build/Dockerfile
deleted file mode 100644
index e2354abc..00000000
--- a/xenial-i386-tcwg-base/xenial-i386-tcwg-build/Dockerfile
+++ /dev/null
@@ -1,18 +0,0 @@
-# Auto generated from tcwg-base/tcwg-build/Dockerfile.in. Do not edit.
-FROM linaro/ci-i386-tcwg-base-ubuntu:xenial
-
-RUN groupadd -g 9000 tcwg-infra \
- && useradd -m -g tcwg-infra -G kvm -u 11827 tcwg-buildslave \
- && useradd -m -g tcwg-infra -G kvm -u 12326 tcwg-benchmark \
- && echo '%tcwg-infra ALL = NOPASSWD: ALL' > /etc/sudoers.d/jenkins \
- && chmod 0440 /etc/sudoers.d/jenkins \
- && mkdir -p /home/tcwg-buildslave/workspace
-
-COPY tcwg-buildslave /home/tcwg-buildslave
-COPY tcwg-benchmark /home/tcwg-benchmark
-
-RUN chown -R tcwg-buildslave:tcwg-infra /home/tcwg-buildslave/ \
- && chown -R tcwg-benchmark:tcwg-infra /home/tcwg-benchmark/ \
- && chmod 0700 /home/tcwg-buildslave/.ssh/ /home/tcwg-benchmark/.ssh/ \
- && chmod 0600 /home/tcwg-buildslave/.ssh/* /home/tcwg-benchmark/.ssh/*
-# checksum: d3ad0282af3e17dd2bc7562dcf7c3bd9
diff --git a/xenial-i386-tcwg-base/xenial-i386-tcwg-build/build.sh b/xenial-i386-tcwg-base/xenial-i386-tcwg-build/build.sh
deleted file mode 120000
index 50162e02..00000000
--- a/xenial-i386-tcwg-base/xenial-i386-tcwg-build/build.sh
+++ /dev/null
@@ -1 +0,0 @@
-../../tcwg-base/tcwg-build/build.sh \ No newline at end of file
diff --git a/xenial-i386-tcwg-base/xenial-i386-tcwg-build/gerrit-branches b/xenial-i386-tcwg-base/xenial-i386-tcwg-build/gerrit-branches
deleted file mode 120000
index 628350a5..00000000
--- a/xenial-i386-tcwg-base/xenial-i386-tcwg-build/gerrit-branches
+++ /dev/null
@@ -1 +0,0 @@
-../../tcwg-base/tcwg-build/gerrit-branches \ No newline at end of file
diff --git a/xenial-i386-tcwg-base/xenial-i386-tcwg-dev/Dockerfile b/xenial-i386-tcwg-base/xenial-i386-tcwg-dev/Dockerfile
deleted file mode 100644
index d0603797..00000000
--- a/xenial-i386-tcwg-base/xenial-i386-tcwg-dev/Dockerfile
+++ /dev/null
@@ -1,49 +0,0 @@
-# Auto generated from tcwg-base/tcwg-dev/Dockerfile.in. Do not edit.
-FROM linaro/ci-i386-tcwg-base-ubuntu:xenial
-
-COPY run.sh .
-COPY start.sh .
-
-RUN apt-get update \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y \
- software-properties-common \
- && apt-get clean \
- && rm -rf \
- /var/lib/apt/lists/* \
- /tmp/* \
- /var/tmp/*
-
-RUN apt-get update \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y \
- apt-file \
- git-gui \
- git-svn \
- gnat-5 \
- less \
- locales \
- libgmp-dev \
- libmpc-dev \
- libmpfr-dev \
- mc \
- screen \
- stgit \
- tmux \
- unifdef \
- && apt-get clean \
- && rm -rf \
- /var/lib/apt/lists/* \
- /tmp/* \
- /var/tmp/*
-
-RUN sed -i -e '/.*AuthorizedKeysFile/ d' /etc/ssh/sshd_config \
- && echo "AuthorizedKeysFile %h/.ssh/authorized_keys.docker" >> /etc/ssh/sshd_config \
- && locale-gen en_US.UTF-8 && update-locale LANG=en_US.UTF-8 \
- && apt-file update
-
-# Create directories required for X11.
-RUN mkdir -p /tmp/.X11-unix /tmp/.ICE-unix \
- && chmod 1777 /tmp/.X11-unix /tmp/.ICE-unix
-
-ENTRYPOINT ["linux32", "/run.sh"]
-CMD ["start.sh"]
-# checksum: d4713d03be137a74e7d172adec5fd118
diff --git a/xenial-i386-tcwg-base/xenial-i386-tcwg-dev/build.sh b/xenial-i386-tcwg-base/xenial-i386-tcwg-dev/build.sh
deleted file mode 120000
index e8571a37..00000000
--- a/xenial-i386-tcwg-base/xenial-i386-tcwg-dev/build.sh
+++ /dev/null
@@ -1 +0,0 @@
-../../tcwg-base/tcwg-dev/build.sh \ No newline at end of file
diff --git a/xenial-i386-tcwg-base/xenial-i386-tcwg-dev/gerrit-branches b/xenial-i386-tcwg-base/xenial-i386-tcwg-dev/gerrit-branches
deleted file mode 120000
index cd148228..00000000
--- a/xenial-i386-tcwg-base/xenial-i386-tcwg-dev/gerrit-branches
+++ /dev/null
@@ -1 +0,0 @@
-../../tcwg-base/tcwg-dev/gerrit-branches \ No newline at end of file