Config file for packages and templates.
+Update the lists in this file to require new packages in the
+container images used in GitLab CI
+
Author: Joe Guo <joeg@catalyst.net.nz>
"""
import os
from os.path import abspath, dirname, join
HERE = abspath(dirname(__file__))
# output dir for rendered files
-OUT = join(HERE, 'dists')
+OUT = join(HERE, 'generated-dists')
# pkgs with same name in all packaging systems
'autoconf',
'binutils',
'bison',
+ 'ccache',
'curl',
+ 'chrpath',
+ 'flex',
'gcc',
'gdb',
'git',
+ 'gzip',
+ 'hostname',
'htop',
+ 'lcov',
'make',
+ 'patch',
'perl',
'psmisc', # for pstree in test
'rng-tools',
+ 'rsync',
'sed',
'sudo', # docker images has no sudo by default
+ 'tar',
'tree',
+ 'wget',
]
# deb, rpm, ...
PKGS = [
# NAME1-dev, NAME2-devel
- ('lmdb-utils', 'lmdb-devel'),
- ('nettle-dev', 'nettle-devel'),
+ ('lmdb-utils', 'lmdb'),
+ ('mingw-w64', 'mingw64-gcc'),
('zlib1g-dev', 'zlib-devel'),
('libbsd-dev', 'libbsd-devel'),
- ('libaio-dev', 'libaio-devel'),
+ ('liburing-dev', 'liburing-devel'),
('libarchive-dev', 'libarchive-devel'),
('libblkid-dev', 'libblkid-devel'),
('libcap-dev', 'libcap-devel'),
('libgpgme11-dev', 'gpgme-devel'),
# NOTE: Debian 8+ and Ubuntu 14.04+
('libgnutls28-dev', 'gnutls-devel'),
- ('libtasn1-bin', ''),
+ ('libtasn1-bin', 'libtasn1-tools'),
('libtasn1-dev', 'libtasn1-devel'),
('', 'quota-devel'),
('uuid-dev', 'libuuid-devel'),
('libdbus-1-dev', 'dbus-devel'),
('libpcap-dev', 'libpcap-devel'),
('libunwind-dev', 'libunwind-devel'), # for back trace
+ ('libglib2.0-dev', 'glib2-devel'),
+ ('libicu-dev', 'libicu-devel'),
+ ('heimdal-multidev', ''),
# NAME1, NAME2
# for debian, locales provide locale support with language packs
('bind9utils', 'bind-utils'),
('dnsutils', ''),
('xsltproc', 'libxslt'),
- ('krb5-user', ''),
+ ('krb5-user', 'krb5-workstation'),
('krb5-config', ''),
- ('', 'krb5-server'),
+ ('krb5-kdc', 'krb5-server'),
('apt-utils', 'yum-utils'),
('pkg-config', 'pkgconfig'),
('procps', 'procps-ng'), # required for the free cmd in tests
- ('lsb-release', 'redhat-lsb'), # we need lsb_relase to show info
+ ('lsb-release', 'lsb-release'), # we need lsb_relase to show info
('', 'rpcgen'), # required for test
# refer: https://fedoraproject.org/wiki/Changes/SunRPCRemoval
('', 'libtirpc-devel'), # for <rpc/rpc.h> header on fedora
- ('', 'libnsl2-devel'), # for <rpcsvc/yp_prot.h> header on fedora
+ ('', 'rpcsvc-proto-devel'), # for <rpcsvc/rquota.h> header
('mawk', 'gawk'),
- # python
- ('python-dev', 'python-devel'),
- ('python-dbg', ''),
- ('python-iso8601', ''),
- ('python-gpg', 'python2-gpg'), # defaults to ubuntu/fedora latest
- ('python-crypto', 'python-crypto'),
- ('python-markdown', 'python-markdown'),
- ('python-dnspython', 'python-dns'),
- ('python-pexpect', ''), # for wintest only
-
+ ('python3', 'python3'),
+ ('python3-cryptography', 'python3-cryptography'), # for krb5 tests
('python3-dev', 'python3-devel'),
('python3-dbg', ''),
- ('python3-iso8601', ''),
+ ('python3-iso8601', 'python3-iso8601'),
('python3-gpg', 'python3-gpg'), # defaults to ubuntu/fedora latest
- ('python3-crypto', 'python3-crypto'),
('python3-markdown', 'python3-markdown'),
('python3-matplotlib', ''),
('python3-dnspython', 'python3-dns'),
('python3-pexpect', ''), # for wintest only
+ ('python3-pyasn1', 'python3-pyasn1'), # for krb5 tests
+ ('python3-setproctitle', 'python3-setproctitle'),
- ('', 'libsemanage-python'),
- ('', 'policycoreutils-python'),
+ ('', 'python3-libsemanage'),
+ ('', 'python3-policycoreutils'),
# perl
('libparse-yapp-perl', 'perl-Parse-Yapp'),
- ('libjson-perl', 'perl-JSON-Parse'),
+ ('libjson-perl', 'perl-JSON'),
+ ('', 'perl-JSON-Parse'),
('perl-modules', ''),
+ ('', 'perl-FindBin'),
('', 'perl-Archive-Tar'),
('', 'perl-ExtUtils-MakeMaker'),
('', 'perl-Test-Base'),
('', 'perl-generators'),
('', 'perl-interpreter'),
+ # fs
+ ('xfslibs-dev', 'xfsprogs-devel'), # for xfs quota support
+ ('', 'glusterfs-api-devel'),
+ ('glusterfs-common', 'glusterfs-devel'),
+ ('libcephfs-dev', 'libcephfs-devel'),
+
+ # spotlight
+ ('libtracker-sparql-2.0-dev', 'tracker-devel'),
+
# misc
# @ means group for rpm, use fedora as rpm default
('build-essential', '@development-tools'),
# rpm has no pkg for docbook-xml
('docbook-xml', 'docbook-dtds'),
('docbook-xsl', 'docbook-style-xsl'),
- ('flex', ''),
('', 'keyutils-libs-devel'),
-
+ ('', 'which'),
]
DEB_PKGS = COMMON + [pkg for pkg, _ in PKGS if pkg]
RPM_PKGS = COMMON + [pkg for _, pkg in PKGS if pkg]
+GENERATED_MARKER = r"""
+#
+# This file is generated by 'bootstrap/template.py --render'
+# See also bootstrap/config.py
+#
+"""
+
APT_BOOTSTRAP = r"""
#!/bin/bash
+{GENERATED_MARKER}
set -xueo pipefail
export DEBIAN_FRONTEND=noninteractive
YUM_BOOTSTRAP = r"""
#!/bin/bash
+{GENERATED_MARKER}
set -xueo pipefail
-yum -y -q update
-yum -y -q install epel-release
-yum -y -q update
+yum update -y
+yum install -y epel-release
+yum install -y yum-plugin-copr
+yum copr enable -y sergiomb/SambaAD
+yum update -y
-yum -y -q --verbose install \
+yum install -y \
{pkgs}
yum clean all
+
+if [ ! -f /usr/bin/python3 ]; then
+ ln -sf /usr/bin/python3.6 /usr/bin/python3
+fi
"""
+CENTOS8S_YUM_BOOTSTRAP = r"""
+#!/bin/bash
+{GENERATED_MARKER}
+set -xueo pipefail
+
+yum update -y
+yum install -y dnf-plugins-core
+yum install -y epel-release
+
+yum -v repolist all
+yum config-manager --set-enabled powertools -y || \
+ yum config-manager --set-enabled powertools -y
+
+yum update -y
+
+yum install -y \
+ --setopt=install_weak_deps=False \
+ {pkgs}
+
+yum clean all
+"""
DNF_BOOTSTRAP = r"""
#!/bin/bash
+{GENERATED_MARKER}
set -xueo pipefail
-dnf -y -q update
+dnf update -y
-dnf -y -q --verbose install \
+dnf install -y \
+ --setopt=install_weak_deps=False \
{pkgs}
dnf clean all
"""
+ZYPPER_BOOTSTRAP = r"""
+#!/bin/bash
+{GENERATED_MARKER}
+set -xueo pipefail
+
+zypper --non-interactive refresh
+zypper --non-interactive update
+zypper --non-interactive install \
+ --no-recommends \
+ system-user-nobody \
+ {pkgs}
+
+zypper --non-interactive clean
+
+if [ -f /usr/lib/mit/bin/krb5-config ]; then
+ ln -sf /usr/lib/mit/bin/krb5-config /usr/bin/krb5-config
+fi
+"""
# A generic shell script to setup locale
LOCALE_SETUP = r"""
#!/bin/bash
+{GENERATED_MARKER}
set -xueo pipefail
# refer to /usr/share/i18n/locales
DOCKERFILE = r"""
+{GENERATED_MARKER}
FROM {docker_image}
+# pass in with --build-arg while build
+ARG SHA1SUM
+RUN [ -n $SHA1SUM ] && echo $SHA1SUM > /sha1sum.txt
+
ADD *.sh /tmp/
# need root permission, do it before USER samba
RUN /tmp/bootstrap.sh && /tmp/locale.sh
+# if ld.gold exists, force link it to ld
+RUN set -x; LD=$(which ld); LD_GOLD=$(which ld.gold); test -x $LD_GOLD && ln -sf $LD_GOLD $LD && test -x $LD && echo "$LD is now $LD_GOLD"
+# if ld.mold exists, force link it to ld (prefer mold over gold! ;-)
+RUN set -x; LD=$(which ld); LD_MOLD=$(which ld.mold); test -x $LD_MOLD && ln -sf $LD_MOLD $LD && test -x $LD && echo "$LD is now $LD_MOLD"
+
# make test can not work with root, so we have to create a new user
-RUN useradd -m -s /bin/bash samba && \
+RUN useradd -m -U -s /bin/bash samba && \
mkdir -p /etc/sudoers.d && \
echo "samba ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/samba
# global Vagrantfile with snippets for all dists
VAGRANTFILE_GLOBAL = r"""
+{GENERATED_MARKER}
+
Vagrant.configure("2") do |config|
config.ssh.insert_key = false
DEB_DISTS = {
- 'debian7': {
- 'docker_image': 'debian:7',
- 'vagrant_box': 'debian/wheezy64',
- 'replace': {
- 'libgnutls28-dev': 'libgnutls-dev',
- 'libsystemd-dev': '', # not available, remove
- 'lmdb-utils': '', # not available, remove
- 'liblmdb-dev': '', # not available, remove
- 'python-gpg': 'python-gpgme',
- 'python3-gpg': '', # no python3 gpg pkg available, remove
- 'language-pack-en': '', # included in locales
- }
- },
- 'debian8': {
- 'docker_image': 'debian:8',
- 'vagrant_box': 'debian/jessie64',
+ 'debian10': {
+ 'docker_image': 'debian:10',
+ 'vagrant_box': 'debian/buster64',
'replace': {
- 'python-gpg': 'python-gpgme',
- 'python3-gpg': 'python3-gpgme',
'language-pack-en': '', # included in locales
+ 'liburing-dev': '', # not available
}
},
- 'debian9': {
- 'docker_image': 'debian:9',
- 'vagrant_box': 'debian/stretch64',
+ 'debian11': {
+ 'docker_image': 'debian:11',
+ 'vagrant_box': 'debian/bullseye64',
'replace': {
'language-pack-en': '', # included in locales
}
},
- 'ubuntu1404': {
- 'docker_image': 'ubuntu:14.04',
- 'vagrant_box': 'ubuntu/trusty64',
+ 'ubuntu1804': {
+ 'docker_image': 'ubuntu:18.04',
+ 'vagrant_box': 'ubuntu/bionic64',
'replace': {
- 'libsystemd-dev': '', # remove
- 'libgnutls28-dev': 'libgnutls-dev',
- 'python-gpg': 'python-gpgme',
- 'python3-gpg': 'python3-gpgme',
- 'lmdb-utils': 'lmdb-utils/trusty-backports',
- 'liblmdb-dev': 'liblmdb-dev/trusty-backports',
- 'libunwind-dev': 'libunwind8-dev',
+ 'liburing-dev': '', # not available
}
},
- 'ubuntu1604': {
- 'docker_image': 'ubuntu:16.04',
- 'vagrant_box': 'ubuntu/xenial64',
+ 'ubuntu2004': {
+ 'docker_image': 'ubuntu:20.04',
+ 'vagrant_box': 'ubuntu/focal64',
'replace': {
- 'python-gpg': 'python-gpgme',
- 'python3-gpg': 'python3-gpgme',
+ 'liburing-dev': '', # not available
}
},
- 'ubuntu1804': {
- 'docker_image': 'ubuntu:18.04',
- 'vagrant_box': 'ubuntu/bionic64',
- },
}
RPM_DISTS = {
- 'centos6': {
- 'docker_image': 'centos:6',
- 'vagrant_box': 'centos/6',
- 'bootstrap': YUM_BOOTSTRAP,
- 'replace': {
- 'python3-devel': 'python34-devel',
- 'python2-gpg': 'pygpgme',
- 'python3-gpg': '', # no python3-gpg yet
- '@development-tools': '"@Development Tools"', # add quotes
- 'glibc-langpack-en': '', # included in glibc-common
- 'glibc-locale-source': '', # included in glibc-common
- 'procps-ng': 'procps', # centos6 still use old name
- # update perl core modules on centos
- # fix: Can't locate Archive/Tar.pm in @INC
- 'perl': 'perl-core',
- }
- },
'centos7': {
'docker_image': 'centos:7',
'vagrant_box': 'centos/7',
'bootstrap': YUM_BOOTSTRAP,
'replace': {
- 'python3-devel': 'python34-devel',
+ 'lsb-release': 'redhat-lsb',
+ 'python3': 'python36',
+ 'python3-cryptography': 'python36-cryptography',
+ 'python3-devel': 'python36-devel',
+ 'python3-dns': 'python36-dns',
+ 'python3-pyasn1': 'python36-pyasn1',
+ 'python3-gpg': 'python36-gpg',
+ 'python3-iso8601' : 'python36-iso8601',
+ 'python3-markdown': 'python36-markdown',
# although python36-devel is available
# after epel-release installed
- # however, all other python3 pkgs are still python34-ish
+ # however, all other python3 pkgs are still python36-ish
'python2-gpg': 'pygpgme',
'python3-gpg': '', # no python3-gpg yet
'@development-tools': '"@Development Tools"', # add quotes
# update perl core modules on centos
# fix: Can't locate Archive/Tar.pm in @INC
'perl': 'perl-core',
+ 'perl-FindBin': '',
+ 'rpcsvc-proto-devel': '',
+ 'glusterfs-api-devel': '',
+ 'glusterfs-devel': '',
+ 'libcephfs-devel': '',
+ 'gnutls-devel': 'compat-gnutls37-devel',
+ 'liburing-devel': '', # not available
+ 'python3-setproctitle': 'python36-setproctitle',
+ 'tracker-devel': '', # do not install
}
},
- 'fedora28': {
- 'docker_image': 'fedora:28',
- 'vagrant_box': 'fedora/28-cloud-base',
+ 'centos8s': {
+ 'docker_image': 'quay.io/centos/centos:stream8',
+ 'vagrant_box': 'centos/stream8',
+ 'bootstrap': CENTOS8S_YUM_BOOTSTRAP,
+ 'replace': {
+ 'lsb-release': 'redhat-lsb',
+ '@development-tools': '"@Development Tools"', # add quotes
+ 'lcov': '', # does not exist
+ 'perl-JSON-Parse': '', # does not exist?
+ 'perl-Test-Base': 'perl-Test-Simple',
+ 'perl-FindBin': '',
+ 'liburing-devel': '', # not available yet, Add me back, once available!
+ }
+ },
+ 'fedora34': {
+ 'docker_image': 'fedora:34',
+ 'vagrant_box': 'fedora/34-cloud-base',
'bootstrap': DNF_BOOTSTRAP,
+ 'replace': {
+ 'lsb-release': 'redhat-lsb',
+ 'perl-FindBin': '',
+ 'python3-iso8601': 'python3-dateutil',
+ 'libtracker-sparql-2.0-dev': '', # only tracker 3.x is available
+ }
},
- 'fedora29': {
- 'docker_image': 'fedora:29',
- 'vagrant_box': 'fedora/29-cloud-base',
+ 'fedora35': {
+ 'docker_image': 'fedora:35',
+ 'vagrant_box': 'fedora/35-cloud-base',
'bootstrap': DNF_BOOTSTRAP,
+ 'replace': {
+ 'lsb-release': 'redhat-lsb',
+ 'perl-FindBin': '',
+ 'python3-iso8601': 'python3-dateutil',
+ 'libtracker-sparql-2.0-dev': '', # only tracker 3.x is available
+ }
+ },
+ 'opensuse151': {
+ 'docker_image': 'opensuse/leap:15.1',
+ 'vagrant_box': 'opensuse/openSUSE-15.1-x86_64',
+ 'bootstrap': ZYPPER_BOOTSTRAP,
+ 'replace': {
+ '@development-tools': '',
+ 'dbus-devel': 'dbus-1-devel',
+ 'docbook-style-xsl': 'docbook-xsl-stylesheets',
+ 'glibc-common': 'glibc-locale',
+ 'glibc-locale-source': 'glibc-i18ndata',
+ 'glibc-langpack-en': '',
+ 'jansson-devel': 'libjansson-devel',
+ 'keyutils-libs-devel': 'keyutils-devel',
+ 'krb5-workstation': 'krb5-client',
+ 'python3-libsemanage': 'python2-semanage',
+ 'openldap-devel': 'openldap2-devel',
+ 'perl-Archive-Tar': 'perl-Archive-Tar-Wrapper',
+ 'perl-JSON-Parse': 'perl-JSON-XS',
+ 'perl-generators': '',
+ 'perl-interpreter': '',
+ 'perl-FindBin': '',
+ 'procps-ng': 'procps',
+ 'python3-dns': 'python3-dnspython',
+ 'python3-markdown': 'python3-Markdown',
+ 'quota-devel': '',
+ 'glusterfs-api-devel': '',
+ 'libtasn1-tools': '', # asn1Parser is part of libtasn1
+ 'mingw64-gcc': '', # doesn't exist
+ 'liburing-devel': '', # not available
+ }
},
+ 'opensuse152': {
+ 'docker_image': 'opensuse/leap:15.2',
+ 'vagrant_box': 'opensuse/openSUSE-15.2-x86_64',
+ 'bootstrap': ZYPPER_BOOTSTRAP,
+ 'replace': {
+ '@development-tools': '',
+ 'dbus-devel': 'dbus-1-devel',
+ 'docbook-style-xsl': 'docbook-xsl-stylesheets',
+ 'glibc-common': 'glibc-locale',
+ 'glibc-locale-source': 'glibc-i18ndata',
+ 'glibc-langpack-en': '',
+ 'jansson-devel': 'libjansson-devel',
+ 'keyutils-libs-devel': 'keyutils-devel',
+ 'krb5-workstation': 'krb5-client',
+ 'python3-libsemanage': 'python2-semanage',
+ 'openldap-devel': 'openldap2-devel',
+ 'perl-Archive-Tar': 'perl-Archive-Tar-Wrapper',
+ 'perl-JSON-Parse': 'perl-JSON-XS',
+ 'perl-generators': '',
+ 'perl-interpreter': '',
+ 'perl-FindBin': '',
+ 'procps-ng': 'procps',
+ 'python3-iso8601': 'python3-python-dateutil',
+ 'python3-dns': 'python3-dnspython',
+ 'python3-markdown': 'python3-Markdown',
+ 'quota-devel': '',
+ 'glusterfs-api-devel': '',
+ 'libtasn1-tools': '', # asn1Parser is part of libtasn1
+ }
+ }
}
config['name'] = name
config['home'] = join(OUT, name)
config['family'] = family['name']
+ config['GENERATED_MARKER'] = GENERATED_MARKER
# replace dist specific pkgs
replace = config.get('replace', {})
dists[dist]['vagrantfile_snippet']
for dist in sorted(dists.keys())]
- return VAGRANTFILE_GLOBAL.format(vagrantfile_snippets=''.join(snippets))
+ return VAGRANTFILE_GLOBAL.format(
+ vagrantfile_snippets=''.join(snippets),
+ GENERATED_MARKER=GENERATED_MARKER
+ )
VAGRANTFILE = render_vagrantfile(DISTS)