Skip to content

feat(circleci): use portable glibc ci-cross-influxdb3#26124

Merged
jdstrand merged 2 commits intomainfrom
jdstrand/use-glibc-portable-compiler
Mar 12, 2025
Merged

feat(circleci): use portable glibc ci-cross-influxdb3#26124
jdstrand merged 2 commits intomainfrom
jdstrand/use-glibc-portable-compiler

Conversation

@jdstrand
Copy link
Contributor

@jdstrand jdstrand commented Mar 11, 2025

Closes #26010

This PR updates CircleCI to use an image of ci-support that uses crosstool-ng built toolchain (glibc 2.23 (kernel 3.10.108), binutils 2.28.1 and gcc 5.5.0) for building the Linux x86_64 and aarch64 official binaries with a more portable glibc (no changes for osx and windows; no changes for local Linux builds). The details of the toolchain changes can be seen in ci-support (private repo).

This PR also adds a pipeline parameter that allows persisting the debug builds from the build-dev job (it defaults to false to retain current behavior). I set this to true and examined the resulting Linux binaries and can see that we have good portability:

$ readelf -s ./aarch64-unknown-linux-gnu/influxdb3 | grep @GLIBC_ | sed 's/@@/@/' | cut -d @ -f 2 | cut -d ' ' -f 1 | sort -uV
GLIBC_2.17
GLIBC_2.18

$ readelf -s ./x86_64-unknown-linux-gnu/influxdb3 | grep @GLIBC_ | sed 's/@@/@/' | cut -d @ -f 2 | cut -d ' ' -f 1 | sort -uV
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.6
GLIBC_2.7
GLIBC_2.9
GLIBC_2.10
GLIBC_2.12
GLIBC_2.14
GLIBC_2.15
GLIBC_2.16
GLIBC_2.17
GLIBC_2.18

Compare this to current builds:

$ readelf -s ~/.influxdb/influxdb3 | grep @GLIBC_ | sed 's/@@/@/' | cut -d @ -f 2 | cut -d ' ' -f 1 | sort -uV
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.6
GLIBC_2.7
GLIBC_2.9
GLIBC_2.10
GLIBC_2.14
GLIBC_2.15
GLIBC_2.16
GLIBC_2.17
GLIBC_2.18
GLIBC_2.25
GLIBC_2.27
GLIBC_2.28
GLIBC_2.29
GLIBC_2.32
GLIBC_2.33
GLIBC_2.34
GLIBC_2.35

I've only smoke tested these binaries built from CircleCI (but I did extensive testing of the crosstool-ng toolchains and vetted this solution (see internal slack)). While I don't expect there to be any issues, I plan to do a full round of testing on these Linux binaries and will add followup commits if there are any issues (I'll report back here either way). Testing outlined in #26124 (comment)

Note: the ci-support repo provides the tooling for the check_package_* jobs in this repo and I'll be making changes there to add more checks (ie, to make sure we don't regress the GLIBC portability). I'll do a follow-up PR to this repo to update the ci-cross-influxdb3 image to pull in the changes.

References:

@jdstrand jdstrand marked this pull request as draft March 11, 2025 18:34
@jdstrand jdstrand force-pushed the jdstrand/use-glibc-portable-compiler branch from 3d179a3 to bfe4298 Compare March 11, 2025 19:51
@jdstrand jdstrand added the v3 label Mar 11, 2025
@jdstrand jdstrand force-pushed the jdstrand/use-glibc-portable-compiler branch 13 times, most recently from 71607ad to a31f6cd Compare March 12, 2025 03:49
@jdstrand jdstrand marked this pull request as ready for review March 12, 2025 04:12
@jdstrand jdstrand requested a review from hiltontj March 12, 2025 04:12
@jdstrand jdstrand force-pushed the jdstrand/use-glibc-portable-compiler branch from a31f6cd to 48b5e1a Compare March 12, 2025 04:16
@jdstrand
Copy link
Contributor Author

jdstrand commented Mar 12, 2025

I've only smoke tested these binaries built from CircleCI (but I did extensive testing of the crosstool-ng toolchains and vetted this solution (see internal slack)). While I don't expect there to be any issues, I plan to do a full round of testing on these Linux binaries and will add followup commits if there are any issues (I'll report back here either way).

TLDR> testing looks good

x86_64 full testing

Downloaded debug tarball from https://app.circleci.com/pipelines/github/influxdata/influxdb/44683/workflows/939d6723-dd8b-4a49-90d8-b7aa597f87bb/jobs/422875/artifacts, then extracted influxdb3 and performed patchelf --set-rpath '$ORIGIN/python/lib:$ORIGIN/../lib/influxdb3/python/lib' ./x86_64-unknown-linux-gnu/influxdb3 (the release builds CircleCI job does this for us, but not the build-dev job).

I've tested wide portability for OSes with glibc 2.23 or later: Amazon Linux 2+, Debian 9+, Fedora 41, Oracle 8+, Rocky Linux 8+ (for RHEL/CentOS), Ubuntu 16.04 LTS+. At this time, we got a couple of unintended bonus OSes (Debian 8 and Ubuntu 14.04) since while we target glibc 2.23, the resulting binaries only link symbols as high as 2.18, so I listed them here. Bonus OS portability could change in the future (eg, if rust/pyo3/libpython links to later glibc symbol versions).

Details
# used glibc symbol versions in influxdb3
$ readelf -s ./x86_64-unknown-linux-gnu/influxdb3 | grep -E '@GLIB(C|CXX)_' | sed 's/.*GLIB\(C\|CXX\)_\([0-9\.]\+\).*/GLIB\1_\2/g' | sort -uV
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.6
GLIBC_2.7
GLIBC_2.9
GLIBC_2.10
GLIBC_2.12
GLIBC_2.14
GLIBC_2.15
GLIBC_2.16
GLIBC_2.17
GLIBC_2.18

# used glibc symbol versions in python-build-standalone libpython3.11
$ readelf -s code/tmp/python-standalone/tarballs/20250221/x86_64-unknown-linux-gnu/python/lib/libpython3.11.so | grep -E '@GLIB(C|CXX)_' | sed 's/.*GLIB\(C\|CXX\)_\([0-9\.]\+\).*/GLIB\1_\2/g' | sort -uV
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_2.17

#
# Recreate test env simulating a tarball unpack with python beside influxdb3
#
# reinitialize dirs
$ for c in $(incus list --format csv | grep RUNNING | cut -d , -f 1) ; do echo "# $c" ; incus exec --user 1001 --group 1001 $c -- sh -c 'sudo rm -rf /home/jamie/tmp/influxdb3-pe/data/ /home/jamie/tmp/influxdb3-pe/install ; mkdir -p /home/jamie/tmp/influxdb3-pe/install/python /home/jamie/tmp/influxdb3-pe/data/plugins' ; echo ; done
# amzn-2

# amzn-2023

# debian-8

# debian-9

# debian-10

# debian-11

# debian-12

# fedora-41

# oracle-8

# oracle-9

# rocky-8

# rocky-9

# ubuntu-14

# ubuntu-16

# ubuntu-18

# ubuntu-20

# ubuntu-22

# ubuntu-24

# copy influxdb3 binary
$ for c in $(incus list --format csv | grep RUNNING | cut -d , -f 1) ; do echo "# $c" ; incus file push --uid 1001 --gid 1001 ~/code/tmp/python-standalone/glibc/influxdb3-builds/x86_64-unknown-linux-gnu/influxdb3 $c/home/jamie/tmp/influxdb3-pe/install/influxdb3 ; echo ; done
...

# copy python beside influxdb3
$ for c in $(incus list --format csv | grep RUNNING | cut -d , -f 1) ; do echo "# $c" ; incus file push --uid 1001 --gid 1001 ~/code/tmp/python-standalone/tarballs/20250221/x86_64-unknown-linux-gnu.tar.gz $c/home/jamie/tmp/influxdb3-pe/install/ ; echo ; done
...
$ for c in $(incus list --format csv | grep RUNNING | cut -d , -f 1) ; do echo "# $c" ; incus exec --user 1001 --group 1001 $c -- sh -c 'cd /home/jamie/tmp/influxdb3-pe/install && tar -zxf ./x86_64-unknown-linux-gnu.tar.gz' ; echo ; done
...

# copy plugins
$ for c in $(incus list --format csv | grep RUNNING | cut -d , -f 1) ; do echo "# $c" ; incus file push --uid 1001 --gid 1001 ~/code/tmp/python-standalone/glibc/plugins/test-* $c/home/jamie/tmp/influxdb3-pe/data/plugins/ ; echo ; done
...

# contents of plugins
$ for p in ~/code/tmp/python-standalone/glibc/plugins/test-* ; do echo "# $p" ; cat $p ; echo ; done
# /home/ubuntu/code/tmp/python-standalone/glibc/plugins/test-schedule.py
import importlib.util

def _tst_log(influxdb3_local):
    influxdb3_local.info("_tst_log(): success")

def _tst_sys(influxdb3_local):
    try:
        import sys
        influxdb3_local.info("_tst_sys(): sys.prefix = %s" % sys.prefix)
        influxdb3_local.info("_tst_sys(): sys.exec_prefix = %s" % sys.exec_prefix)
        influxdb3_local.info("_tst_sys(): sys.base_prefix = %s" % sys.base_prefix)
        influxdb3_local.info("_tst_sys(): sys.base_exec_prefix = %s" % sys.base_exec_prefix)
        influxdb3_local.info("_tst_sys(): sys.path = %s" % sys.path)
    except Exception as e:
        influxdb3_local.error("_tst_sys(): %s" % e)
        return

def _tst_wheel(influxdb3_local):
    spec = importlib.util.find_spec("requests")
    if spec is not None:
        try:
            influxdb3_local.info("_tst_sys(): 'requests' location = %s" % spec.origin)

            import requests
            influxdb3_local.info("_tst_wheel(): requests = %s" % requests.__version__)
        except Exception as e:
            influxdb3_local.error("_tst_wheel(): %s" % e)
            return
    else:
        influxdb3_local.warn("_tst_sys(): 'requests' not found")

def _tst_libssl(influxdb3_local):
    spec = importlib.util.find_spec("ssl")
    if spec is not None:
        try:
            influxdb3_local.info("_tst_libssl(): 'ssl' location = %s" % spec.origin)

            # https://docs.python.org/3/library/ssl.html#socket-creation
            import socket
            import ssl
            hn = 'www.python.org'
            ctx = ssl.create_default_context()
            with socket.create_connection((hn, 443)) as sock:
                with ctx.wrap_socket(sock, server_hostname=hn) as ssock:
                    influxdb3_local.info("_tst_libssl: connecting to: %s" % hn)
                    influxdb3_local.info("_tst_libssl: sock version: %s" % ssock.version())
        except Exception as e:
            influxdb3_local.error("_tst_libssl(): %s" % e)
            return
    else:
        influxdb3_local.error("_tst_libssl(): 'ssl' not found")

def _tst_datetime(influxdb3_local):
    spec = importlib.util.find_spec("datetime")
    if spec is not None:
        try:
            influxdb3_local.info("_tst_datetime(): 'datetime' location = %s" % spec.origin)

            import datetime
            influxdb3_local.info("_tst_datetime(): datetime.datetime.now() = %s" % datetime.datetime.now())
            influxdb3_local.info("_tst_datetime(): datetime.datetime.now().strftime() = %s" % datetime.datetime.now().strftime('%Y%m%d%H%M%S'))
        except Exception as e:
            influxdb3_local.error("_tst_datetime(): %s" % e)
            return
    else:
        influxdb3_local.error("_tst_datetime(): 'ssl' not found")


def process_scheduled_call(influxdb3_local, call_time, args=None):
    # can we log at all
    _tst_log(influxdb3_local)

    # show paths
    _tst_sys(influxdb3_local)

    # test wheel (compiled code)
    _tst_wheel(influxdb3_local)

    # test libssl (compiled code)
    _tst_libssl(influxdb3_local)

    # test datetime (https://github.com/influxdata/influxdb/issues/26050)
    _tst_datetime(influxdb3_local)

# /home/ubuntu/code/tmp/python-standalone/glibc/plugins/test-wal.py
def _tst_query_basic(influxdb3_local):
    influxdb3_local.info("_tst_query_basic(): query = 'SELECT * FROM telegraf LIMIT 1'")

    try:
        res = influxdb3_local.query("SELECT * FROM telegraf LIMIT 1")
    except Exception as e:
        influxdb3_local.error("_tst_query_basic(): %s" % e)
        return

    influxdb3_local.info("_tst_query_basic(): result = %s" % str(res))

def _tst_query_args(influxdb3_local, args):
    if args is None:
        influxdb3_local.warn("_tst_query_args(): Could not find 'args'")
        return
    elif "host" not in args:
        influxdb3_local.warn("_tst_query_args(): Could not find 'host' in 'args': %s" % args)
        return

    influxdb3_local.info("_tst_query_args(): args = '%s'" % args)
    influxdb3_local.info("_tst_query_args(): parameterized query = 'SELECT * FROM telegraf WHERE host = $host LIMIT 1'")

    query_params = {"host": args["host"]}
    try:
        # https://influxdata.slack.com/archives/C084G9LR2HL/p1739550127057669
        # discusses how quoting has changed (previously needed '$host')
        query_result = influxdb3_local.query("SELECT * FROM telegraf WHERE host = $host LIMIT 1", query_params)
    except Exception as e:
        influxdb3_local.error("_tst_query_args(): %s" % e)
        return

    influxdb3_local.info("_tst_query_args(): parameterized query result = %s" % str(query_result))

def _tst_table_batches(influxdb3_local, table_batches):
    if table_batches is None:
        influxdb3_local.error("_tst_table_batches(): table_batches is None")
        return

    for table_batch in table_batches:
        if "table_name" not in table_batch:
            influxdb3_local.error("_tst_table_batches(): 'table_name' missing from batch: %s" % str(table_batch))
        else:
            influxdb3_local.info("_tst_table_batches(): table = %s" % table_batch["table_name"])

            if "rows" not in table_batch:
                influxdb3_local.error("_tst_table_batches(): 'rows' missing from batch: %s" % str(table_batch))
            else:
                for row in table_batch["rows"]:
                    influxdb3_local.info("_tst_table_batches(): row = %s" % str(row))

def _tst_write_table(influxdb3_local):
    try:
        line = LineBuilder("test_table").tag("tag1", "tag1_value").tag("tag2", "tag2_value").int64_field("field1", 1).float64_field("field2", 2.0).string_field("field3", "number three")  # type: ignore[name-defined]

        influxdb3_local.info("_tst_write_table(): line = %s" % line.build())

        influxdb3_local.write(line)
    except Exception as e:
        influxdb3_local.error("_tst_write_table(): %s" % e)
        return

def _tst_write_db(influxdb3_local):
    import time
    now = time.time_ns()
    try:
        other_line = LineBuilder("other_table")  # type: ignore[name-defined]
        other_line.int64_field("other_field", 1)
        other_line.float64_field("other_field2", 3.14)
        other_line.time_ns(now)

        influxdb3_local.info("_tst_write_db(): line = %s" % other_line.build())
        influxdb3_local.write_to_db("mydb02", other_line)
    except Exception as e:
        influxdb3_local.error("_tst_write_db(): %s" % e)
        return

def process_writes(influxdb3_local, table_batches, args=None):
    # can query at all
    _tst_query_basic(influxdb3_local)

    # can query with args
    _tst_query_args(influxdb3_local, args)

    # can parse table_batches
    _tst_table_batches(influxdb3_local, table_batches)

    # can write a line protocol to a table
    _tst_write_table(influxdb3_local)

    # can write a line protocol to another database
    _tst_write_db(influxdb3_local)


#
# Does it find all the libraries?
#
$ for c in $(incus list --format csv | grep RUNNING | cut -d , -f 1) ; do echo "# $c" ; incus exec --user 1001 --group 1001 $c -- ldd /home/jamie/tmp/influxdb3-pe/install/influxdb3 ; echo ; done
# amzn-2
	linux-vdso.so.1 (0x00007ffeeaa7f000)
	libpython3.11.so.1.0 => /home/jamie/tmp/influxdb3-pe/install/python/lib/libpython3.11.so.1.0 (0x00007f7b19935000)
	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f7b1971f000)
	librt.so.1 => /lib64/librt.so.1 (0x00007f7b19517000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f7b192f9000)
	libm.so.6 => /lib64/libm.so.6 (0x00007f7b18fb9000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007f7b18db5000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f7b18a08000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f7b4448f000)
	libutil.so.1 => /lib64/libutil.so.1 (0x00007f7b18805000)

