Page MenuHomePhabricator

Provide nodejs20 base images for production
Closed, ResolvedPublic

Description

Per upstream's release chart, NodeJS 18 is now in maintenance mode; NodeJS 20 is LTS until October, and NodeJS 22 comes out next week (2024-04-23).

Would it be possible to provide nodejs20-slim and nodejs20-devel production base images?

Event Timeline

nodejs20 isn't even on trixie/sid right now https://packages.debian.org/trixie/nodejs, https://packages.debian.org/sid/nodejs but only in experimental.

I am adding @MoritzMuehlenhoff to advise. Since we bring in nodejs via https://deb.nodesource.com/ in some cases in our repos, it might be doable.

That's not problem. We should just use the nodesource packages for this, we've been doing the same for "intermediate LTSes" before (e.g. node 16 or node 14) not covered by an intree Debian nodejs version. I'll work on this next week.

That's not problem. We should just use the nodesource packages for this, we've been doing the same for "intermediate LTSes" before (e.g. node 16 or node 14) not covered by an intree Debian nodejs version. I'll work on this next week.

Perfect, thanks for this!

Change #1024663 had a related patch set uploaded (by Muehlenhoff; author: Muehlenhoff):

[operations/puppet@production] aptrepo: Add new repository component and repo sync config for Node 20

https://gerrit.wikimedia.org/r/1024663

Change #1024663 merged by Muehlenhoff:

[operations/puppet@production] aptrepo: Add new repository component and repo sync config for Node 20

https://gerrit.wikimedia.org/r/1024663

Change #1026873 had a related patch set uploaded (by Muehlenhoff; author: Muehlenhoff):

[operations/docker-images/production-images@master] Add node20 production image

https://gerrit.wikimedia.org/r/1026873

Mentioned in SAL (#wikimedia-operations) [2024-05-07T15:19:38Z] <moritzm> imported nodejs 20.5.1-deb-1nodesource1 to thirdparty/node20 T362681

Change #1026873 merged by Muehlenhoff:

[operations/docker-images/production-images@master] Add node20 production image

https://gerrit.wikimedia.org/r/1026873

I kicked off a build of the node20 image, it should hopefully appear in the registry soon.

I kicked off a build of the node20 image, it should hopefully appear in the registry soon.

Not there yet; did the build get stuck/break?

I kicked off a build of the node20 image, it should hopefully appear in the registry soon.

Not there yet; did the build get stuck/break?

OK, after the weekend it's now shown up, and works great. Thank you!

I kicked off a build of the node20 image, it should hopefully appear in the registry soon.

Not there yet; did the build get stuck/break?

OK, after the weekend it's now shown up, and works great. Thank you!

Great :-)

It seems the image has some issues with dependencies. See: https://integration.wikimedia.org/ci/job/cxserver-pipeline-test/582/console cc @MoritzMuehlenhoff

Despite being named -slim it includes npm; don't try to re-install it, and it works fine.

It seems the image has some issues with dependencies. See: https://integration.wikimedia.org/ci/job/cxserver-pipeline-test/582/console cc @MoritzMuehlenhoff

Despite being named -slim it includes npm; don't try to re-install it, and it works fine.

Thanks! Removing 'npm' works!

Do we know what libraries are included in the node20 image vs the node18 one? I recently had to install libssl-dev to get a service working on node20.

Do we know what libraries are included in the node20 image vs the node18 one? I recently had to install libssl-dev to get a service working on node20.

You can find that with this:

