diff --git a/src/dev/build/args.test.ts b/src/dev/build/args.test.ts index 64d89a650e62e6..d475e5b22a0636 100644 --- a/src/dev/build/args.test.ts +++ b/src/dev/build/args.test.ts @@ -28,10 +28,10 @@ it('build default and oss dist for current platform, without packages, by defaul "buildOptions": Object { "createArchives": true, "createDebPackage": false, - "createDockerCentOS": false, "createDockerCloud": false, "createDockerContexts": true, "createDockerUBI": false, + "createDockerUbuntu": false, "createExamplePlugins": false, "createGenericFolders": true, "createPlatformFolders": true, @@ -55,10 +55,10 @@ it('builds packages if --all-platforms is passed', () => { "buildOptions": Object { "createArchives": true, "createDebPackage": true, - "createDockerCentOS": true, "createDockerCloud": false, "createDockerContexts": true, "createDockerUBI": true, + "createDockerUbuntu": true, "createExamplePlugins": false, "createGenericFolders": true, "createPlatformFolders": true, @@ -82,10 +82,10 @@ it('limits packages if --rpm passed with --all-platforms', () => { "buildOptions": Object { "createArchives": true, "createDebPackage": false, - "createDockerCentOS": false, "createDockerCloud": false, "createDockerContexts": true, "createDockerUBI": false, + "createDockerUbuntu": false, "createExamplePlugins": false, "createGenericFolders": true, "createPlatformFolders": true, @@ -109,10 +109,10 @@ it('limits packages if --deb passed with --all-platforms', () => { "buildOptions": Object { "createArchives": true, "createDebPackage": true, - "createDockerCentOS": false, "createDockerCloud": false, "createDockerContexts": true, "createDockerUBI": false, + "createDockerUbuntu": false, "createExamplePlugins": false, "createGenericFolders": true, "createPlatformFolders": true, @@ -137,10 +137,10 @@ it('limits packages if --docker passed with --all-platforms', () => { "buildOptions": Object { "createArchives": true, "createDebPackage": false, - "createDockerCentOS": true, "createDockerCloud": false, "createDockerContexts": true, "createDockerUBI": true, + "createDockerUbuntu": true, "createExamplePlugins": false, "createGenericFolders": true, "createPlatformFolders": true, @@ -172,10 +172,10 @@ it('limits packages if --docker passed with --skip-docker-ubi and --all-platform "buildOptions": Object { "createArchives": true, "createDebPackage": false, - "createDockerCentOS": true, "createDockerCloud": false, "createDockerContexts": true, "createDockerUBI": false, + "createDockerUbuntu": true, "createExamplePlugins": false, "createGenericFolders": true, "createPlatformFolders": true, @@ -193,17 +193,17 @@ it('limits packages if --docker passed with --skip-docker-ubi and --all-platform `); }); -it('limits packages if --all-platforms passed with --skip-docker-centos', () => { - expect(readCliArgs(['node', 'scripts/build', '--all-platforms', '--skip-docker-centos'])) +it('limits packages if --all-platforms passed with --skip-docker-ubuntu', () => { + expect(readCliArgs(['node', 'scripts/build', '--all-platforms', '--skip-docker-ubuntu'])) .toMatchInlineSnapshot(` Object { "buildOptions": Object { "createArchives": true, "createDebPackage": true, - "createDockerCentOS": false, "createDockerCloud": false, "createDockerContexts": true, "createDockerUBI": true, + "createDockerUbuntu": false, "createExamplePlugins": false, "createGenericFolders": true, "createPlatformFolders": true, diff --git a/src/dev/build/args.ts b/src/dev/build/args.ts index 1124d90be89c6d..5619ab34ac359a 100644 --- a/src/dev/build/args.ts +++ b/src/dev/build/args.ts @@ -25,7 +25,7 @@ export function readCliArgs(argv: string[]) { 'docker-images', 'skip-docker-contexts', 'skip-docker-ubi', - 'skip-docker-centos', + 'skip-docker-ubuntu', 'docker-cloud', 'release', 'skip-node-download', @@ -102,8 +102,8 @@ export function readCliArgs(argv: string[]) { createExamplePlugins: Boolean(flags['example-plugins']), createRpmPackage: isOsPackageDesired('rpm'), createDebPackage: isOsPackageDesired('deb'), - createDockerCentOS: - isOsPackageDesired('docker-images') && !Boolean(flags['skip-docker-centos']), + createDockerUbuntu: + isOsPackageDesired('docker-images') && !Boolean(flags['skip-docker-ubuntu']), createDockerCloud: isOsPackageDesired('docker-images') && Boolean(flags['docker-cloud']), createDockerUBI: isOsPackageDesired('docker-images') && !Boolean(flags['skip-docker-ubi']), createDockerContexts: !Boolean(flags['skip-docker-contexts']), diff --git a/src/dev/build/build_distributables.ts b/src/dev/build/build_distributables.ts index 315f9270e785e1..81ea67d1c52f66 100644 --- a/src/dev/build/build_distributables.ts +++ b/src/dev/build/build_distributables.ts @@ -21,7 +21,7 @@ export interface BuildOptions { createRpmPackage: boolean; createDebPackage: boolean; createDockerUBI: boolean; - createDockerCentOS: boolean; + createDockerUbuntu: boolean; createDockerCloud: boolean; createDockerContexts: boolean; versionQualifier: string | undefined; @@ -119,9 +119,9 @@ export async function buildDistributables(log: ToolingLog, options: BuildOptions await run(Tasks.CreateDockerUBI); } - if (options.createDockerCentOS) { - // control w/ --docker-images or --skip-docker-centos or --skip-os-packages - await run(Tasks.CreateDockerCentOS); + if (options.createDockerUbuntu) { + // control w/ --docker-images or --skip-docker-ubuntu or --skip-os-packages + await run(Tasks.CreateDockerUbuntu); } if (options.createDockerCloud) { diff --git a/src/dev/build/cli.ts b/src/dev/build/cli.ts index c727c26d7dcd30..323a40d02de66b 100644 --- a/src/dev/build/cli.ts +++ b/src/dev/build/cli.ts @@ -41,7 +41,7 @@ if (showHelp) { --docker-images {dim Only build the Docker images} --docker-contexts {dim Only build the Docker build contexts} --skip-docker-ubi {dim Don't build the docker ubi image} - --skip-docker-centos {dim Don't build the docker centos image} + --skip-docker-ubuntu {dim Don't build the docker ubuntu image} --release {dim Produce a release-ready distributable} --version-qualifier {dim Suffix version with a qualifier} --skip-node-download {dim Reuse existing downloads of node.js} diff --git a/src/dev/build/tasks/os_packages/create_os_package_tasks.ts b/src/dev/build/tasks/os_packages/create_os_package_tasks.ts index 0a6faa2e95fa11..bafba3725f3276 100644 --- a/src/dev/build/tasks/os_packages/create_os_package_tasks.ts +++ b/src/dev/build/tasks/os_packages/create_os_package_tasks.ts @@ -50,20 +50,22 @@ export const CreateRpmPackage: Task = { }; const dockerBuildDate = new Date().toISOString(); -export const CreateDockerCentOS: Task = { - description: 'Creating Docker CentOS image', +export const CreateDockerUbuntu: Task = { + description: 'Creating Docker Ubuntu image', async run(config, log, build) { await runDockerGenerator(config, log, build, { architecture: 'x64', context: false, image: true, + ubuntu: true, dockerBuildDate, }); await runDockerGenerator(config, log, build, { architecture: 'aarch64', context: false, image: true, + ubuntu: true, dockerBuildDate, }); }, @@ -90,12 +92,14 @@ export const CreateDockerCloud: Task = { architecture: 'x64', context: false, cloud: true, + ubuntu: true, image: true, }); await runDockerGenerator(config, log, build, { architecture: 'aarch64', context: false, cloud: true, + ubuntu: true, image: true, }); }, diff --git a/src/dev/build/tasks/os_packages/docker_generator/run.ts b/src/dev/build/tasks/os_packages/docker_generator/run.ts index 715516c3807ec8..f999c9d9d1ffbc 100644 --- a/src/dev/build/tasks/os_packages/docker_generator/run.ts +++ b/src/dev/build/tasks/os_packages/docker_generator/run.ts @@ -31,13 +31,15 @@ export async function runDockerGenerator( context: boolean; image: boolean; ubi?: boolean; + ubuntu?: boolean; ironbank?: boolean; cloud?: boolean; dockerBuildDate?: string; } ) { - // UBI var config - const baseOSImage = flags.ubi ? 'docker.elastic.co/ubi8/ubi-minimal:latest' : 'centos:8'; + let baseOSImage = ''; + if (flags.ubuntu) baseOSImage = 'ubuntu:20.04'; + if (flags.ubi) baseOSImage = 'docker.elastic.co/ubi8/ubi-minimal:latest'; const ubiVersionTag = 'ubi8'; let imageFlavor = ''; @@ -85,6 +87,7 @@ export async function runDockerGenerator( baseOSImage, dockerBuildDate, ubi: flags.ubi, + ubuntu: flags.ubuntu, cloud: flags.cloud, metricbeatTarball, filebeatTarball, diff --git a/src/dev/build/tasks/os_packages/docker_generator/template_context.ts b/src/dev/build/tasks/os_packages/docker_generator/template_context.ts index 075a3a8808e73a..c8a3e91c80151c 100644 --- a/src/dev/build/tasks/os_packages/docker_generator/template_context.ts +++ b/src/dev/build/tasks/os_packages/docker_generator/template_context.ts @@ -21,6 +21,7 @@ export interface TemplateContext { dockerBuildDate: string; usePublicArtifact?: boolean; ubi?: boolean; + ubuntu?: boolean; cloud?: boolean; metricbeatTarball?: string; filebeatTarball?: string; diff --git a/src/dev/build/tasks/os_packages/docker_generator/templates/base/Dockerfile b/src/dev/build/tasks/os_packages/docker_generator/templates/base/Dockerfile index 3998b7d03a2ce2..4ffbb08a611df1 100644 --- a/src/dev/build/tasks/os_packages/docker_generator/templates/base/Dockerfile +++ b/src/dev/build/tasks/os_packages/docker_generator/templates/base/Dockerfile @@ -14,6 +14,9 @@ FROM {{{baseOSImage}}} AS builder {{#ubi}} RUN {{packageManager}} install -y findutils tar gzip {{/ubi}} +{{#ubuntu}} +RUN {{packageManager}} update && DEBIAN_FRONTEND=noninteractive {{packageManager}} install -y curl +{{/ubuntu}} {{#usePublicArtifact}} RUN cd /tmp && \ @@ -55,18 +58,28 @@ FROM {{{baseOSImage}}} EXPOSE 5601 {{#ubi}} - # https://github.com/rpm-software-management/microdnf/issues/50 - RUN mkdir -p /run/user/$(id -u) -{{/ubi}} - RUN for iter in {1..10}; do \ {{packageManager}} update --setopt=tsflags=nodocs -y && \ {{packageManager}} install --setopt=tsflags=nodocs -y \ - fontconfig freetype shadow-utils nss {{#ubi}}findutils{{/ubi}} && \ + fontconfig freetype shadow-utils nss findutils && \ {{packageManager}} clean all && exit_code=0 && break || exit_code=$? && echo "{{packageManager}} error: retry $iter in 10s" && \ sleep 10; \ done; \ (exit $exit_code) +{{/ubi}} +{{#ubuntu}} +RUN for iter in {1..10}; do \ + export DEBIAN_FRONTEND=noninteractive && \ + {{packageManager}} update && \ + {{packageManager}} upgrade -y && \ + {{packageManager}} install -y --no-install-recommends \ + fontconfig fonts-liberation libnss3 libfontconfig1 ca-certificates curl && \ + {{packageManager}} clean && \ + rm -rf /var/lib/apt/lists/* && exit_code=0 && break || exit_code=$? && echo "{{packageManager}} error: retry $iter in 10s" && \ + sleep 10; \ + done; \ + (exit $exit_code) +{{/ubuntu}} # Add an init process, check the checksum to make sure it's a match RUN set -e ; \ @@ -163,7 +176,7 @@ ENTRYPOINT ["/bin/tini", "--"] CMD ["/app/kibana.sh"] # Generate a stub command that will be overwritten at runtime RUN mkdir /app && \ - echo -e '#!/bin/sh\nexec /usr/local/bin/kibana-docker' > /app/kibana.sh && \ + echo -e '#!/bin/bash\nexec /usr/local/bin/kibana-docker' > /app/kibana.sh && \ chmod 0555 /app/kibana.sh {{/cloud}} diff --git a/src/dev/build/tasks/os_packages/docker_generator/templates/dockerfile.template.ts b/src/dev/build/tasks/os_packages/docker_generator/templates/dockerfile.template.ts index e668299a3acc38..94068f2b64b125 100755 --- a/src/dev/build/tasks/os_packages/docker_generator/templates/dockerfile.template.ts +++ b/src/dev/build/tasks/os_packages/docker_generator/templates/dockerfile.template.ts @@ -16,7 +16,7 @@ function generator(options: TemplateContext) { const dir = options.ironbank ? 'ironbank' : 'base'; const template = readFileSync(resolve(__dirname, dir, './Dockerfile')); return Mustache.render(template.toString(), { - packageManager: options.ubi ? 'microdnf' : 'yum', + packageManager: options.ubi ? 'microdnf' : 'apt-get', ...options, }); }