# amzn-2023
	linux-vdso.so.1 (0x00007ffe4c6e5000)
	libpython3.11.so.1.0 => /home/jamie/tmp/influxdb3-pe/install/python/lib/libpython3.11.so.1.0 (0x00007f1c54005000)
	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f1c53fe9000)
	librt.so.1 => /lib64/librt.so.1 (0x00007f1c53fe4000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f1c53fdf000)
	libm.so.6 => /lib64/libm.so.6 (0x00007f1c53f04000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007f1c53efd000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f1c53cf5000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f1c7eb61000)
	libutil.so.1 => /lib64/libutil.so.1 (0x00007f1c53cf0000)

# debian-8
	linux-vdso.so.1 (0x00007ffcdadce000)
	libpython3.11.so.1.0 => /home/jamie/tmp/influxdb3-pe/install/python/lib/libpython3.11.so.1.0 (0x00007f2388085000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f2387e6f000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f2387c67000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f2387a4a000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f2387749000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f2387545000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f238719a000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f23b2bdf000)
	libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f2386f97000)

# debian-9
	linux-vdso.so.1 (0x00007ffc57378000)
	libpython3.11.so.1.0 => /home/jamie/tmp/influxdb3-pe/install/python/lib/libpython3.11.so.1.0 (0x00007f5d2dc51000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f5d2da3a000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f5d2d832000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f5d2d615000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f5d2d311000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f5d2d10d000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5d2cd6e000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f5d587ab000)
	libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f5d2cb6b000)

# debian-10
	linux-vdso.so.1 (0x00007ffc2e3dc000)
	libpython3.11.so.1.0 => /home/jamie/tmp/influxdb3-pe/install/python/lib/libpython3.11.so.1.0 (0x00007f4aa617d000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f4aa6160000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f4aa6156000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4aa6135000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4aa5fb2000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f4aa5fad000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4aa5deb000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f4ad0cd9000)
	libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f4aa5de6000)

# debian-11
	linux-vdso.so.1 (0x00007ffe90cfc000)
	libpython3.11.so.1.0 => /home/jamie/tmp/influxdb3-pe/install/python/lib/libpython3.11.so.1.0 (0x00007f12d682e000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f12d6811000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f12d6807000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f12d67e5000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f12d66a1000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f12d669b000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f12d64c5000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f130138a000)
	libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f12d64c0000)

# debian-12
	linux-vdso.so.1 (0x00007ffe429b2000)
	libpython3.11.so.1.0 => /home/jamie/tmp/influxdb3-pe/install/python/lib/libpython3.11.so.1.0 (0x00007f927eac7000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f92a97db000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f92a97d6000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f92a97d1000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f92a96f2000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f92a96eb000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f927e8e6000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f92a97ff000)
	libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f92a96e6000)

# fedora-41
	linux-vdso.so.1 (0x00007ffd65fd7000)
	libpython3.11.so.1.0 => /home/jamie/tmp/influxdb3-pe/install/python/lib/libpython3.11.so.1.0 (0x00007ff834ec7000)
	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007ff85fb2f000)
	librt.so.1 => /lib64/librt.so.1 (0x00007ff85fb2a000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ff85fb25000)
	libm.so.6 => /lib64/libm.so.6 (0x00007ff85fa3f000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007ff85fa38000)
	libc.so.6 => /lib64/libc.so.6 (0x00007ff834cd4000)
	/lib64/ld-linux-x86-64.so.2 (0x00007ff85fb63000)
	libutil.so.1 => /lib64/libutil.so.1 (0x00007ff85fa33000)

# oracle-8
	linux-vdso.so.1 (0x00007ffffd3ba000)
	libpython3.11.so.1.0 => /home/jamie/tmp/influxdb3-pe/install/python/lib/libpython3.11.so.1.0 (0x00007fbee1c0d000)
	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fbee19f4000)
	librt.so.1 => /lib64/librt.so.1 (0x00007fbee17ec000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fbee15cc000)
	libm.so.6 => /lib64/libm.so.6 (0x00007fbee124a000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007fbee1046000)
	libc.so.6 => /lib64/libc.so.6 (0x00007fbee0c70000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fbf0c767000)
	libutil.so.1 => /lib64/libutil.so.1 (0x00007fbee0a6c000)

# oracle-9
	linux-vdso.so.1 (0x00007ffcc8372000)
	libpython3.11.so.1.0 => /home/jamie/tmp/influxdb3-pe/install/python/lib/libpython3.11.so.1.0 (0x00007feda64d8000)
	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007feda64ba000)
	librt.so.1 => /lib64/librt.so.1 (0x00007feda64b5000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007feda64b0000)
	libm.so.6 => /lib64/libm.so.6 (0x00007feda63d5000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007feda63ce000)
	libc.so.6 => /lib64/libc.so.6 (0x00007feda61c6000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fedd1034000)
	libutil.so.1 => /lib64/libutil.so.1 (0x00007feda61c1000)

# rocky-8
	linux-vdso.so.1 (0x00007ffd058cd000)
	libpython3.11.so.1.0 => /home/jamie/tmp/influxdb3-pe/install/python/lib/libpython3.11.so.1.0 (0x00007fe718443000)
	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fe71822b000)
	librt.so.1 => /lib64/librt.so.1 (0x00007fe718023000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fe717e03000)
	libm.so.6 => /lib64/libm.so.6 (0x00007fe717a81000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007fe71787d000)
	libc.so.6 => /lib64/libc.so.6 (0x00007fe7174a7000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fe742f9d000)
	libutil.so.1 => /lib64/libutil.so.1 (0x00007fe7172a3000)

# rocky-9
	linux-vdso.so.1 (0x00007ffc857fc000)
	libpython3.11.so.1.0 => /home/jamie/tmp/influxdb3-pe/install/python/lib/libpython3.11.so.1.0 (0x00007fa65a545000)
	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fa65a528000)
	librt.so.1 => /lib64/librt.so.1 (0x00007fa65a523000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fa65a51e000)
	libm.so.6 => /lib64/libm.so.6 (0x00007fa65a443000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007fa65a43c000)
	libc.so.6 => /lib64/libc.so.6 (0x00007fa65a234000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fa6850a1000)
	libutil.so.1 => /lib64/libutil.so.1 (0x00007fa65a22f000)

# ubuntu-14
	linux-vdso.so.1 =>  (0x00007fff533b5000)
	libpython3.11.so.1.0 => /home/jamie/tmp/influxdb3-pe/install/python/lib/libpython3.11.so.1.0 (0x00007f153666c000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f1536456000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f153624e000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f1536030000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f1535d2a000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f1535b26000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f153575d000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f15611c6000)
	libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f153555a000)

# ubuntu-16
	linux-vdso.so.1 =>  (0x00007ffc7cf79000)
	libpython3.11.so.1.0 => /home/jamie/tmp/influxdb3-pe/install/python/lib/libpython3.11.so.1.0 (0x00007ff0fe080000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007ff0fde6a000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007ff0fdc62000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ff0fda45000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007ff0fd73c000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ff0fd538000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff0fd16e000)
	/lib64/ld-linux-x86-64.so.2 (0x00007ff128bda000)
	libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007ff0fcf6b000)

# ubuntu-18
	linux-vdso.so.1 (0x00007ffcfd5d6000)
	libpython3.11.so.1.0 => /home/jamie/tmp/influxdb3-pe/install/python/lib/libpython3.11.so.1.0 (0x00007f6944951000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f6944739000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f6944531000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f6944312000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f6943f74000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f6943d70000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f694397f000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f696f4ab000)
	libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f694377c000)

# ubuntu-20
	linux-vdso.so.1 (0x00007ffee83e2000)
	libpython3.11.so.1.0 => /home/jamie/tmp/influxdb3-pe/install/python/lib/libpython3.11.so.1.0 (0x00007f92fd386000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f92fd368000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f92fd35e000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f92fd33b000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f92fd1ec000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f92fd1e6000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f92fcff2000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f9327ee2000)
	libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f92fcfed000)

# ubuntu-22
	linux-vdso.so.1 (0x00007ffefa9c3000)
	libpython3.11.so.1.0 => /home/jamie/tmp/influxdb3-pe/install/python/lib/libpython3.11.so.1.0 (0x00007fd9806c7000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fd9ab2fa000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fd9ab2f5000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fd9ab2f0000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fd9805e0000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fd9ab2e9000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd9803b7000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fd9ab31f000)
	libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007fd9ab2e4000)

# ubuntu-24
	linux-vdso.so.1 (0x00007fff929e7000)
	libpython3.11.so.1.0 => /home/jamie/tmp/influxdb3-pe/install/python/lib/libpython3.11.so.1.0 (0x00007feeb34c7000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007feede0a6000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007feede0a1000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007feede09c000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007feeb33de000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007feede095000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007feeb31cc000)
	/lib64/ld-linux-x86-64.so.2 (0x00007feede0d9000)
	libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007feede090000)


# 
# does libpython find all the libraries?
# 
$ for c in $(incus list --format csv | grep RUNNING | cut -d , -f 1) ; do echo "# $c" ; incus exec --user 1001 --group 1001 $c -- ldd /home/jamie/tmp/influxdb3-pe/install/python/lib/libpython3.11.so ; echo ; done
# amzn-2
	linux-vdso.so.1 (0x00007ffcce059000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007f39be3a9000)
	libm.so.6 => /lib64/libm.so.6 (0x00007f39be069000)
	librt.so.1 => /lib64/librt.so.1 (0x00007f39bde61000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f39bdc43000)
	libutil.so.1 => /lib64/libutil.so.1 (0x00007f39bda40000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f39bd693000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f39bfce6000)

# amzn-2023
	linux-vdso.so.1 (0x00007ffdaadee000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007fa7a7cb7000)
	libm.so.6 => /lib64/libm.so.6 (0x00007fa7a7bdc000)
	librt.so.1 => /lib64/librt.so.1 (0x00007fa7a7bd7000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fa7a7bd2000)
	libutil.so.1 => /lib64/libutil.so.1 (0x00007fa7a7bcd000)
	libc.so.6 => /lib64/libc.so.6 (0x00007fa7a79c5000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fa7a93f9000)

# debian-8
	linux-vdso.so.1 (0x00007ffeef3e2000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007feb9cb82000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007feb9c881000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007feb9c679000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007feb9c45c000)
	libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007feb9c259000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007feb9beae000)
	/lib64/ld-linux-x86-64.so.2 (0x00007feb9e4bf000)

# debian-9
	linux-vdso.so.1 (0x00007ffcbcdd2000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f5f42acf000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f5f427cb000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f5f425c3000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f5f423a6000)
	libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f5f421a3000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5f41e04000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f5f4440c000)

# debian-10
	linux-vdso.so.1 (0x00007ffdc27e2000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f4fe4587000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4fe4404000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f4fe43fa000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4fe43d9000)
	libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f4fe43d4000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4fe4214000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f4fe5cca000)

# debian-11
	linux-vdso.so.1 (0x00007ffda8cad000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f8e5ac84000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f8e5ab40000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f8e5ab36000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f8e5ab14000)
	libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f8e5ab0f000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8e5a93b000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f8e5c3c8000)

# debian-12
	linux-vdso.so.1 (0x00007ffc7b5f8000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fca25fa3000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fca25ec4000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fca25ebf000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fca25eba000)
	libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007fca25eb5000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fca25cd2000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fca276e5000)

# fedora-41
	linux-vdso.so.1 (0x00007ffea8ba5000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007f5177616000)
	libm.so.6 => /lib64/libm.so.6 (0x00007f5177530000)
	librt.so.1 => /lib64/librt.so.1 (0x00007f517752b000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f5177526000)
	libutil.so.1 => /lib64/libutil.so.1 (0x00007f5177521000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f517732e000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f5178d59000)

# oracle-8
	linux-vdso.so.1 (0x00007ffcbb54f000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007f78554e3000)
	libm.so.6 => /lib64/libm.so.6 (0x00007f7855161000)
	librt.so.1 => /lib64/librt.so.1 (0x00007f7854f59000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f7854d39000)
	libutil.so.1 => /lib64/libutil.so.1 (0x00007f7854b35000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f785475f000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f7856e20000)

# oracle-9
	linux-vdso.so.1 (0x00007ffcd85c4000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007fa77a00e000)
	libm.so.6 => /lib64/libm.so.6 (0x00007fa779f33000)
	librt.so.1 => /lib64/librt.so.1 (0x00007fa779f2e000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fa779f29000)
	libutil.so.1 => /lib64/libutil.so.1 (0x00007fa779f24000)
	libc.so.6 => /lib64/libc.so.6 (0x00007fa779d1c000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fa77b751000)

# rocky-8
	linux-vdso.so.1 (0x00007ffc89db7000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007f0ab23f5000)
	libm.so.6 => /lib64/libm.so.6 (0x00007f0ab2073000)
	librt.so.1 => /lib64/librt.so.1 (0x00007f0ab1e6b000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f0ab1c4b000)
	libutil.so.1 => /lib64/libutil.so.1 (0x00007f0ab1a47000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f0ab1671000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f0ab3d32000)

# rocky-9
	linux-vdso.so.1 (0x00007ffd2a364000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007fd9328ca000)
	libm.so.6 => /lib64/libm.so.6 (0x00007fd9327ef000)
	librt.so.1 => /lib64/librt.so.1 (0x00007fd9327ea000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fd9327e5000)
	libutil.so.1 => /lib64/libutil.so.1 (0x00007fd9327e0000)
	libc.so.6 => /lib64/libc.so.6 (0x00007fd9325d8000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fd93400d000)

