Snapchat / KeyDB

A Multithreaded Fork of Redis
https://keydb.dev
BSD 3-Clause "New" or "Revised" License
11.02k stars 564 forks source link

Installing keydb into an Ubuntu Docker image fails because the postinstall script assumes systemd #834

Open williamstein opened 1 month ago

williamstein commented 1 month ago

Describe the bug

Installing keydb into an Ubuntu-based Docker image fails because the postinstall script assumes systemd

To reproduce

docker run -it ubuntu bash

Then follow the directions on https://docs.keydb.dev/docs/ppa-deb/, which in a minimal Ubuntu Docker image would be

RUN \
     apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y lsb-release \
  && echo "deb https://download.keydb.dev/open-source-dist `lsb_release -sc` main" > /etc/apt/sources.list.d/keydb.list \
  && curl -sSL https://download.keydb.dev/open-source-dist/keyring.gpg > /etc/apt/trusted.gpg.d/keydb.gpg\
  && apt-get update \
  && DEBIAN_FRONTEND=noninteractive apt-get install -y keydb

This fails with:

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  keydb-server keydb-tools libsnappy1v5
The following NEW packages will be installed:
  keydb keydb-server keydb-tools libsnappy1v5
0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Need to get 12.7 MB of archives.
After this operation, 39.5 MB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu jammy/main amd64 libsnappy1v5 amd64 1.1.8-1build3 [17.5 kB]
Get:2 https://download.keydb.dev/open-source-dist jammy/main amd64 keydb-tools amd64 6:6.3.4-1~jammy1 [12.6 MB]
Get:3 https://download.keydb.dev/open-source-dist jammy/main amd64 keydb-server amd64 6:6.3.4-1~jammy1 [61.2 kB]
Get:4 https://download.keydb.dev/open-source-dist jammy/main amd64 keydb all 6:6.3.4-1~jammy1 [20.9 kB]
Fetched 12.7 MB in 0s (31.0 MB/s) 
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package libsnappy1v5:amd64.
(Reading database ... 18749 files and directories currently installed.)
Preparing to unpack .../libsnappy1v5_1.1.8-1build3_amd64.deb ...
Unpacking libsnappy1v5:amd64 (1.1.8-1build3) ...
Selecting previously unselected package keydb-tools.
Preparing to unpack .../keydb-tools_6%3a6.3.4-1~jammy1_amd64.deb ...
Unpacking keydb-tools (6:6.3.4-1~jammy1) ...
Selecting previously unselected package keydb-server.
Preparing to unpack .../keydb-server_6%3a6.3.4-1~jammy1_amd64.deb ...
Unpacking keydb-server (6:6.3.4-1~jammy1) ...
Selecting previously unselected package keydb.
Preparing to unpack .../keydb_6%3a6.3.4-1~jammy1_all.deb ...
Unpacking keydb (6:6.3.4-1~jammy1) ...
Setting up libsnappy1v5:amd64 (1.1.8-1build3) ...
Setting up keydb-tools (6:6.3.4-1~jammy1) ...
Setting up keydb-server (6:6.3.4-1~jammy1) ...
Created symlink /etc/systemd/system/keydb.service → /lib/systemd/system/keydb-server.service.
Created symlink /etc/systemd/system/multi-user.target.wants/keydb-server.service → /lib/systemd/system/keydb-server.service.
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
dpkg: error processing package keydb-server (--configure):
 installed keydb-server package post-installation script subprocess returned error exit status 1
dpkg: dependency problems prevent configuration of keydb:
 keydb depends on keydb-server (<< 6:6.3.4-1~jammy1.1~); however:
  Package keydb-server is not configured yet.
 keydb depends on keydb-server (>= 6:6.3.4-1~jammy1); however:
  Package keydb-server is not configured yet.

dpkg: error processing package keydb (--configure):
 dependency problems - leaving unconfigured
Processing triggers for libc-bin (2.35-0ubuntu3.7) ...
Errors were encountered while processing:
 keydb-server
 keydb
E: Sub-process /usr/bin/dpkg returned an error code (1)
root@c212470bae66:/# 

Expected behavior

It works, but does not attempt to configure any systemd integration when the system isn't using systemd.

Additional information

In my Dockerfile I'm using the following workaround, which involves downloading the keydb-server debian package, then modifying it to blank the postinst script, recreating the package, and installing that. It seems to work well:

RUN \
     apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y lsb-release \
  && echo "deb https://download.keydb.dev/open-source-dist `lsb_release -sc` main" > /etc/apt/sources.list.d/keydb.list \
  && curl -sSL https://download.keydb.dev/open-source-dist/keyring.gpg > /etc/apt/trusted.gpg.d/keydb.gpg \
  && apt-get update \
  && mkdir /tmp/keydb \
  && cd /tmp/keydb \
  && apt-get download keydb-server keydb-tools keydb libsnappy1v5 \
  && dpkg-deb -R keydb-server_*.deb keydb-server \
  && echo "" > keydb-server/DEBIAN/postinst \
  && dpkg-deb -b keydb-server keydb-server_*.deb \
  && DEBIAN_FRONTEND=noninteractive dpkg -i *.deb \
  && rm -rf /tmp/keydb