Skip to content

tembo-io/tembo-packaging

Repository files navigation

Tembo Cloud Packaging

This project builds dependency packages for Tembo Cloud and maintains a client for installing those packages.

Packaging

To build the packages, on Ubuntu 22.04 "Jammy" or 24.94 "Noble" on amd64 or arm64:

  1. Make sure the package database is up-to-date:

    apt-get update
  2. Use make -j to build all the packages in parallel across all CPUs.

    make -j$(nproc) packages
  3. Use make install to install the packages:

    make -j$(nproc) install

repackage Usage

The repackage script downloads an Apt package and creates a tarball that contains the shared object libraries to be installed on the Tembo Cloud persistent volume. The package must have a config file, packages/$package.cfg. Example:

./bin/repackage libjson-c
Working in /tmp/tmp.HLNvAFmsMY
Get:1 http://ports.ubuntu.com/ubuntu-ports noble/main arm64 libjson-c5 arm64 0.17-1build1 [36.4 kB]
Fetched 36.4 kB in 1s (57.6 kB/s)
'libjson-c5/usr/lib/aarch64-linux-gnu/libjson-c.so.5.3.0' -> 'tembo-libjson-c_arm64/lib/libjson-c.so.5.3.0'
'libjson-c5/usr/lib/aarch64-linux-gnu/libjson-c.so.5' -> 'tembo-libjson-c_arm64/lib/libjson-c.so.5'
'libjson-c5/usr/share/doc/libjson-c5/copyright' -> 'tembo-libjson-c_arm64/doc/copyright'
tembo-libjson-c_arm64/
tembo-libjson-c_arm64/tembox.cfg
tembo-libjson-c_arm64/digests
tembo-libjson-c_arm64/lib/
tembo-libjson-c_arm64/lib/libjson-c.so.5.3.0
tembo-libjson-c_arm64/lib/libjson-c.so.5
tembo-libjson-c_arm64/doc/
tembo-libjson-c_arm64/doc/copyright
copied 'tembo-libjson-c_arm64.tgz' -> '/work/noble/tembo-libjson-c_arm64.tgz'
removed 'tembo-libjson-c_arm64.tgz'

install_package Usage

Once the tarball has been built for a package, use install_package to install it:

./bin/install_package libjson-c
tembo-libjson-c_arm64/
tembo-libjson-c_arm64/tembox.cfg
tembo-libjson-c_arm64/digests
tembo-libjson-c_arm64/lib/
tembo-libjson-c_arm64/lib/libjson-c.so.5.3.0
tembo-libjson-c_arm64/lib/libjson-c.so.5
tembo-libjson-c_arm64/doc/
tembo-libjson-c_arm64/doc/copyright
./tembox.cfg: OK
./lib/libjson-c.so.5.3.0: OK
./doc/copyright: OK
Validating tembox.cfg...OK
removed '/var/lib/postgresql/data/lib/libjson-c.so.5'
'lib/libjson-c.so.5' -> '/var/lib/postgresql/data/lib/libjson-c.so.5'
'lib/libjson-c.so.5.3.0' -> '/var/lib/postgresql/data/lib/libjson-c.so.5.3.0'
'tembox.cfg' -> '/var/lib/postgresql/data/tembox/libjson-c.cfg'

Tembox

The tembox application installs packages built by repackage and uploaded to our repository. It requires Rust on amd64 or arm64 Linux to build:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
make tembox

Then use it on Ubuntu 22.04 "Jammy" or 24.94 "Noble" on amd64 or arm64 to

install one or more packages, using the names of the *.cfg files in packages:

./target/release/tembox libjson-c libhiredis
📦 Installing libjson-c
   Downloading libjson-c
   Validating digests...OK
   Validating tembox.cfg...OK
   Copying shared libraries...
     lib/libjson-c.so.5.3.0 -> /var/lib/postgresql/data/lib/libjson-c.so.5.3.0
     lib/libjson-c.so.5 -> /var/lib/postgresql/data/lib/libjson-c.so.5
     tembox.cfg -> /var/lib/postgresql/data/tembox/libjson-c.cfg
✅ libjson-c installed
📦 Installing libhiredis
   Downloading libhiredis
   Validating digests...OK
   Validating tembox.cfg...OK
   Copying shared libraries...
     lib/libhiredis.so.1 -> /var/lib/postgresql/data/lib/libhiredis.so.1
     lib/libhiredis_ssl.so.1 -> /var/lib/postgresql/data/lib/libhiredis_ssl.so.1
     lib/libhiredis_ssl.so.1.1.0 -> /var/lib/postgresql/data/lib/libhiredis_ssl.so.1.1.0
     lib/libhiredis.so.1.1.0 -> /var/lib/postgresql/data/lib/libhiredis.so.1.1.0
     tembox.cfg -> /var/lib/postgresql/data/tembox/libhiredis.cfg
✅ libhiredis installed

Development

This project uses pre-commit to for various quality checks. To use it locally:

  • Install pre-commit and shfmt
  • Run make lint to lint the project
  • Run make .git/hooks/pre-commit to lint the project for every commit