# ubuntu-14
	linux-vdso.so.1 =>  (0x00007ffe02185000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fa30750c000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa307206000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fa306ffe000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fa306de0000)
	libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007fa306bdd000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa306814000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fa308e49000)

# ubuntu-16
	linux-vdso.so.1 =>  (0x00007ffec5d17000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f64695fb000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f64692f2000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f64690ea000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f6468ecd000)
	libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f6468cca000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6468900000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f646af38000)

# ubuntu-18
	linux-vdso.so.1 (0x00007ffcbe7b9000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fea99e8d000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fea99aef000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fea998e7000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fea996c8000)
	libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007fea994c5000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fea990d4000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fea9b7ca000)

# ubuntu-20
	linux-vdso.so.1 (0x00007ffca450f000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007feb44083000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007feb43f34000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007feb43f2a000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007feb43f07000)
	libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007feb43f02000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007feb43d10000)
	/lib64/ld-linux-x86-64.so.2 (0x00007feb457c7000)

# ubuntu-22
	linux-vdso.so.1 (0x00007ffc1c976000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f0c51706000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f0c5161f000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f0c5161a000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f0c51615000)
	libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f0c51610000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0c513e5000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f0c52e49000)

# ubuntu-24
	linux-vdso.so.1 (0x00007ffd87c73000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fa3b4d83000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa3b4c9a000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fa3b4c95000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fa3b4c90000)
	libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007fa3b4c8b000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa3b4a77000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fa3b64c6000)


#
# Does it not crash on startup?
#
$ for c in $(incus list --format csv | grep RUNNING | cut -d , -f 1) ; do echo "# $c" ; incus exec --user 1001 --group 1001 $c -- /home/jamie/tmp/influxdb3-pe/install/influxdb3 -V ; echo ; done
# amzn-2
influxdb3 0.1.0, revision v2.5.0-14372-g48b5e1a558178a8bd1cd92e6dd64743d0c11f661-dirty

# amzn-2023
influxdb3 0.1.0, revision v2.5.0-14372-g48b5e1a558178a8bd1cd92e6dd64743d0c11f661-dirty

# debian-8
influxdb3 0.1.0, revision v2.5.0-14372-g48b5e1a558178a8bd1cd92e6dd64743d0c11f661-dirty

# debian-9
influxdb3 0.1.0, revision v2.5.0-14372-g48b5e1a558178a8bd1cd92e6dd64743d0c11f661-dirty

# debian-10
influxdb3 0.1.0, revision v2.5.0-14372-g48b5e1a558178a8bd1cd92e6dd64743d0c11f661-dirty

# debian-11
influxdb3 0.1.0, revision v2.5.0-14372-g48b5e1a558178a8bd1cd92e6dd64743d0c11f661-dirty

# debian-12
influxdb3 0.1.0, revision v2.5.0-14372-g48b5e1a558178a8bd1cd92e6dd64743d0c11f661-dirty

# fedora-41
influxdb3 0.1.0, revision v2.5.0-14372-g48b5e1a558178a8bd1cd92e6dd64743d0c11f661-dirty

# oracle-8
influxdb3 0.1.0, revision v2.5.0-14372-g48b5e1a558178a8bd1cd92e6dd64743d0c11f661-dirty

# oracle-9
influxdb3 0.1.0, revision v2.5.0-14372-g48b5e1a558178a8bd1cd92e6dd64743d0c11f661-dirty

# rocky-8
influxdb3 0.1.0, revision v2.5.0-14372-g48b5e1a558178a8bd1cd92e6dd64743d0c11f661-dirty

# rocky-9
influxdb3 0.1.0, revision v2.5.0-14372-g48b5e1a558178a8bd1cd92e6dd64743d0c11f661-dirty

# ubuntu-14
influxdb3 0.1.0, revision v2.5.0-14372-g48b5e1a558178a8bd1cd92e6dd64743d0c11f661-dirty

# ubuntu-16
influxdb3 0.1.0, revision v2.5.0-14372-g48b5e1a558178a8bd1cd92e6dd64743d0c11f661-dirty

# ubuntu-18
influxdb3 0.1.0, revision v2.5.0-14372-g48b5e1a558178a8bd1cd92e6dd64743d0c11f661-dirty

# ubuntu-20
influxdb3 0.1.0, revision v2.5.0-14372-g48b5e1a558178a8bd1cd92e6dd64743d0c11f661-dirty

# ubuntu-22
influxdb3 0.1.0, revision v2.5.0-14372-g48b5e1a558178a8bd1cd92e6dd64743d0c11f661-dirty

# ubuntu-24
influxdb3 0.1.0, revision v2.5.0-14372-g48b5e1a558178a8bd1cd92e6dd64743d0c11f661-dirty


#
# in separate terminals, start the server, like so
#

# RHEL-based systems
$ export SSL_CERT_FILE=/etc/pki/tls/certs/ca-bundle.crt ; ~/tmp/influxdb3-pe/install/influxdb3 serve --node-id=local01 --object-store=file --data-dir ~/tmp/influxdb3-pe/data --plugin-dir ~/tmp/influxdb3-pe/data/plugins
...
2025-03-12T11:57:56.648894Z  INFO influxdb3_server: startup time: 3671ms address=0.0.0.0:8181

# Debian-based systems
$ ~/tmp/influxdb3-pe/install/influxdb3 serve --node-id=local01 --object-store=file --data-dir ~/tmp/influxdb3-pe/data --plugin-dir ~/tmp/influxdb3-pe/data/plugins
...
2025-03-12T11:58:10.073303Z  INFO influxdb3_server: startup time: 3543ms address=0.0.0.0:8181


#
# now use clients to interact with the server
#

#
# Create databases
#
$ for c in $(incus list --format csv | grep RUNNING | cut -d , -f 1) ; do echo "# $c" ; incus exec --user 1001 --group 1001 $c -- /home/jamie/tmp/influxdb3-pe/install/influxdb3 create database mydb01  ; echo ; done
# amzn-2
Database "mydb01" created successfully

# amzn-2023
Database "mydb01" created successfully

# debian-8
Database "mydb01" created successfully

# debian-9
Database "mydb01" created successfully

# debian-10
Database "mydb01" created successfully

# debian-11
Database "mydb01" created successfully

# debian-12
Database "mydb01" created successfully

# fedora-41
Database "mydb01" created successfully

# oracle-8
Database "mydb01" created successfully

# oracle-9
Database "mydb01" created successfully

# rocky-8
Database "mydb01" created successfully

# rocky-9
Database "mydb01" created successfully

# ubuntu-14
Database "mydb01" created successfully

# ubuntu-16
Database "mydb01" created successfully

# ubuntu-18
Database "mydb01" created successfully

# ubuntu-20
Database "mydb01" created successfully

# ubuntu-22
Database "mydb01" created successfully

# ubuntu-24
Database "mydb01" created successfully

$ for c in $(incus list --format csv | grep RUNNING | cut -d , -f 1) ; do echo "# $c" ; incus exec --user 1001 --group 1001 $c -- /home/jamie/tmp/influxdb3-pe/install/influxdb3 create database mydb02 ; echo ; done
# amzn-2
Database "mydb02" created successfully

# amzn-2023
Database "mydb02" created successfully

# debian-8
Database "mydb02" created successfully

# debian-9
Database "mydb02" created successfully

# debian-10
Database "mydb02" created successfully

# debian-11
Database "mydb02" created successfully

# debian-12
Database "mydb02" created successfully

# fedora-41
Database "mydb02" created successfully

# oracle-8
Database "mydb02" created successfully

# oracle-9
Database "mydb02" created successfully

# rocky-8
Database "mydb02" created successfully

# rocky-9
Database "mydb02" created successfully

# ubuntu-14
Database "mydb02" created successfully

# ubuntu-16
Database "mydb02" created successfully

# ubuntu-18
Database "mydb02" created successfully

# ubuntu-20
Database "mydb02" created successfully

# ubuntu-22
Database "mydb02" created successfully

# ubuntu-24
Database "mydb02" created successfully


#
# write a point
#
$ for c in $(incus list --format csv | grep RUNNING | cut -d , -f 1) ; do echo "# $c" ; incus exec --user 1001 --group 1001 $c -- /home/jamie/tmp/influxdb3-pe/install/influxdb3 write -d mydb01 "telegraf,cpu=cpu-total,host=foo usage_guest=0.0,usage_guest_nice=0.0,usage_idle=98.8476953907837,usage_iowait=0.10020040080161435,usage_irq=0.0,usage_nice=0.0,usage_softirq=0.0,usage_steal=0.05010020040080273,usage_system=0.6513026052104621,usage_user=0.3507014028056636" ; echo ; done
# amzn-2
success

# amzn-2023
success

# debian-8
success

# debian-9
success

# debian-10
success

# debian-11
success

# debian-12
success

# fedora-41
success

# oracle-8
success

# oracle-9
success

# rocky-8
success

# rocky-9
success

# ubuntu-14
success

# ubuntu-16
success

# ubuntu-18
success

# ubuntu-20
success

# ubuntu-22
success

# ubuntu-24
success


#
# query
#
$ for c in $(incus list --format csv | grep RUNNING | cut -d , -f 1) ; do echo "# $c" ; incus exec --user 1001 --group 1001 $c -- /home/jamie/tmp/influxdb3-pe/install/influxdb3  q -d mydb01 "SELECT * FROM telegraf WHERE host = 'foo'"  ; echo ; done
# amzn-2
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu       | host | time                          | usage_guest | usage_guest_nice | usage_idle       | usage_iowait        | usage_irq | usage_nice | usage_softirq | usage_steal         | usage_system       | usage_user         |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu-total | foo  | 2025-03-12T11:59:25.687885256 | 0.0         | 0.0              | 98.8476953907837 | 0.10020040080161435 | 0.0       | 0.0        | 0.0           | 0.05010020040080273 | 0.6513026052104621 | 0.3507014028056636 |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+

# amzn-2023
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu       | host | time                          | usage_guest | usage_guest_nice | usage_idle       | usage_iowait        | usage_irq | usage_nice | usage_softirq | usage_steal         | usage_system       | usage_user         |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu-total | foo  | 2025-03-12T11:59:26.306026415 | 0.0         | 0.0              | 98.8476953907837 | 0.10020040080161435 | 0.0       | 0.0        | 0.0           | 0.05010020040080273 | 0.6513026052104621 | 0.3507014028056636 |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+

# debian-8
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu       | host | time                          | usage_guest | usage_guest_nice | usage_idle       | usage_iowait        | usage_irq | usage_nice | usage_softirq | usage_steal         | usage_system       | usage_user         |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu-total | foo  | 2025-03-12T11:59:26.705856924 | 0.0         | 0.0              | 98.8476953907837 | 0.10020040080161435 | 0.0       | 0.0        | 0.0           | 0.05010020040080273 | 0.6513026052104621 | 0.3507014028056636 |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+

# debian-9
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu       | host | time                          | usage_guest | usage_guest_nice | usage_idle       | usage_iowait        | usage_irq | usage_nice | usage_softirq | usage_steal         | usage_system       | usage_user         |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu-total | foo  | 2025-03-12T11:59:27.457239369 | 0.0         | 0.0              | 98.8476953907837 | 0.10020040080161435 | 0.0       | 0.0        | 0.0           | 0.05010020040080273 | 0.6513026052104621 | 0.3507014028056636 |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+

# debian-10
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu       | host | time                          | usage_guest | usage_guest_nice | usage_idle       | usage_iowait        | usage_irq | usage_nice | usage_softirq | usage_steal         | usage_system       | usage_user         |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu-total | foo  | 2025-03-12T11:59:27.974481396 | 0.0         | 0.0              | 98.8476953907837 | 0.10020040080161435 | 0.0       | 0.0        | 0.0           | 0.05010020040080273 | 0.6513026052104621 | 0.3507014028056636 |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+

# debian-11
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu       | host | time                          | usage_guest | usage_guest_nice | usage_idle       | usage_iowait        | usage_irq | usage_nice | usage_softirq | usage_steal         | usage_system       | usage_user         |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu-total | foo  | 2025-03-12T11:59:28.761733668 | 0.0         | 0.0              | 98.8476953907837 | 0.10020040080161435 | 0.0       | 0.0        | 0.0           | 0.05010020040080273 | 0.6513026052104621 | 0.3507014028056636 |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+

# debian-12
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu       | host | time                          | usage_guest | usage_guest_nice | usage_idle       | usage_iowait        | usage_irq | usage_nice | usage_softirq | usage_steal         | usage_system       | usage_user         |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu-total | foo  | 2025-03-12T11:59:29.823708400 | 0.0         | 0.0              | 98.8476953907837 | 0.10020040080161435 | 0.0       | 0.0        | 0.0           | 0.05010020040080273 | 0.6513026052104621 | 0.3507014028056636 |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+

# fedora-41
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu       | host | time                          | usage_guest | usage_guest_nice | usage_idle       | usage_iowait        | usage_irq | usage_nice | usage_softirq | usage_steal         | usage_system       | usage_user         |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu-total | foo  | 2025-03-12T11:59:30.816240293 | 0.0         | 0.0              | 98.8476953907837 | 0.10020040080161435 | 0.0       | 0.0        | 0.0           | 0.05010020040080273 | 0.6513026052104621 | 0.3507014028056636 |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+

# oracle-8
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu       | host | time                          | usage_guest | usage_guest_nice | usage_idle       | usage_iowait        | usage_irq | usage_nice | usage_softirq | usage_steal         | usage_system       | usage_user         |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu-total | foo  | 2025-03-12T11:59:31.273440536 | 0.0         | 0.0              | 98.8476953907837 | 0.10020040080161435 | 0.0       | 0.0        | 0.0           | 0.05010020040080273 | 0.6513026052104621 | 0.3507014028056636 |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+

# oracle-9
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu       | host | time                          | usage_guest | usage_guest_nice | usage_idle       | usage_iowait        | usage_irq | usage_nice | usage_softirq | usage_steal         | usage_system       | usage_user         |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu-total | foo  | 2025-03-12T11:59:32.020141536 | 0.0         | 0.0              | 98.8476953907837 | 0.10020040080161435 | 0.0       | 0.0        | 0.0           | 0.05010020040080273 | 0.6513026052104621 | 0.3507014028056636 |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+

# rocky-8
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu       | host | time                          | usage_guest | usage_guest_nice | usage_idle       | usage_iowait        | usage_irq | usage_nice | usage_softirq | usage_steal         | usage_system       | usage_user         |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu-total | foo  | 2025-03-12T11:59:32.619123419 | 0.0         | 0.0              | 98.8476953907837 | 0.10020040080161435 | 0.0       | 0.0        | 0.0           | 0.05010020040080273 | 0.6513026052104621 | 0.3507014028056636 |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+

# rocky-9
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu       | host | time                          | usage_guest | usage_guest_nice | usage_idle       | usage_iowait        | usage_irq | usage_nice | usage_softirq | usage_steal         | usage_system       | usage_user         |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu-total | foo  | 2025-03-12T11:59:33.267832071 | 0.0         | 0.0              | 98.8476953907837 | 0.10020040080161435 | 0.0       | 0.0        | 0.0           | 0.05010020040080273 | 0.6513026052104621 | 0.3507014028056636 |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+