$ podman run --rm -it --entrypoint dpkg docker-registry.wikimedia.org/nodejs20-slim:0.0.1-20250209 -l
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                        Version                 Architecture Description
+++-===========================-=======================-============-========================================================================
ii  adduser                     3.134                   all          add and remove users and groups
ii  apt                         2.6.1                   amd64        commandline package manager
ii  base-files                  12.4+deb12u9            amd64        Debian base system miscellaneous files
ii  base-passwd                 3.6.1                   amd64        Debian base system master password and group files
ii  bash                        5.2.15-2+b7             amd64        GNU Bourne Again SHell
ii  bsdutils                    1:2.38.1-5+deb12u3      amd64        basic utilities from 4.4BSD-Lite
ii  ca-certificates             20230311                all          Common CA certificates
ii  coreutils                   9.1-1                   amd64        GNU core utilities
ii  dash                        0.5.12-2                amd64        POSIX-compliant shell
ii  debconf                     1.5.82                  all          Debian configuration management system
ii  debian-archive-keyring      2023.3+deb12u1          all          GnuPG archive keys of the Debian archive
ii  debianutils                 5.7-0.5~deb12u1         amd64        Miscellaneous utilities specific to Debian
ii  diffutils                   1:3.8-4                 amd64        File comparison utilities
ii  dpkg                        1.21.22                 amd64        Debian package management system
ii  e2fsprogs                   1.47.0-2                amd64        ext2/ext3/ext4 file system utilities
ii  findutils                   4.9.0-4                 amd64        utilities for finding files--find, xargs
ii  gcc-12-base:amd64           12.2.0-14               amd64        GCC, the GNU Compiler Collection (base package)
ii  gpgv                        2.2.40-1.1              amd64        GNU privacy guard - signature verification tool
ii  grep                        3.8-5                   amd64        GNU grep, egrep and fgrep
ii  gzip                        1.12-1                  amd64        GNU compression utilities
ii  hostname                    3.23+nmu1               amd64        utility to set/show the host name or domain name
ii  init-system-helpers         1.65.2                  all          helper tools for all init systems
ii  libacl1:amd64               2.3.1-3                 amd64        access control list - shared library
ii  libapt-pkg6.0:amd64         2.6.1                   amd64        package management runtime library
ii  libattr1:amd64              1:2.5.1-4               amd64        extended attribute handling - shared library
ii  libaudit-common             1:3.0.9-1               all          Dynamic library for security auditing - common files
ii  libaudit1:amd64             1:3.0.9-1               amd64        Dynamic library for security auditing
ii  libblkid1:amd64             2.38.1-5+deb12u3        amd64        block device ID library
ii  libbz2-1.0:amd64            1.0.8-5+b1              amd64        high-quality block-sorting file compressor library - runtime
ii  libc-bin                    2.36-9+deb12u9          amd64        GNU C Library: Binaries
ii  libc6:amd64                 2.36-9+deb12u9          amd64        GNU C Library: Shared libraries
ii  libcap-ng0:amd64            0.8.3-1+b3              amd64        alternate POSIX capabilities library
ii  libcap2:amd64               1:2.66-4                amd64        POSIX 1003.1e capabilities (library)
ii  libcom-err2:amd64           1.47.0-2                amd64        common error description library
ii  libcrypt1:amd64             1:4.4.33-2              amd64        libcrypt shared library
ii  libdb5.3:amd64              5.3.28+dfsg2-1          amd64        Berkeley v5.3 Database Libraries [runtime]
ii  libdebconfclient0:amd64     0.270                   amd64        Debian Configuration Management System (C-implementation library)
ii  libexpat1:amd64             2.5.0-1+deb12u1         amd64        XML parsing C library - runtime library
ii  libext2fs2:amd64            1.47.0-2                amd64        ext2/ext3/ext4 file system libraries
ii  libffi8:amd64               3.4.4-1                 amd64        Foreign Function Interface library runtime
ii  libgcc-s1:amd64             12.2.0-14               amd64        GCC support library
ii  libgcrypt20:amd64           1.10.1-3                amd64        LGPL Crypto library - runtime library
ii  libgmp10:amd64              2:6.2.1+dfsg1-1.1       amd64        Multiprecision arithmetic library
ii  libgnutls30:amd64           3.7.9-2+deb12u3         amd64        GNU TLS library - main runtime library
ii  libgpg-error0:amd64         1.46-1                  amd64        GnuPG development runtime library
ii  libhogweed6:amd64           3.8.1-2                 amd64        low level cryptographic library (public-key cryptos)
ii  libidn2-0:amd64             2.3.3-1+b1              amd64        Internationalized domain names (IDNA2008/TR46) library
ii  liblz4-1:amd64              1.9.4-1                 amd64        Fast LZ compression algorithm library - runtime
ii  liblzma5:amd64              5.4.1-0.2               amd64        XZ-format compression library
ii  libmd0:amd64                1.0.4-2                 amd64        message digest functions from BSD systems - shared library
ii  libmount1:amd64             2.38.1-5+deb12u3        amd64        device mounting library
ii  libnettle8:amd64            3.8.1-2                 amd64        low level cryptographic library (symmetric and one-way cryptos)
ii  libp11-kit0:amd64           0.24.1-2                amd64        library for loading and coordinating access to PKCS#11 modules - runtime
ii  libpam-modules:amd64        1.5.2-6+deb12u1         amd64        Pluggable Authentication Modules for PAM
ii  libpam-modules-bin          1.5.2-6+deb12u1         amd64        Pluggable Authentication Modules for PAM - helper binaries
ii  libpam-runtime              1.5.2-6+deb12u1         all          Runtime support for the PAM library
ii  libpam0g:amd64              1.5.2-6+deb12u1         amd64        Pluggable Authentication Modules library
ii  libpcre2-8-0:amd64          10.42-1                 amd64        New Perl Compatible Regular Expression Library- 8 bit runtime files
ii  libpython3.11-minimal:amd64 3.11.2-6+deb12u5        amd64        Minimal subset of the Python language (version 3.11)
ii  libseccomp2:amd64           2.5.4-1+deb12u1         amd64        high level interface to Linux seccomp filter
ii  libselinux1:amd64           3.4-1+b6                amd64        SELinux runtime shared libraries
ii  libsemanage-common          3.4-1                   all          Common files for SELinux policy management libraries
ii  libsemanage2:amd64          3.4-1+b5                amd64        SELinux policy management library
ii  libsepol2:amd64             3.4-2.1                 amd64        SELinux library for manipulating binary security policies
ii  libsmartcols1:amd64         2.38.1-5+deb12u3        amd64        smart column output alignment library
ii  libss2:amd64                1.47.0-2                amd64        command-line interface parsing library
ii  libssl3:amd64               3.0.15-1~deb12u1        amd64        Secure Sockets Layer toolkit - shared libraries
ii  libstdc++6:amd64            12.2.0-14               amd64        GNU Standard C++ Library v3
ii  libsystemd0:amd64           252.33-1~deb12u1        amd64        systemd utility library
ii  libtasn1-6:amd64            4.19.0-2                amd64        Manage ASN.1 structures (runtime)
ii  libtinfo6:amd64             6.4-4                   amd64        shared low-level terminfo library for terminal handling
ii  libudev1:amd64              252.33-1~deb12u1        amd64        libudev shared library
ii  libunistring2:amd64         1.0-2                   amd64        Unicode string library for C
ii  libuuid1:amd64              2.38.1-5+deb12u3        amd64        Universally Unique ID library
ii  libxxhash0:amd64            0.8.1-1                 amd64        shared library for xxhash
ii  libzstd1:amd64              1.5.4+dfsg2-5           amd64        fast lossless compression algorithm
ii  login                       1:4.13+dfsg1-1+b1       amd64        system login tools
ii  logsave                     1.47.0-2                amd64        save the output of a command in a log file
ii  mawk                        1.3.4.20200120-3.1      amd64        Pattern scanning and text processing language
ii  mount                       2.38.1-5+deb12u3        amd64        tools for mounting and manipulating filesystems
ii  ncurses-base                6.4-4                   all          basic terminal type definitions
ii  ncurses-bin                 6.4-4                   amd64        terminal-related programs and man pages
ii  nodejs                      20.5.1-deb-1nodesource1 amd64        Node.js event-based server-side javascript engine
ii  openssl                     3.0.15-1~deb12u1        amd64        Secure Sockets Layer toolkit - cryptographic utility
ii  passwd                      1:4.13+dfsg1-1+b1       amd64        change and administer password and group data
ii  perl-base                   5.36.0-7+deb12u1        amd64        minimal Perl system
ii  python3-minimal             3.11.2-1+b1             amd64        minimal subset of the Python language (default python3 version)
ii  python3.11-minimal          3.11.2-6+deb12u5        amd64        Minimal subset of the Python language (version 3.11)
ii  sed                         4.9-1                   amd64        GNU stream editor for filtering/transforming text
ii  sysvinit-utils              3.06-4                  amd64        System-V-like utilities
ii  tar                         1.34+dfsg-1.2+deb12u1   amd64        GNU version of the tar archiving utility
ii  tzdata                      2024b-0+deb12u1         all          time zone and daylight-saving time data
ii  usr-is-merged               37~deb12u1              all          Transitional package to assert a merged-/usr system
ii  util-linux                  2.38.1-5+deb12u3        amd64        miscellaneous system utilities
ii  util-linux-extra            2.38.1-5+deb12u3        amd64        interactive login tools
ii  wmf-certificates            0~20231120              all          WMF internal CA bundles.
ii  zlib1g:amd64                1:1.2.13.dfsg-1         amd64        compression library - runtime

You can replace podman with docker if you have docker and not podman. The rest of the command is identical