# ubuntu-14
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu       | host | time                          | usage_guest | usage_guest_nice | usage_idle       | usage_iowait        | usage_irq | usage_nice | usage_softirq | usage_steal         | usage_system       | usage_user         |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu-total | foo  | 2025-03-12T11:59:34.139936940 | 0.0         | 0.0              | 98.8476953907837 | 0.10020040080161435 | 0.0       | 0.0        | 0.0           | 0.05010020040080273 | 0.6513026052104621 | 0.3507014028056636 |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+

# ubuntu-16
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu       | host | time                          | usage_guest | usage_guest_nice | usage_idle       | usage_iowait        | usage_irq | usage_nice | usage_softirq | usage_steal         | usage_system       | usage_user         |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu-total | foo  | 2025-03-12T11:59:35.020255304 | 0.0         | 0.0              | 98.8476953907837 | 0.10020040080161435 | 0.0       | 0.0        | 0.0           | 0.05010020040080273 | 0.6513026052104621 | 0.3507014028056636 |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+

# ubuntu-18
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu       | host | time                          | usage_guest | usage_guest_nice | usage_idle       | usage_iowait        | usage_irq | usage_nice | usage_softirq | usage_steal         | usage_system       | usage_user         |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu-total | foo  | 2025-03-12T11:59:35.652857158 | 0.0         | 0.0              | 98.8476953907837 | 0.10020040080161435 | 0.0       | 0.0        | 0.0           | 0.05010020040080273 | 0.6513026052104621 | 0.3507014028056636 |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+

# ubuntu-20
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu       | host | time                          | usage_guest | usage_guest_nice | usage_idle       | usage_iowait        | usage_irq | usage_nice | usage_softirq | usage_steal         | usage_system       | usage_user         |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu-total | foo  | 2025-03-12T11:59:35.976677092 | 0.0         | 0.0              | 98.8476953907837 | 0.10020040080161435 | 0.0       | 0.0        | 0.0           | 0.05010020040080273 | 0.6513026052104621 | 0.3507014028056636 |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+

# ubuntu-22
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu       | host | time                          | usage_guest | usage_guest_nice | usage_idle       | usage_iowait        | usage_irq | usage_nice | usage_softirq | usage_steal         | usage_system       | usage_user         |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu-total | foo  | 2025-03-12T11:59:36.167211195 | 0.0         | 0.0              | 98.8476953907837 | 0.10020040080161435 | 0.0       | 0.0        | 0.0           | 0.05010020040080273 | 0.6513026052104621 | 0.3507014028056636 |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+

# ubuntu-24
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu       | host | time                          | usage_guest | usage_guest_nice | usage_idle       | usage_iowait        | usage_irq | usage_nice | usage_softirq | usage_steal         | usage_system       | usage_user         |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu-total | foo  | 2025-03-12T11:59:36.819731970 | 0.0         | 0.0              | 98.8476953907837 | 0.10020040080161435 | 0.0       | 0.0        | 0.0           | 0.05010020040080273 | 0.6513026052104621 | 0.3507014028056636 |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+


#
# install package from pip
#
$ for c in $(incus list --format csv | grep RUNNING | cut -d , -f 1) ; do echo "# $c" ; incus exec --user 1001 --group 1001 $c -- /home/jamie/tmp/influxdb3-pe/install/influxdb3 install package requests ; echo ; done
# amzn-2

# amzn-2023

# debian-8

# debian-9

# debian-10

# debian-11

# debian-12

# fedora-41

# oracle-8

# oracle-9

# rocky-8

# rocky-9

# ubuntu-14

# ubuntu-16

# ubuntu-18

# ubuntu-20

# ubuntu-22

# ubuntu-24


#
# test schedule
#
$ for c in $(incus list --format csv | grep RUNNING | cut -d , -f 1) ; do echo "# $c" ; incus exec --user 1001 --group 1001 $c -- /home/jamie/tmp/influxdb3-pe/install/influxdb3 test schedule_plugin -d mydb01 test-schedule.py ; echo ; done
# amzn-2
{
  "trigger_time": "2025-03-12T12:00:21Z",
  "log_lines": [
    "INFO: _tst_log(): success",
    "INFO: _tst_sys(): sys.prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.exec_prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.base_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.base_exec_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.path = ['/home/jamie/tmp/influxdb3-pe/install/python/lib/python311.zip', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/lib-dynload', '/home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages']",
    "INFO: _tst_sys(): 'requests' location = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages/requests/__init__.py",
    "INFO: _tst_wheel(): requests = 2.32.3",
    "INFO: _tst_libssl(): 'ssl' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/ssl.py",
    "INFO: _tst_libssl: connecting to: www.python.org",
    "INFO: _tst_libssl: sock version: TLSv1.3",
    "INFO: _tst_datetime(): 'datetime' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/datetime.py",
    "INFO: _tst_datetime(): datetime.datetime.now() = 2025-03-12 12:00:20.962126",
    "INFO: _tst_datetime(): datetime.datetime.now().strftime() = 20250312120020"
  ],
  "database_writes": {},
  "errors": []
}

# amzn-2023
{
  "trigger_time": "2025-03-12T12:00:22Z",
  "log_lines": [
    "INFO: _tst_log(): success",
    "INFO: _tst_sys(): sys.prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.exec_prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.base_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.base_exec_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.path = ['/home/jamie/tmp/influxdb3-pe/install/python/lib/python311.zip', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/lib-dynload', '/home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages']",
    "INFO: _tst_sys(): 'requests' location = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages/requests/__init__.py",
    "INFO: _tst_wheel(): requests = 2.32.3",
    "INFO: _tst_libssl(): 'ssl' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/ssl.py",
    "INFO: _tst_libssl: connecting to: www.python.org",
    "INFO: _tst_libssl: sock version: TLSv1.3",
    "INFO: _tst_datetime(): 'datetime' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/datetime.py",
    "INFO: _tst_datetime(): datetime.datetime.now() = 2025-03-12 12:00:21.200286",
    "INFO: _tst_datetime(): datetime.datetime.now().strftime() = 20250312120021"
  ],
  "database_writes": {},
  "errors": []
}

# debian-8
{
  "trigger_time": "2025-03-12T12:00:22Z",
  "log_lines": [
    "INFO: _tst_log(): success",
    "INFO: _tst_sys(): sys.prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.exec_prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.base_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.base_exec_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.path = ['/home/jamie/tmp/influxdb3-pe/install/python/lib/python311.zip', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/lib-dynload', '/home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages']",
    "INFO: _tst_sys(): 'requests' location = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages/requests/__init__.py",
    "INFO: _tst_wheel(): requests = 2.32.3",
    "INFO: _tst_libssl(): 'ssl' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/ssl.py",
    "INFO: _tst_libssl: connecting to: www.python.org",
    "INFO: _tst_libssl: sock version: TLSv1.3",
    "INFO: _tst_datetime(): 'datetime' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/datetime.py",
    "INFO: _tst_datetime(): datetime.datetime.now() = 2025-03-12 12:00:21.418798",
    "INFO: _tst_datetime(): datetime.datetime.now().strftime() = 20250312120021"
  ],
  "database_writes": {},
  "errors": []
}

# debian-9
{
  "trigger_time": "2025-03-12T12:00:22Z",
  "log_lines": [
    "INFO: _tst_log(): success",
    "INFO: _tst_sys(): sys.prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.exec_prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.base_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.base_exec_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.path = ['/home/jamie/tmp/influxdb3-pe/install/python/lib/python311.zip', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/lib-dynload', '/home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages']",
    "INFO: _tst_sys(): 'requests' location = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages/requests/__init__.py",
    "INFO: _tst_wheel(): requests = 2.32.3",
    "INFO: _tst_libssl(): 'ssl' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/ssl.py",
    "INFO: _tst_libssl: connecting to: www.python.org",
    "INFO: _tst_libssl: sock version: TLSv1.3",
    "INFO: _tst_datetime(): 'datetime' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/datetime.py",
    "INFO: _tst_datetime(): datetime.datetime.now() = 2025-03-12 12:00:21.638159",
    "INFO: _tst_datetime(): datetime.datetime.now().strftime() = 20250312120021"
  ],
  "database_writes": {},
  "errors": []
}

# debian-10
{
  "trigger_time": "2025-03-12T12:00:22Z",
  "log_lines": [
    "INFO: _tst_log(): success",
    "INFO: _tst_sys(): sys.prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.exec_prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.base_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.base_exec_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.path = ['/home/jamie/tmp/influxdb3-pe/install/python/lib/python311.zip', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/lib-dynload', '/home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages']",
    "INFO: _tst_sys(): 'requests' location = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages/requests/__init__.py",
    "INFO: _tst_wheel(): requests = 2.32.3",
    "INFO: _tst_libssl(): 'ssl' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/ssl.py",
    "INFO: _tst_libssl: connecting to: www.python.org",
    "INFO: _tst_libssl: sock version: TLSv1.3",
    "INFO: _tst_datetime(): 'datetime' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/datetime.py",
    "INFO: _tst_datetime(): datetime.datetime.now() = 2025-03-12 12:00:21.848550",
    "INFO: _tst_datetime(): datetime.datetime.now().strftime() = 20250312120021"
  ],
  "database_writes": {},
  "errors": []
}

# debian-11
{
  "trigger_time": "2025-03-12T12:00:22Z",
  "log_lines": [
    "INFO: _tst_log(): success",
    "INFO: _tst_sys(): sys.prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.exec_prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.base_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.base_exec_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.path = ['/home/jamie/tmp/influxdb3-pe/install/python/lib/python311.zip', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/lib-dynload', '/home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages']",
    "INFO: _tst_sys(): 'requests' location = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages/requests/__init__.py",
    "INFO: _tst_wheel(): requests = 2.32.3",
    "INFO: _tst_libssl(): 'ssl' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/ssl.py",
    "INFO: _tst_libssl: connecting to: www.python.org",
    "INFO: _tst_libssl: sock version: TLSv1.3",
    "INFO: _tst_datetime(): 'datetime' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/datetime.py",
    "INFO: _tst_datetime(): datetime.datetime.now() = 2025-03-12 12:00:22.068753",
    "INFO: _tst_datetime(): datetime.datetime.now().strftime() = 20250312120022"
  ],
  "database_writes": {},
  "errors": []
}

# debian-12
{
  "trigger_time": "2025-03-12T12:00:23Z",
  "log_lines": [
    "INFO: _tst_log(): success",
    "INFO: _tst_sys(): sys.prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.exec_prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.base_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.base_exec_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.path = ['/home/jamie/tmp/influxdb3-pe/install/python/lib/python311.zip', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/lib-dynload', '/home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages']",
    "INFO: _tst_sys(): 'requests' location = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages/requests/__init__.py",
    "INFO: _tst_wheel(): requests = 2.32.3",
    "INFO: _tst_libssl(): 'ssl' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/ssl.py",
    "INFO: _tst_libssl: connecting to: www.python.org",
    "INFO: _tst_libssl: sock version: TLSv1.3",
    "INFO: _tst_datetime(): 'datetime' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/datetime.py",
    "INFO: _tst_datetime(): datetime.datetime.now() = 2025-03-12 12:00:22.307292",
    "INFO: _tst_datetime(): datetime.datetime.now().strftime() = 20250312120022"
  ],
  "database_writes": {},
  "errors": []
}

# fedora-41
{
  "trigger_time": "2025-03-12T12:00:23Z",
  "log_lines": [
    "INFO: _tst_log(): success",
    "INFO: _tst_sys(): sys.prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.exec_prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.base_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.base_exec_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.path = ['/home/jamie/tmp/influxdb3-pe/install/python/lib/python311.zip', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/lib-dynload', '/home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages']",
    "INFO: _tst_sys(): 'requests' location = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages/requests/__init__.py",
    "INFO: _tst_wheel(): requests = 2.32.3",
    "INFO: _tst_libssl(): 'ssl' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/ssl.py",
    "INFO: _tst_libssl: connecting to: www.python.org",
    "INFO: _tst_libssl: sock version: TLSv1.3",
    "INFO: _tst_datetime(): 'datetime' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/datetime.py",
    "INFO: _tst_datetime(): datetime.datetime.now() = 2025-03-12 12:00:22.736326",
    "INFO: _tst_datetime(): datetime.datetime.now().strftime() = 20250312120022"
  ],
  "database_writes": {},
  "errors": []
}

# oracle-8
{
  "trigger_time": "2025-03-12T12:00:23Z",
  "log_lines": [
    "INFO: _tst_log(): success",
    "INFO: _tst_sys(): sys.prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.exec_prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.base_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.base_exec_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.path = ['/home/jamie/tmp/influxdb3-pe/install/python/lib/python311.zip', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/lib-dynload', '/home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages']",
    "INFO: _tst_sys(): 'requests' location = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages/requests/__init__.py",
    "INFO: _tst_wheel(): requests = 2.32.3",
    "INFO: _tst_libssl(): 'ssl' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/ssl.py",
    "INFO: _tst_libssl: connecting to: www.python.org",
    "INFO: _tst_libssl: sock version: TLSv1.3",
    "INFO: _tst_datetime(): 'datetime' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/datetime.py",
    "INFO: _tst_datetime(): datetime.datetime.now() = 2025-03-12 12:00:23.211591",
    "INFO: _tst_datetime(): datetime.datetime.now().strftime() = 20250312120023"
  ],
  "database_writes": {},
  "errors": []
}

# oracle-9
{
  "trigger_time": "2025-03-12T12:00:24Z",
  "log_lines": [
    "INFO: _tst_log(): success",
    "INFO: _tst_sys(): sys.prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.exec_prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.base_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.base_exec_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.path = ['/home/jamie/tmp/influxdb3-pe/install/python/lib/python311.zip', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/lib-dynload', '/home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages']",
    "INFO: _tst_sys(): 'requests' location = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages/requests/__init__.py",
    "INFO: _tst_wheel(): requests = 2.32.3",
    "INFO: _tst_libssl(): 'ssl' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/ssl.py",
    "INFO: _tst_libssl: connecting to: www.python.org",
    "INFO: _tst_libssl: sock version: TLSv1.3",
    "INFO: _tst_datetime(): 'datetime' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/datetime.py",
    "INFO: _tst_datetime(): datetime.datetime.now() = 2025-03-12 12:00:23.580735",
    "INFO: _tst_datetime(): datetime.datetime.now().strftime() = 20250312120023"
  ],
  "database_writes": {},
  "errors": []
}

# rocky-8
{
  "trigger_time": "2025-03-12T12:00:24Z",
  "log_lines": [
    "INFO: _tst_log(): success",
    "INFO: _tst_sys(): sys.prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.exec_prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.base_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.base_exec_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.path = ['/home/jamie/tmp/influxdb3-pe/install/python/lib/python311.zip', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/lib-dynload', '/home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages']",
    "INFO: _tst_sys(): 'requests' location = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages/requests/__init__.py",
    "INFO: _tst_wheel(): requests = 2.32.3",
    "INFO: _tst_libssl(): 'ssl' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/ssl.py",
    "INFO: _tst_libssl: connecting to: www.python.org",
    "INFO: _tst_libssl: sock version: TLSv1.3",
    "INFO: _tst_datetime(): 'datetime' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/datetime.py",
    "INFO: _tst_datetime(): datetime.datetime.now() = 2025-03-12 12:00:23.944212",
    "INFO: _tst_datetime(): datetime.datetime.now().strftime() = 20250312120023"
  ],
  "database_writes": {},
  "errors": []
}

# rocky-9
{
  "trigger_time": "2025-03-12T12:00:25Z",
  "log_lines": [
    "INFO: _tst_log(): success",
    "INFO: _tst_sys(): sys.prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.exec_prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.base_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.base_exec_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.path = ['/home/jamie/tmp/influxdb3-pe/install/python/lib/python311.zip', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/lib-dynload', '/home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages']",
    "INFO: _tst_sys(): 'requests' location = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages/requests/__init__.py",
    "INFO: _tst_wheel(): requests = 2.32.3",
    "INFO: _tst_libssl(): 'ssl' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/ssl.py",
    "INFO: _tst_libssl: connecting to: www.python.org",
    "INFO: _tst_libssl: sock version: TLSv1.3",
    "INFO: _tst_datetime(): 'datetime' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/datetime.py",
    "INFO: _tst_datetime(): datetime.datetime.now() = 2025-03-12 12:00:24.296770",
    "INFO: _tst_datetime(): datetime.datetime.now().strftime() = 20250312120024"
  ],
  "database_writes": {},
  "errors": []
}

# ubuntu-14
{
  "trigger_time": "2025-03-12T12:00:25Z",
  "log_lines": [
    "INFO: _tst_log(): success",
    "INFO: _tst_sys(): sys.prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.exec_prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.base_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.base_exec_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.path = ['/home/jamie/tmp/influxdb3-pe/install/python/lib/python311.zip', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/lib-dynload', '/home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages']",
    "INFO: _tst_sys(): 'requests' location = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages/requests/__init__.py",
    "INFO: _tst_wheel(): requests = 2.32.3",
    "INFO: _tst_libssl(): 'ssl' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/ssl.py",
    "INFO: _tst_libssl: connecting to: www.python.org",
    "INFO: _tst_libssl: sock version: TLSv1.3",
    "INFO: _tst_datetime(): 'datetime' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/datetime.py",
    "INFO: _tst_datetime(): datetime.datetime.now() = 2025-03-12 12:00:24.630465",
    "INFO: _tst_datetime(): datetime.datetime.now().strftime() = 20250312120024"
  ],
  "database_writes": {},
  "errors": []
}

# ubuntu-16
{
  "trigger_time": "2025-03-12T12:00:25Z",
  "log_lines": [
    "INFO: _tst_log(): success",
    "INFO: _tst_sys(): sys.prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.exec_prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.base_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.base_exec_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.path = ['/home/jamie/tmp/influxdb3-pe/install/python/lib/python311.zip', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/lib-dynload', '/home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages']",
    "INFO: _tst_sys(): 'requests' location = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages/requests/__init__.py",
    "INFO: _tst_wheel(): requests = 2.32.3",
    "INFO: _tst_libssl(): 'ssl' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/ssl.py",
    "INFO: _tst_libssl: connecting to: www.python.org",
    "INFO: _tst_libssl: sock version: TLSv1.3",
    "INFO: _tst_datetime(): 'datetime' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/datetime.py",
    "INFO: _tst_datetime(): datetime.datetime.now() = 2025-03-12 12:00:24.917743",
    "INFO: _tst_datetime(): datetime.datetime.now().strftime() = 20250312120024"
  ],
  "database_writes": {},
  "errors": []
}

# ubuntu-18
{
  "trigger_time": "2025-03-12T12:00:25Z",
  "log_lines": [
    "INFO: _tst_log(): success",
    "INFO: _tst_sys(): sys.prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.exec_prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.base_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.base_exec_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.path = ['/home/jamie/tmp/influxdb3-pe/install/python/lib/python311.zip', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/lib-dynload', '/home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages']",
    "INFO: _tst_sys(): 'requests' location = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages/requests/__init__.py",
    "INFO: _tst_wheel(): requests = 2.32.3",
    "INFO: _tst_libssl(): 'ssl' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/ssl.py",
    "INFO: _tst_libssl: connecting to: www.python.org",
    "INFO: _tst_libssl: sock version: TLSv1.3",
    "INFO: _tst_datetime(): 'datetime' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/datetime.py",
    "INFO: _tst_datetime(): datetime.datetime.now() = 2025-03-12 12:00:25.214151",
    "INFO: _tst_datetime(): datetime.datetime.now().strftime() = 20250312120025"
  ],
  "database_writes": {},
  "errors": []
}

# ubuntu-20
{
  "trigger_time": "2025-03-12T12:00:26Z",
  "log_lines": [
    "INFO: _tst_log(): success",
    "INFO: _tst_sys(): sys.prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.exec_prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.base_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.base_exec_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.path = ['/home/jamie/tmp/influxdb3-pe/install/python/lib/python311.zip', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/lib-dynload', '/home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages']",
    "INFO: _tst_sys(): 'requests' location = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages/requests/__init__.py",
    "INFO: _tst_wheel(): requests = 2.32.3",
    "INFO: _tst_libssl(): 'ssl' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/ssl.py",
    "INFO: _tst_libssl: connecting to: www.python.org",
    "INFO: _tst_libssl: sock version: TLSv1.3",
    "INFO: _tst_datetime(): 'datetime' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/datetime.py",
    "INFO: _tst_datetime(): datetime.datetime.now() = 2025-03-12 12:00:25.521429",
    "INFO: _tst_datetime(): datetime.datetime.now().strftime() = 20250312120025"
  ],
  "database_writes": {},
  "errors": []
}

# ubuntu-22
{
  "trigger_time": "2025-03-12T12:00:26Z",
  "log_lines": [
    "INFO: _tst_log(): success",
    "INFO: _tst_sys(): sys.prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.exec_prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.base_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.base_exec_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.path = ['/home/jamie/tmp/influxdb3-pe/install/python/lib/python311.zip', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/lib-dynload', '/home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages']",
    "INFO: _tst_sys(): 'requests' location = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages/requests/__init__.py",
    "INFO: _tst_wheel(): requests = 2.32.3",
    "INFO: _tst_libssl(): 'ssl' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/ssl.py",
    "INFO: _tst_libssl: connecting to: www.python.org",
    "INFO: _tst_libssl: sock version: TLSv1.3",
    "INFO: _tst_datetime(): 'datetime' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/datetime.py",
    "INFO: _tst_datetime(): datetime.datetime.now() = 2025-03-12 12:00:25.863578",
    "INFO: _tst_datetime(): datetime.datetime.now().strftime() = 20250312120025"
  ],
  "database_writes": {},
  "errors": []
}

# ubuntu-24
{
  "trigger_time": "2025-03-12T12:00:26Z",
  "log_lines": [
    "INFO: _tst_log(): success",
    "INFO: _tst_sys(): sys.prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.exec_prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.base_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.base_exec_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.path = ['/home/jamie/tmp/influxdb3-pe/install/python/lib/python311.zip', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/lib-dynload', '/home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages']",
    "INFO: _tst_sys(): 'requests' location = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages/requests/__init__.py",
    "INFO: _tst_wheel(): requests = 2.32.3",
    "INFO: _tst_libssl(): 'ssl' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/ssl.py",
    "INFO: _tst_libssl: connecting to: www.python.org",
    "INFO: _tst_libssl: sock version: TLSv1.3",
    "INFO: _tst_datetime(): 'datetime' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/datetime.py",
    "INFO: _tst_datetime(): datetime.datetime.now() = 2025-03-12 12:00:26.180309",
    "INFO: _tst_datetime(): datetime.datetime.now().strftime() = 20250312120026"
  ],
  "database_writes": {},
  "errors": []
}


#
# test wal
#
$ for c in $(incus list --format csv | grep RUNNING | cut -d , -f 1) ; do echo "# $c" ; incus exec --user 1001 --group 1001 $c -- /home/jamie/tmp/influxdb3-pe/install/influxdb3 test wal_plugin -d mydb01 --lp="telegraf,cpu=cpu-total,host=foo usage_guest=0.0,usage_guest_nice=0.0,usage_idle=90.0,usage_iowait=0.3,usage_irq=0.0,usage_nice=0.0,usage_softirq=0.0,usage_steal=0.07,usage_system=0.7,usage_user=0.4" --input-arguments="host=foo" test-wal.py ; echo ; done
# amzn-2
{
  "log_lines": [
    "INFO: _tst_query_basic(): query = 'SELECT * FROM telegraf LIMIT 1'",
    "INFO: _tst_query_basic(): result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780765687885256, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_query_args(): args = '{'host': 'foo'}'",
    "INFO: _tst_query_args(): parameterized query = 'SELECT * FROM telegraf WHERE host = $host LIMIT 1'",
    "INFO: _tst_query_args(): parameterized query result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780765687885256, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_table_batches(): table = telegraf",
    "INFO: _tst_table_batches(): row = {'cpu': 'cpu-total', 'host': 'foo', 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 90.0, 'usage_iowait': 0.3, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.07, 'usage_system': 0.7, 'usage_user': 0.4, 'time': 1741780841420588478}",
    "INFO: _tst_write_table(): line = test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\"",
    "INFO: _tst_write_db(): line = other_table other_field=1i,other_field2=3.14 1741780841472490639"
  ],
  "database_writes": {
    "mydb01": [
      "test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\""
    ],
    "mydb02": [
      "other_table other_field=1i,other_field2=3.14 1741780841472490639"
    ]
  },
  "errors": []
}

# amzn-2023
{
  "log_lines": [
    "INFO: _tst_query_basic(): query = 'SELECT * FROM telegraf LIMIT 1'",
    "INFO: _tst_query_basic(): result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780766306026415, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_query_args(): args = '{'host': 'foo'}'",
    "INFO: _tst_query_args(): parameterized query = 'SELECT * FROM telegraf WHERE host = $host LIMIT 1'",
    "INFO: _tst_query_args(): parameterized query result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780766306026415, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_table_batches(): table = telegraf",
    "INFO: _tst_table_batches(): row = {'cpu': 'cpu-total', 'host': 'foo', 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 90.0, 'usage_iowait': 0.3, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.07, 'usage_system': 0.7, 'usage_user': 0.4, 'time': 1741780841540963723}",
    "INFO: _tst_write_table(): line = test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\"",
    "INFO: _tst_write_db(): line = other_table other_field=1i,other_field2=3.14 1741780841584503568"
  ],
  "database_writes": {
    "mydb01": [
      "test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\""
    ],
    "mydb02": [
      "other_table other_field=1i,other_field2=3.14 1741780841584503568"
    ]
  },
  "errors": []
}

# debian-8
{
  "log_lines": [
    "INFO: _tst_query_basic(): query = 'SELECT * FROM telegraf LIMIT 1'",
    "INFO: _tst_query_basic(): result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780766705856924, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_query_args(): args = '{'host': 'foo'}'",
    "INFO: _tst_query_args(): parameterized query = 'SELECT * FROM telegraf WHERE host = $host LIMIT 1'",
    "INFO: _tst_query_args(): parameterized query result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780766705856924, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_table_batches(): table = telegraf",
    "INFO: _tst_table_batches(): row = {'cpu': 'cpu-total', 'host': 'foo', 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 90.0, 'usage_iowait': 0.3, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.07, 'usage_system': 0.7, 'usage_user': 0.4, 'time': 1741780841638353173}",
    "INFO: _tst_write_table(): line = test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\"",
    "INFO: _tst_write_db(): line = other_table other_field=1i,other_field2=3.14 1741780841680935450"
  ],
  "database_writes": {
    "mydb02": [
      "other_table other_field=1i,other_field2=3.14 1741780841680935450"
    ],
    "mydb01": [
      "test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\""
    ]
  },
  "errors": []
}

# debian-9
{
  "log_lines": [
    "INFO: _tst_query_basic(): query = 'SELECT * FROM telegraf LIMIT 1'",
    "INFO: _tst_query_basic(): result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780767457239369, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_query_args(): args = '{'host': 'foo'}'",
    "INFO: _tst_query_args(): parameterized query = 'SELECT * FROM telegraf WHERE host = $host LIMIT 1'",
    "INFO: _tst_query_args(): parameterized query result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780767457239369, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_table_batches(): table = telegraf",
    "INFO: _tst_table_batches(): row = {'cpu': 'cpu-total', 'host': 'foo', 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 90.0, 'usage_iowait': 0.3, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.07, 'usage_system': 0.7, 'usage_user': 0.4, 'time': 1741780841744668129}",
    "INFO: _tst_write_table(): line = test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\"",
    "INFO: _tst_write_db(): line = other_table other_field=1i,other_field2=3.14 1741780841806587125"
  ],
  "database_writes": {
    "mydb01": [
      "test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\""
    ],
    "mydb02": [
      "other_table other_field=1i,other_field2=3.14 1741780841806587125"
    ]
  },
  "errors": []
}

# debian-10
{
  "log_lines": [
    "INFO: _tst_query_basic(): query = 'SELECT * FROM telegraf LIMIT 1'",
    "INFO: _tst_query_basic(): result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780767974481396, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_query_args(): args = '{'host': 'foo'}'",
    "INFO: _tst_query_args(): parameterized query = 'SELECT * FROM telegraf WHERE host = $host LIMIT 1'",
    "INFO: _tst_query_args(): parameterized query result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780767974481396, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_table_batches(): table = telegraf",
    "INFO: _tst_table_batches(): row = {'cpu': 'cpu-total', 'host': 'foo', 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 90.0, 'usage_iowait': 0.3, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.07, 'usage_system': 0.7, 'usage_user': 0.4, 'time': 1741780841883312373}",
    "INFO: _tst_write_table(): line = test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\"",
    "INFO: _tst_write_db(): line = other_table other_field=1i,other_field2=3.14 1741780841932833220"
  ],
  "database_writes": {
    "mydb01": [
      "test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\""
    ],
    "mydb02": [
      "other_table other_field=1i,other_field2=3.14 1741780841932833220"
    ]
  },
  "errors": []
}

# debian-11
{
  "log_lines": [
    "INFO: _tst_query_basic(): query = 'SELECT * FROM telegraf LIMIT 1'",
    "INFO: _tst_query_basic(): result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780768761733668, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_query_args(): args = '{'host': 'foo'}'",
    "INFO: _tst_query_args(): parameterized query = 'SELECT * FROM telegraf WHERE host = $host LIMIT 1'",
    "INFO: _tst_query_args(): parameterized query result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780768761733668, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_table_batches(): table = telegraf",
    "INFO: _tst_table_batches(): row = {'cpu': 'cpu-total', 'host': 'foo', 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 90.0, 'usage_iowait': 0.3, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.07, 'usage_system': 0.7, 'usage_user': 0.4, 'time': 1741780841989057924}",
    "INFO: _tst_write_table(): line = test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\"",
    "INFO: _tst_write_db(): line = other_table other_field=1i,other_field2=3.14 1741780842053746207"
  ],
  "database_writes": {
    "mydb01": [
      "test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\""
    ],
    "mydb02": [
      "other_table other_field=1i,other_field2=3.14 1741780842053746207"
    ]
  },
  "errors": []
}

# debian-12
{
  "log_lines": [
    "INFO: _tst_query_basic(): query = 'SELECT * FROM telegraf LIMIT 1'",
    "INFO: _tst_query_basic(): result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780769823708400, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_query_args(): args = '{'host': 'foo'}'",
    "INFO: _tst_query_args(): parameterized query = 'SELECT * FROM telegraf WHERE host = $host LIMIT 1'",
    "INFO: _tst_query_args(): parameterized query result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780769823708400, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_table_batches(): table = telegraf",
    "INFO: _tst_table_batches(): row = {'cpu': 'cpu-total', 'host': 'foo', 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 90.0, 'usage_iowait': 0.3, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.07, 'usage_system': 0.7, 'usage_user': 0.4, 'time': 1741780842120220778}",
    "INFO: _tst_write_table(): line = test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\"",
    "INFO: _tst_write_db(): line = other_table other_field=1i,other_field2=3.14 1741780842162562821"
  ],
  "database_writes": {
    "mydb01": [
      "test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\""
    ],
    "mydb02": [
      "other_table other_field=1i,other_field2=3.14 1741780842162562821"
    ]
  },
  "errors": []
}

# fedora-41
{
  "log_lines": [
    "INFO: _tst_query_basic(): query = 'SELECT * FROM telegraf LIMIT 1'",
    "INFO: _tst_query_basic(): result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780770816240293, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_query_args(): args = '{'host': 'foo'}'",
    "INFO: _tst_query_args(): parameterized query = 'SELECT * FROM telegraf WHERE host = $host LIMIT 1'",
    "INFO: _tst_query_args(): parameterized query result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780770816240293, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_table_batches(): table = telegraf",
    "INFO: _tst_table_batches(): row = {'cpu': 'cpu-total', 'host': 'foo', 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 90.0, 'usage_iowait': 0.3, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.07, 'usage_system': 0.7, 'usage_user': 0.4, 'time': 1741780842217774929}",
    "INFO: _tst_write_table(): line = test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\"",
    "INFO: _tst_write_db(): line = other_table other_field=1i,other_field2=3.14 1741780842258431132"
  ],
  "database_writes": {
    "mydb01": [
      "test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\""
    ],
    "mydb02": [
      "other_table other_field=1i,other_field2=3.14 1741780842258431132"
    ]
  },
  "errors": []
}

# oracle-8
{
  "log_lines": [
    "INFO: _tst_query_basic(): query = 'SELECT * FROM telegraf LIMIT 1'",
    "INFO: _tst_query_basic(): result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780771273440536, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_query_args(): args = '{'host': 'foo'}'",
    "INFO: _tst_query_args(): parameterized query = 'SELECT * FROM telegraf WHERE host = $host LIMIT 1'",
    "INFO: _tst_query_args(): parameterized query result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780771273440536, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_table_batches(): table = telegraf",
    "INFO: _tst_table_batches(): row = {'cpu': 'cpu-total', 'host': 'foo', 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 90.0, 'usage_iowait': 0.3, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.07, 'usage_system': 0.7, 'usage_user': 0.4, 'time': 1741780842318968956}",
    "INFO: _tst_write_table(): line = test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\"",
    "INFO: _tst_write_db(): line = other_table other_field=1i,other_field2=3.14 1741780842391664040"
  ],
  "database_writes": {
    "mydb01": [
      "test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\""
    ],
    "mydb02": [
      "other_table other_field=1i,other_field2=3.14 1741780842391664040"
    ]
  },
  "errors": []
}

# oracle-9
{
  "log_lines": [
    "INFO: _tst_query_basic(): query = 'SELECT * FROM telegraf LIMIT 1'",
    "INFO: _tst_query_basic(): result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780772020141536, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_query_args(): args = '{'host': 'foo'}'",
    "INFO: _tst_query_args(): parameterized query = 'SELECT * FROM telegraf WHERE host = $host LIMIT 1'",
    "INFO: _tst_query_args(): parameterized query result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780772020141536, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_table_batches(): table = telegraf",
    "INFO: _tst_table_batches(): row = {'cpu': 'cpu-total', 'host': 'foo', 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 90.0, 'usage_iowait': 0.3, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.07, 'usage_system': 0.7, 'usage_user': 0.4, 'time': 1741780842466985806}",
    "INFO: _tst_write_table(): line = test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\"",
    "INFO: _tst_write_db(): line = other_table other_field=1i,other_field2=3.14 1741780842511934189"
  ],
  "database_writes": {
    "mydb02": [
      "other_table other_field=1i,other_field2=3.14 1741780842511934189"
    ],
    "mydb01": [
      "test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\""
    ]
  },
  "errors": []
}

# rocky-8
{
  "log_lines": [
    "INFO: _tst_query_basic(): query = 'SELECT * FROM telegraf LIMIT 1'",
    "INFO: _tst_query_basic(): result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780772619123419, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_query_args(): args = '{'host': 'foo'}'",
    "INFO: _tst_query_args(): parameterized query = 'SELECT * FROM telegraf WHERE host = $host LIMIT 1'",
    "INFO: _tst_query_args(): parameterized query result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780772619123419, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_table_batches(): table = telegraf",
    "INFO: _tst_table_batches(): row = {'cpu': 'cpu-total', 'host': 'foo', 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 90.0, 'usage_iowait': 0.3, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.07, 'usage_system': 0.7, 'usage_user': 0.4, 'time': 1741780842603611542}",
    "INFO: _tst_write_table(): line = test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\"",
    "INFO: _tst_write_db(): line = other_table other_field=1i,other_field2=3.14 1741780842667597774"
  ],
  "database_writes": {
    "mydb02": [
      "other_table other_field=1i,other_field2=3.14 1741780842667597774"
    ],
    "mydb01": [
      "test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\""
    ]
  },
  "errors": []
}

# rocky-9
{
  "log_lines": [
    "INFO: _tst_query_basic(): query = 'SELECT * FROM telegraf LIMIT 1'",
    "INFO: _tst_query_basic(): result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780773267832071, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_query_args(): args = '{'host': 'foo'}'",
    "INFO: _tst_query_args(): parameterized query = 'SELECT * FROM telegraf WHERE host = $host LIMIT 1'",
    "INFO: _tst_query_args(): parameterized query result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780773267832071, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_table_batches(): table = telegraf",
    "INFO: _tst_table_batches(): row = {'cpu': 'cpu-total', 'host': 'foo', 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 90.0, 'usage_iowait': 0.3, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.07, 'usage_system': 0.7, 'usage_user': 0.4, 'time': 1741780842745239426}",
    "INFO: _tst_write_table(): line = test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\"",
    "INFO: _tst_write_db(): line = other_table other_field=1i,other_field2=3.14 1741780842793991606"
  ],
  "database_writes": {
    "mydb01": [
      "test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\""
    ],
    "mydb02": [
      "other_table other_field=1i,other_field2=3.14 1741780842793991606"
    ]
  },
  "errors": []
}

# ubuntu-14
{
  "log_lines": [
    "INFO: _tst_query_basic(): query = 'SELECT * FROM telegraf LIMIT 1'",
    "INFO: _tst_query_basic(): result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780774139936940, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_query_args(): args = '{'host': 'foo'}'",
    "INFO: _tst_query_args(): parameterized query = 'SELECT * FROM telegraf WHERE host = $host LIMIT 1'",
    "INFO: _tst_query_args(): parameterized query result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780774139936940, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_table_batches(): table = telegraf",
    "INFO: _tst_table_batches(): row = {'cpu': 'cpu-total', 'host': 'foo', 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 90.0, 'usage_iowait': 0.3, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.07, 'usage_system': 0.7, 'usage_user': 0.4, 'time': 1741780842885225585}",
    "INFO: _tst_write_table(): line = test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\"",
    "INFO: _tst_write_db(): line = other_table other_field=1i,other_field2=3.14 1741780842949969597"
  ],
  "database_writes": {
    "mydb01": [
      "test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\""
    ],
    "mydb02": [
      "other_table other_field=1i,other_field2=3.14 1741780842949969597"
    ]
  },
  "errors": []
}

# ubuntu-16
{
  "log_lines": [
    "INFO: _tst_query_basic(): query = 'SELECT * FROM telegraf LIMIT 1'",
    "INFO: _tst_query_basic(): result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780775020255304, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_query_args(): args = '{'host': 'foo'}'",
    "INFO: _tst_query_args(): parameterized query = 'SELECT * FROM telegraf WHERE host = $host LIMIT 1'",
    "INFO: _tst_query_args(): parameterized query result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780775020255304, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_table_batches(): table = telegraf",
    "INFO: _tst_table_batches(): row = {'cpu': 'cpu-total', 'host': 'foo', 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 90.0, 'usage_iowait': 0.3, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.07, 'usage_system': 0.7, 'usage_user': 0.4, 'time': 1741780843053704646}",
    "INFO: _tst_write_table(): line = test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\"",
    "INFO: _tst_write_db(): line = other_table other_field=1i,other_field2=3.14 1741780843100762537"
  ],
  "database_writes": {
    "mydb02": [
      "other_table other_field=1i,other_field2=3.14 1741780843100762537"
    ],
    "mydb01": [
      "test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\""
    ]
  },
  "errors": []
}

# ubuntu-18
{
  "log_lines": [
    "INFO: _tst_query_basic(): query = 'SELECT * FROM telegraf LIMIT 1'",
    "INFO: _tst_query_basic(): result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780775652857158, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",$ readelf -s code/tmp/python-standalone/tarballs/20250221/x86_64-unknown-linux-gnu/python/lib/libpython3.11.so | grep -E '@GLIB(C|CXX)_' | sed 's/.*GLIB\(C\|CXX\)_\([0-9\.]\+\).*/GLIB\1_\2/g' | sort -uV
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_2.17

    "INFO: _tst_query_args(): args = '{'host': 'foo'}'",
    "INFO: _tst_query_args(): parameterized query = 'SELECT * FROM telegraf WHERE host = $host LIMIT 1'",
    "INFO: _tst_query_args(): parameterized query result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780775652857158, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_table_batches(): table = telegraf",
    "INFO: _tst_table_batches(): row = {'cpu': 'cpu-total', 'host': 'foo', 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 90.0, 'usage_iowait': 0.3, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.07, 'usage_system': 0.7, 'usage_user': 0.4, 'time': 1741780843197936432}",
    "INFO: _tst_write_table(): line = test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\"",
    "INFO: _tst_write_db(): line = other_table other_field=1i,other_field2=3.14 1741780843241126652"
  ],
  "database_writes": {
    "mydb02": [
      "other_table other_field=1i,other_field2=3.14 1741780843241126652"
    ],
    "mydb01": [
      "test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\""
    ]
  },
  "errors": []
}

# ubuntu-20
{
  "log_lines": [
    "INFO: _tst_query_basic(): query = 'SELECT * FROM telegraf LIMIT 1'",
    "INFO: _tst_query_basic(): result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780775976677092, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_query_args(): args = '{'host': 'foo'}'",
    "INFO: _tst_query_args(): parameterized query = 'SELECT * FROM telegraf WHERE host = $host LIMIT 1'",
    "INFO: _tst_query_args(): parameterized query result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780775976677092, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_table_batches(): table = telegraf",
    "INFO: _tst_table_batches(): row = {'cpu': 'cpu-total', 'host': 'foo', 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 90.0, 'usage_iowait': 0.3, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.07, 'usage_system': 0.7, 'usage_user': 0.4, 'time': 1741780843320793386}",
    "INFO: _tst_write_table(): line = test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\"",
    "INFO: _tst_write_db(): line = other_table other_field=1i,other_field2=3.14 1741780843371705184"
  ],
  "database_writes": {
    "mydb02": [
      "other_table other_field=1i,other_field2=3.14 1741780843371705184"
    ],
    "mydb01": [
      "test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\""
    ]
  },
  "errors": []
}

# ubuntu-22
{
  "log_lines": [
    "INFO: _tst_query_basic(): query = 'SELECT * FROM telegraf LIMIT 1'",
    "INFO: _tst_query_basic(): result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780776167211195, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_query_args(): args = '{'host': 'foo'}'",
    "INFO: _tst_query_args(): parameterized query = 'SELECT * FROM telegraf WHERE host = $host LIMIT 1'",
    "INFO: _tst_query_args(): parameterized query result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780776167211195, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_table_batches(): table = telegraf",
    "INFO: _tst_table_batches(): row = {'cpu': 'cpu-total', 'host': 'foo', 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 90.0, 'usage_iowait': 0.3, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.07, 'usage_system': 0.7, 'usage_user': 0.4, 'time': 1741780843453721932}",
    "INFO: _tst_write_table(): line = test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\"",
    "INFO: _tst_write_db(): line = other_table other_field=1i,other_field2=3.14 1741780843507631138"
  ],
  "database_writes": {
    "mydb01": [
      "test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\""
    ],
    "mydb02": [
      "other_table other_field=1i,other_field2=3.14 1741780843507631138"
    ]
  },
  "errors": []
}

# ubuntu-24
{
  "log_lines": [
    "INFO: _tst_query_basic(): query = 'SELECT * FROM telegraf LIMIT 1'",
    "INFO: _tst_query_basic(): result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780776819731970, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_query_args(): args = '{'host': 'foo'}'",
    "INFO: _tst_query_args(): parameterized query = 'SELECT * FROM telegraf WHERE host = $host LIMIT 1'",
    "INFO: _tst_query_args(): parameterized query result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741780776819731970, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_table_batches(): table = telegraf",
    "INFO: _tst_table_batches(): row = {'cpu': 'cpu-total', 'host': 'foo', 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 90.0, 'usage_iowait': 0.3, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.07, 'usage_system': 0.7, 'usage_user': 0.4, 'time': 1741780843584486340}",
    "INFO: _tst_write_table(): line = test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\"",
    "INFO: _tst_write_db(): line = other_table other_field=1i,other_field2=3.14 1741780843649519528"
  ],
  "database_writes": {
    "mydb01": [
      "test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\""
    ],
    "mydb02": [
      "other_table other_field=1i,other_field2=3.14 1741780843649519528"
    ]
  },
  "errors": []
}

aarch64 testing

Downloaded debug tarball from https://app.circleci.com/pipelines/github/influxdata/influxdb/44683/workflows/939d6723-dd8b-4a49-90d8-b7aa597f87bb/jobs/422874/artifacts, then extracted influxdb3 and performed patchelf --set-rpath '$ORIGIN/python/lib:$ORIGIN/../lib/influxdb3/python/lib' ./aarch64-unknown-linux-gnu/influxdb3 (the release builds CircleCI job does this for us, but not the build-dev job).

Unlike x86_64 testing, I only tested on aarch64 with a subset of the oldest (intended) supported releases (Amazon Linux 2, Rocky Linux 8 (for RHEL/CentOS 8 compatibility) and Ubuntu 16.14 LTS).

Details
# used glibc symbol versions in influxdb3
$ readelf -s ./aarch64-unknown-linux-gnu/influxdb3 | grep -E '@GLIB(C|CXX)_' | sed 's/.*GLIB\(C\|CXX\)_\([0-9\.]\+\).*/GLIB\1_\2/g' | sort -uV
GLIBC_2.17
GLIBC_2.18

# used glibc symbol versions in python-build-standalone libpython3.11
$ readelf -s ./glibc/python/lib/libpython3.11.so | grep -E '@GLIB(C|CXX)_' | sed 's/.*GLIB\(C\|CXX\)_\([0-9\.]\+\).*/GLIB\1_\2/g' | sort -uV
GLIBC_2.17

#
# Recreate test env simulating a tarball unpack with python beside influxdb3
#
# reinitialize dirs
$ for c in $(incus list --format csv | grep RUNNING | cut -d , -f 1) ; do echo "# $c" ; incus exec --user 1001 --group 1001 $c -- sh -c 'sudo rm -rf /home/jamie/tmp/influxdb3-pe/data/ /home/jamie/tmp/influxdb3-pe/install ; mkdir -p /home/jamie/tmp/influxdb3-pe/install/python /home/jamie/tmp/influxdb3-pe/data/plugins' ; echo ; done
# amzn-2

# rocky-8

# ubuntu-16

# copy influxdb3 binary
$ for c in $(incus list --format csv | grep RUNNING | cut -d , -f 1) ; do echo "# $c" ; incus file push --uid 1001 --gid 1001 ~/glibc/influxdb3 $c/home/jamie/tmp/influxdb3-pe/install/influxdb3 ; echo ; done
...

# copy python beside influxdb3
$ for c in $(incus list --format csv | grep RUNNING | cut -d , -f 1) ; do echo "# $c" ; incus file push --uid 1001 --gid 1001 ~/glibc/aarch64-unknown-linux-gnu.tar.gz $c/home/jamie/tmp/influxdb3-pe/install/ ; echo ; done
...
$ for c in $(incus list --format csv | grep RUNNING | cut -d , -f 1) ; do echo "# $c" ; incus exec --user 1001 --group 1001 $c -- sh -c 'cd /home/jamie/tmp/influxdb3-pe/install && tar -zxf ./aarch64-unknown-linux-gnu.tar.gz' ; echo ; done
...

# copy plugins
$ for c in $(incus list --format csv | grep RUNNING | cut -d , -f 1) ; do echo "# $c" ; incus file push --uid 1001 --gid 1001 ~/glibc/plugins/test-* $c/home/jamie/tmp/influxdb3-pe/data/plugins/ ; echo ; done
...

# contents of plugins
$ for p in ~/glibc/plugins/test-* ; do echo "# $p" ; cat $p ; echo ; done
# /home/ubuntu/glibc/plugins/test-schedule.py
import importlib.util

def _tst_log(influxdb3_local):
    influxdb3_local.info("_tst_log(): success")

def _tst_sys(influxdb3_local):
    try:
        import sys
        influxdb3_local.info("_tst_sys(): sys.prefix = %s" % sys.prefix)
        influxdb3_local.info("_tst_sys(): sys.exec_prefix = %s" % sys.exec_prefix)
        influxdb3_local.info("_tst_sys(): sys.base_prefix = %s" % sys.base_prefix)
        influxdb3_local.info("_tst_sys(): sys.base_exec_prefix = %s" % sys.base_exec_prefix)
        influxdb3_local.info("_tst_sys(): sys.path = %s" % sys.path)
    except Exception as e:
        influxdb3_local.error("_tst_sys(): %s" % e)
        return

def _tst_wheel(influxdb3_local):
    spec = importlib.util.find_spec("requests")
    if spec is not None:
        try:
            influxdb3_local.info("_tst_sys(): 'requests' location = %s" % spec.origin)

            import requests
            influxdb3_local.info("_tst_wheel(): requests = %s" % requests.__version__)
        except Exception as e:
            influxdb3_local.error("_tst_wheel(): %s" % e)
            return
    else:
        influxdb3_local.warn("_tst_sys(): 'requests' not found")

def _tst_libssl(influxdb3_local):
    spec = importlib.util.find_spec("ssl")
    if spec is not None:
        try:
            influxdb3_local.info("_tst_libssl(): 'ssl' location = %s" % spec.origin)

            # https://docs.python.org/3/library/ssl.html#socket-creation
            import socket
            import ssl
            hn = 'www.python.org'
            ctx = ssl.create_default_context()
            with socket.create_connection((hn, 443)) as sock:
                with ctx.wrap_socket(sock, server_hostname=hn) as ssock:
                    influxdb3_local.info("_tst_libssl: connecting to: %s" % hn)
                    influxdb3_local.info("_tst_libssl: sock version: %s" % ssock.version())
        except Exception as e:
            influxdb3_local.error("_tst_libssl(): %s" % e)
            return
    else:
        influxdb3_local.error("_tst_libssl(): 'ssl' not found")

def _tst_datetime(influxdb3_local):
    spec = importlib.util.find_spec("datetime")
    if spec is not None:
        try:
            influxdb3_local.info("_tst_datetime(): 'datetime' location = %s" % spec.origin)

            import datetime
            influxdb3_local.info("_tst_datetime(): datetime.datetime.now() = %s" % datetime.datetime.now())
            influxdb3_local.info("_tst_datetime(): datetime.datetime.now().strftime() = %s" % datetime.datetime.now().strftime('%Y%m%d%H%M%S'))
        except Exception as e:
            influxdb3_local.error("_tst_datetime(): %s" % e)
            return
    else:
        influxdb3_local.error("_tst_datetime(): 'ssl' not found")


def process_scheduled_call(influxdb3_local, call_time, args=None):
    # can we log at all
    _tst_log(influxdb3_local)

    # show paths
    _tst_sys(influxdb3_local)

    # test wheel (compiled code)
    _tst_wheel(influxdb3_local)

    # test libssl (compiled code)
    _tst_libssl(influxdb3_local)

    # test datetime (https://github.com/influxdata/influxdb/issues/26050)
    _tst_datetime(influxdb3_local)

# /home/ubuntu/glibc/plugins/test-wal.py
def _tst_query_basic(influxdb3_local):
    influxdb3_local.info("_tst_query_basic(): query = 'SELECT * FROM telegraf LIMIT 1'")

    try:
        res = influxdb3_local.query("SELECT * FROM telegraf LIMIT 1")
    except Exception as e:
        influxdb3_local.error("_tst_query_basic(): %s" % e)
        return

    influxdb3_local.info("_tst_query_basic(): result = %s" % str(res))

def _tst_query_args(influxdb3_local, args):
    if args is None:
        influxdb3_local.warn("_tst_query_args(): Could not find 'args'")
        return
    elif "host" not in args:
        influxdb3_local.warn("_tst_query_args(): Could not find 'host' in 'args': %s" % args)
        return

    influxdb3_local.info("_tst_query_args(): args = '%s'" % args)
    influxdb3_local.info("_tst_query_args(): parameterized query = 'SELECT * FROM telegraf WHERE host = $host LIMIT 1'")

    query_params = {"host": args["host"]}
    try:
        # https://influxdata.slack.com/archives/C084G9LR2HL/p1739550127057669
        # discusses how quoting has changed (previously needed '$host')
        query_result = influxdb3_local.query("SELECT * FROM telegraf WHERE host = $host LIMIT 1", query_params)
    except Exception as e:
        influxdb3_local.error("_tst_query_args(): %s" % e)
        return

    influxdb3_local.info("_tst_query_args(): parameterized query result = %s" % str(query_result))

def _tst_table_batches(influxdb3_local, table_batches):
    if table_batches is None:
        influxdb3_local.error("_tst_table_batches(): table_batches is None")
        return

    for table_batch in table_batches:
        if "table_name" not in table_batch:
            influxdb3_local.error("_tst_table_batches(): 'table_name' missing from batch: %s" % str(table_batch))
        else:
            influxdb3_local.info("_tst_table_batches(): table = %s" % table_batch["table_name"])

            if "rows" not in table_batch:
                influxdb3_local.error("_tst_table_batches(): 'rows' missing from batch: %s" % str(table_batch))
            else:
                for row in table_batch["rows"]:
                    influxdb3_local.info("_tst_table_batches(): row = %s" % str(row))

def _tst_write_table(influxdb3_local):
    try:
        line = LineBuilder("test_table").tag("tag1", "tag1_value").tag("tag2", "tag2_value").int64_field("field1", 1).float64_field("field2", 2.0).string_field("field3", "number three")  # type: ignore[name-defined]

        influxdb3_local.info("_tst_write_table(): line = %s" % line.build())

        influxdb3_local.write(line)
    except Exception as e:
        influxdb3_local.error("_tst_write_table(): %s" % e)
        return

def _tst_write_db(influxdb3_local):
    import time
    now = time.time_ns()
    try:
        other_line = LineBuilder("other_table")  # type: ignore[name-defined]
        other_line.int64_field("other_field", 1)
        other_line.float64_field("other_field2", 3.14)
        other_line.time_ns(now)

        influxdb3_local.info("_tst_write_db(): line = %s" % other_line.build())
        influxdb3_local.write_to_db("mydb02", other_line)
    except Exception as e:
        influxdb3_local.error("_tst_write_db(): %s" % e)
        return

def process_writes(influxdb3_local, table_batches, args=None):
    # can query at all
    _tst_query_basic(influxdb3_local)

    # can query with args
    _tst_query_args(influxdb3_local, args)

    # can parse table_batches
    _tst_table_batches(influxdb3_local, table_batches)

    # can write a line protocol to a table
    _tst_write_table(influxdb3_local)

    # can write a line protocol to another database
    _tst_write_db(influxdb3_local)



#
# Does it find all the libraries?
#
$ for c in $(incus list --format csv | grep RUNNING | cut -d , -f 1) ; do echo "# $c" ; incus exec --user 1001 --group 1001 $c -- ldd /home/jamie/tmp/influxdb3-pe/install/influxdb3 ; echo ; done
# amzn-2
	linux-vdso.so.1 (0x0000ffffb9c98000)
	libpython3.11.so.1.0 => /home/jamie/tmp/influxdb3-pe/install/python/lib/libpython3.11.so.1.0 (0x0000ffff936d1000)
	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000ffff936a0000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x0000ffff9366b000)
	libm.so.6 => /lib64/libm.so.6 (0x0000ffff935aa000)
	libdl.so.2 => /lib64/libdl.so.2 (0x0000ffff93589000)
	libc.so.6 => /lib64/libc.so.6 (0x0000ffff93403000)
	librt.so.1 => /lib64/librt.so.1 (0x0000ffff933e2000)
	libutil.so.1 => /lib64/libutil.so.1 (0x0000ffff933c1000)
	/lib/ld-linux-aarch64.so.1 (0x0000ffffb9c5a000)

# rocky-8
	linux-vdso.so.1 (0x0000ffffbd292000)
	libpython3.11.so.1.0 => /home/jamie/tmp/influxdb3-pe/install/python/lib/libpython3.11.so.1.0 (0x0000ffff96ccb000)
	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000ffff96c9a000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x0000ffff96c65000)
	libm.so.6 => /lib64/libm.so.6 (0x0000ffff96ba4000)
	libdl.so.2 => /lib64/libdl.so.2 (0x0000ffff96b83000)
	libc.so.6 => /lib64/libc.so.6 (0x0000ffff96a0d000)
	librt.so.1 => /lib64/librt.so.1 (0x0000ffff969ec000)
	libutil.so.1 => /lib64/libutil.so.1 (0x0000ffff969cb000)
	/lib/ld-linux-aarch64.so.1 (0x0000ffffbd254000)

# ubuntu-16
	linux-vdso.so.1 =>  (0x0000ffff82526000)
	libpython3.11.so.1.0 => /home/jamie/tmp/influxdb3-pe/install/python/lib/libpython3.11.so.1.0 (0x0000ffff5bf72000)
	libgcc_s.so.1 => /lib/aarch64-linux-gnu/libgcc_s.so.1 (0x0000ffff5bf51000)
	libpthread.so.0 => /lib/aarch64-linux-gnu/libpthread.so.0 (0x0000ffff5bf25000)
	libm.so.6 => /lib/aarch64-linux-gnu/libm.so.6 (0x0000ffff5be78000)
	libdl.so.2 => /lib/aarch64-linux-gnu/libdl.so.2 (0x0000ffff5be65000)
	libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000ffff5bd1f000)
	librt.so.1 => /lib/aarch64-linux-gnu/librt.so.1 (0x0000ffff5bd08000)
	libutil.so.1 => /lib/aarch64-linux-gnu/libutil.so.1 (0x0000ffff5bcf5000)
	/lib/ld-linux-aarch64.so.1 (0x0000ffff824fb000)


# 
# does libpython find all the libraries?
# 
$ for c in $(incus list --format csv | grep RUNNING | cut -d , -f 1) ; do echo "# $c" ; incus exec --user 1001 --group 1001 $c -- ldd /home/jamie/tmp/influxdb3-pe/install/python/lib/libpython3.11.so ; echo ; done
$ for c in $(incus list --format csv | grep RUNNING | cut -d , -f 1) ; do echo "# $c" ; incus exec --user 1001 --group 1001 $c -- ldd /home/jamie/tmp/influxdb3-pe/install/python/lib/libpython3.11.so ; echo ; done
# amzn-2
	linux-vdso.so.1 (0x0000ffff9b68c000)
	libdl.so.2 => /lib64/libdl.so.2 (0x0000ffff9a114000)
	libm.so.6 => /lib64/libm.so.6 (0x0000ffff9a053000)
	librt.so.1 => /lib64/librt.so.1 (0x0000ffff9a032000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x0000ffff99ffd000)
	libutil.so.1 => /lib64/libutil.so.1 (0x0000ffff99fdc000)
	libc.so.6 => /lib64/libc.so.6 (0x0000ffff99e56000)
	/lib/ld-linux-aarch64.so.1 (0x0000ffff9b64e000)

# rocky-8
	linux-vdso.so.1 (0x0000ffff9255d000)
	libdl.so.2 => /lib64/libdl.so.2 (0x0000ffff90fe5000)
	libm.so.6 => /lib64/libm.so.6 (0x0000ffff90f24000)
	librt.so.1 => /lib64/librt.so.1 (0x0000ffff90f03000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x0000ffff90ece000)
	libutil.so.1 => /lib64/libutil.so.1 (0x0000ffff90ead000)
	libc.so.6 => /lib64/libc.so.6 (0x0000ffff90d37000)
	/lib/ld-linux-aarch64.so.1 (0x0000ffff9251f000)

# ubuntu-16
	linux-vdso.so.1 =>  (0x0000ffffb71e0000)
	libdl.so.2 => /lib/aarch64-linux-gnu/libdl.so.2 (0x0000ffffb5c89000)
	libm.so.6 => /lib/aarch64-linux-gnu/libm.so.6 (0x0000ffffb5bdc000)
	librt.so.1 => /lib/aarch64-linux-gnu/librt.so.1 (0x0000ffffb5bc5000)
	libpthread.so.0 => /lib/aarch64-linux-gnu/libpthread.so.0 (0x0000ffffb5b99000)
	libutil.so.1 => /lib/aarch64-linux-gnu/libutil.so.1 (0x0000ffffb5b86000)
	libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000ffffb5a40000)
	/lib/ld-linux-aarch64.so.1 (0x0000ffffb71b5000)


#
# Does it not crash on startup?
#
$ for c in $(incus list --format csv | grep RUNNING | cut -d , -f 1) ; do echo "# $c" ; incus exec --user 1001 --group 1001 $c -- /home/jamie/tmp/influxdb3-pe/install/influxdb3 -V ; echo ; done
# amzn-2
influxdb3 0.1.0, revision v2.5.0-14372-g48b5e1a558178a8bd1cd92e6dd64743d0c11f661-dirty

# rocky-8
influxdb3 0.1.0, revision v2.5.0-14372-g48b5e1a558178a8bd1cd92e6dd64743d0c11f661-dirty

# ubuntu-16
influxdb3 0.1.0, revision v2.5.0-14372-g48b5e1a558178a8bd1cd92e6dd64743d0c11f661-dirty


#
# in separate terminals, start the server, like so
#

# RHEL-based systems
$ export SSL_CERT_FILE=/etc/pki/tls/certs/ca-bundle.crt ; ~/tmp/influxdb3-pe/install/influxdb3 serve --node-id=local01 --object-store=file --data-dir ~/tmp/influxdb3-pe/data --plugin-dir ~/tmp/influxdb3-pe/data/plugins
...
2025-03-12T12:47:03.237857Z  INFO influxdb3_server: startup time: 1981ms address=0.0.0.0:8181

# Debian-based systems
$ ~/tmp/influxdb3-pe/install/influxdb3 serve --node-id=local01 --object-store=file --data-dir ~/tmp/influxdb3-pe/data --plugin-dir ~/tmp/influxdb3-pe/data/plugins
...
2025-03-12T12:47:30.107128Z  INFO influxdb3_server: startup time: 2005ms address=0.0.0.0:8181


#
# now use clients to interact with the server
#

#
# Create databases
#
$ for c in $(incus list --format csv | grep RUNNING | cut -d , -f 1) ; do echo "# $c" ; incus exec --user 1001 --group 1001 $c -- /home/jamie/tmp/influxdb3-pe/install/influxdb3 create database mydb01  ; echo ; done
# amzn-2
Database "mydb01" created successfully

# rocky-8
Database "mydb01" created successfully

# ubuntu-16
Database "mydb01" created successfully

$ for c in $(incus list --format csv | grep RUNNING | cut -d , -f 1) ; do echo "# $c" ; incus exec --user 1001 --group 1001 $c -- /home/jamie/tmp/influxdb3-pe/install/influxdb3 create database mydb02 ; echo ; done
# amzn-2
Database "mydb02" created successfully

# rocky-8
Database "mydb02" created successfully

# ubuntu-16
Database "mydb02" created successfully


#
# write a point
#
$ for c in $(incus list --format csv | grep RUNNING | cut -d , -f 1) ; do echo "# $c" ; incus exec --user 1001 --group 1001 $c -- /home/jamie/tmp/influxdb3-pe/install/influxdb3 write -d mydb01 "telegraf,cpu=cpu-total,host=foo usage_guest=0.0,usage_guest_nice=0.0,usage_idle=98.8476953907837,usage_iowait=0.10020040080161435,usage_irq=0.0,usage_nice=0.0,usage_softirq=0.0,usage_steal=0.05010020040080273,usage_system=0.6513026052104621,usage_user=0.3507014028056636" ; echo ; done
# amzn-2
success

# rocky-8
success

# ubuntu-16
success


#
# query
#
$ for c in $(incus list --format csv | grep RUNNING | cut -d , -f 1) ; do echo "# $c" ; incus exec --user 1001 --group 1001 $c -- /home/jamie/tmp/influxdb3-pe/install/influxdb3  q -d mydb01 "SELECT * FROM telegraf WHERE host = 'foo'"  ; echo ; done
# amzn-2
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu       | host | time                          | usage_guest | usage_guest_nice | usage_idle       | usage_iowait        | usage_irq | usage_nice | usage_softirq | usage_steal         | usage_system       | usage_user         |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu-total | foo  | 2025-03-12T12:48:44.955113760 | 0.0         | 0.0              | 98.8476953907837 | 0.10020040080161435 | 0.0       | 0.0        | 0.0           | 0.05010020040080273 | 0.6513026052104621 | 0.3507014028056636 |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+

# rocky-8
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu       | host | time                          | usage_guest | usage_guest_nice | usage_idle       | usage_iowait        | usage_irq | usage_nice | usage_softirq | usage_steal         | usage_system       | usage_user         |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu-total | foo  | 2025-03-12T12:48:45.380920368 | 0.0         | 0.0              | 98.8476953907837 | 0.10020040080161435 | 0.0       | 0.0        | 0.0           | 0.05010020040080273 | 0.6513026052104621 | 0.3507014028056636 |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+

# ubuntu-16
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu       | host | time                          | usage_guest | usage_guest_nice | usage_idle       | usage_iowait        | usage_irq | usage_nice | usage_softirq | usage_steal         | usage_system       | usage_user         |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+
| cpu-total | foo  | 2025-03-12T12:48:45.502523459 | 0.0         | 0.0              | 98.8476953907837 | 0.10020040080161435 | 0.0       | 0.0        | 0.0           | 0.05010020040080273 | 0.6513026052104621 | 0.3507014028056636 |
+-----------+------+-------------------------------+-------------+------------------+------------------+---------------------+-----------+------------+---------------+---------------------+--------------------+--------------------+


#
# install package from pip
#
$ for c in $(incus list --format csv | grep RUNNING | cut -d , -f 1) ; do echo "# $c" ; incus exec --user 1001 --group 1001 $c -- /home/jamie/tmp/influxdb3-pe/install/influxdb3 install package requests ; echo ; done
# amzn-2

# rocky-8

# ubuntu-16


#
# test schedule
#
$ for c in $(incus list --format csv | grep RUNNING | cut -d , -f 1) ; do echo "# $c" ; incus exec --user 1001 --group 1001 $c -- /home/jamie/tmp/influxdb3-pe/install/influxdb3 test schedule_plugin -d mydb01 test-schedule.py ; echo ; done
# amzn-2
{
  "trigger_time": "2025-03-12T12:49:56Z",
  "log_lines": [
    "INFO: _tst_log(): success",
    "INFO: _tst_sys(): sys.prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.exec_prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.base_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.base_exec_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.path = ['/home/jamie/tmp/influxdb3-pe/install/python/lib/python311.zip', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/lib-dynload', '/home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages']",
    "INFO: _tst_sys(): 'requests' location = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages/requests/__init__.py",
    "INFO: _tst_wheel(): requests = 2.32.3",
    "INFO: _tst_libssl(): 'ssl' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/ssl.py",
    "INFO: _tst_libssl: connecting to: www.python.org",
    "INFO: _tst_libssl: sock version: TLSv1.3",
    "INFO: _tst_datetime(): 'datetime' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/datetime.py",
    "INFO: _tst_datetime(): datetime.datetime.now() = 2025-03-12 12:49:55.761874",
    "INFO: _tst_datetime(): datetime.datetime.now().strftime() = 20250312124955"
  ],
  "database_writes": {},
  "errors": []
}

# rocky-8
{
  "trigger_time": "2025-03-12T12:49:56Z",
  "log_lines": [
    "INFO: _tst_log(): success",
    "INFO: _tst_sys(): sys.prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.exec_prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.base_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.base_exec_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.path = ['/home/jamie/tmp/influxdb3-pe/install/python/lib/python311.zip', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/lib-dynload', '/home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages']",
    "INFO: _tst_sys(): 'requests' location = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages/requests/__init__.py",
    "INFO: _tst_wheel(): requests = 2.32.3",
    "INFO: _tst_libssl(): 'ssl' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/ssl.py",
    "INFO: _tst_libssl: connecting to: www.python.org",
    "INFO: _tst_libssl: sock version: TLSv1.3",
    "INFO: _tst_datetime(): 'datetime' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/datetime.py",
    "INFO: _tst_datetime(): datetime.datetime.now() = 2025-03-12 12:49:55.928030",
    "INFO: _tst_datetime(): datetime.datetime.now().strftime() = 20250312124955"
  ],
  "database_writes": {},
  "errors": []
}

# ubuntu-16
{
  "trigger_time": "2025-03-12T12:49:56Z",
  "log_lines": [
    "INFO: _tst_log(): success",
    "INFO: _tst_sys(): sys.prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.exec_prefix = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv",
    "INFO: _tst_sys(): sys.base_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.base_exec_prefix = /home/jamie/tmp/influxdb3-pe/install/python",
    "INFO: _tst_sys(): sys.path = ['/home/jamie/tmp/influxdb3-pe/install/python/lib/python311.zip', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11', '/home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/lib-dynload', '/home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages']",
    "INFO: _tst_sys(): 'requests' location = /home/jamie/tmp/influxdb3-pe/data/plugins/.venv/lib/python3.11/site-packages/requests/__init__.py",
    "INFO: _tst_wheel(): requests = 2.32.3",
    "INFO: _tst_libssl(): 'ssl' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/ssl.py",
    "INFO: _tst_libssl: connecting to: www.python.org",
    "INFO: _tst_libssl: sock version: TLSv1.3",
    "INFO: _tst_datetime(): 'datetime' location = /home/jamie/tmp/influxdb3-pe/install/python/lib/python3.11/datetime.py",
    "INFO: _tst_datetime(): datetime.datetime.now() = 2025-03-12 12:49:56.048576",
    "INFO: _tst_datetime(): datetime.datetime.now().strftime() = 20250312124956"
  ],
  "database_writes": {},
  "errors": []
}


#
# test wal
#
$ for c in $(incus list --format csv | grep RUNNING | cut -d , -f 1) ; do echo "# $c" ; incus exec --user 1001 --group 1001 $c -- /home/jamie/tmp/influxdb3-pe/install/influxdb3 test wal_plugin -d mydb01 --lp="telegraf,cpu=cpu-total,host=foo usage_guest=0.0,usage_guest_nice=0.0,usage_idle=90.0,usage_iowait=0.3,usage_irq=0.0,usage_nice=0.0,usage_softirq=0.0,usage_steal=0.07,usage_system=0.7,usage_user=0.4" --input-arguments="host=foo" test-wal.py ; echo ; done
# amzn-2
{
  "log_lines": [
    "INFO: _tst_query_basic(): query = 'SELECT * FROM telegraf LIMIT 1'",
    "INFO: _tst_query_basic(): result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741783724955113760, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_query_args(): args = '{'host': 'foo'}'",
    "INFO: _tst_query_args(): parameterized query = 'SELECT * FROM telegraf WHERE host = $host LIMIT 1'",
    "INFO: _tst_query_args(): parameterized query result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741783724955113760, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_table_batches(): table = telegraf",
    "INFO: _tst_table_batches(): row = {'cpu': 'cpu-total', 'host': 'foo', 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 90.0, 'usage_iowait': 0.3, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.07, 'usage_system': 0.7, 'usage_user': 0.4, 'time': 1741783838830997529}",
    "INFO: _tst_write_table(): line = test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\"",
    "INFO: _tst_write_db(): line = other_table other_field=1i,other_field2=3.14 1741783838847976248"
  ],
  "database_writes": {
    "mydb02": [
      "other_table other_field=1i,other_field2=3.14 1741783838847976248"
    ],
    "mydb01": [
      "test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\""
    ]
  },
  "errors": []
}

# rocky-8
{
  "log_lines": [
    "INFO: _tst_query_basic(): query = 'SELECT * FROM telegraf LIMIT 1'",
    "INFO: _tst_query_basic(): result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741783725380920368, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_query_args(): args = '{'host': 'foo'}'",
    "INFO: _tst_query_args(): parameterized query = 'SELECT * FROM telegraf WHERE host = $host LIMIT 1'",
    "INFO: _tst_query_args(): parameterized query result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741783725380920368, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_table_batches(): table = telegraf",
    "INFO: _tst_table_batches(): row = {'cpu': 'cpu-total', 'host': 'foo', 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 90.0, 'usage_iowait': 0.3, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.07, 'usage_system': 0.7, 'usage_user': 0.4, 'time': 1741783838871202723}",
    "INFO: _tst_write_table(): line = test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\"",
    "INFO: _tst_write_db(): line = other_table other_field=1i,other_field2=3.14 1741783838886673061"
  ],
  "database_writes": {
    "mydb01": [
      "test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\""
    ],
    "mydb02": [
      "other_table other_field=1i,other_field2=3.14 1741783838886673061"
    ]
  },
  "errors": []
}

# ubuntu-16
{
  "log_lines": [
    "INFO: _tst_query_basic(): query = 'SELECT * FROM telegraf LIMIT 1'",
    "INFO: _tst_query_basic(): result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741783725502523459, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_query_args(): args = '{'host': 'foo'}'",
    "INFO: _tst_query_args(): parameterized query = 'SELECT * FROM telegraf WHERE host = $host LIMIT 1'",
    "INFO: _tst_query_args(): parameterized query result = [{'cpu': 'cpu-total', 'host': 'foo', 'time': 1741783725502523459, 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 98.8476953907837, 'usage_iowait': 0.10020040080161435, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.05010020040080273, 'usage_system': 0.6513026052104621, 'usage_user': 0.3507014028056636}]",
    "INFO: _tst_table_batches(): table = telegraf",
    "INFO: _tst_table_batches(): row = {'cpu': 'cpu-total', 'host': 'foo', 'usage_guest': 0.0, 'usage_guest_nice': 0.0, 'usage_idle': 90.0, 'usage_iowait': 0.3, 'usage_irq': 0.0, 'usage_nice': 0.0, 'usage_softirq': 0.0, 'usage_steal': 0.07, 'usage_system': 0.7, 'usage_user': 0.4, 'time': 1741783838907236568}",
    "INFO: _tst_write_table(): line = test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\"",
    "INFO: _tst_write_db(): line = other_table other_field=1i,other_field2=3.14 1741783838922307717"
  ],
  "database_writes": {
    "mydb02": [
      "other_table other_field=1i,other_field2=3.14 1741783838922307717"
    ],
    "mydb01": [
      "test_table,tag1=tag1_value,tag2=tag2_value field1=1i,field2=2.0,field3=\"number three\""
    ]
  },
  "errors": []
}

Copy link
Contributor

@hiltontj hiltontj left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM - thanks for providing the detailed test output.

@jdstrand jdstrand merged commit 0983ecb into main Mar 12, 2025
13 checks passed
@jdstrand jdstrand deleted the jdstrand/use-glibc-portable-compiler branch March 13, 2025 21:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Update ci-support to link against more compatible GLIBC

2 participants