simplex-chat / simplex-chat/simplexmq

Setting a password on smp-server with an '@' character breaks the Docker entrypoint script

Open Beginner friendly
#1,781 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Haskell
Stars
847
Forks
111
Avg merge
3d 11h
Merged PRs (30d)
9

Description

Issue

I went down a bit of rabbit hole before realizing my Docker setup was not the issue here, but rather it was the PASS environment variable I had set that was causing smp-server to exit with code 1 and go into a container reboot loop.

Steps to reproduce:

  1. Set up the the latest Docker container using simplexchat/smp-server:latest
  2. Configure the PASS environment variable such that it contains an '@' character. PASS=passw@ord works just as well.
  3. Deploy the container and observe a totally silent failure (exit code 1) with no container logs. If the container strategy is set to reboot always, it will go into a reboot loop.

Recommend solutions:

  1. Update documentation to indicate that certain special characters are not allowed.
  2. Escape the input string properly when passing the argument to smp-server init.

I tried naively to apply the second recommendation and fix the command line parameter invocation, but after reading the first sentence of the set built-in documentation, I admit I didn't really pursue it further.

Debugging further

Starting an instance of the image and overriding the entrypoint to a shell gives us the opportunity to add some debug logs to the entrypoint script and invoke it manually for testing:

docker run --interactive --tty --entrypoint /bin/bash simplexchat/smp-server:latest

cd /usr/local/bin
export ADDR=simplex.exampledomain.local
export PASS=passw@rd
./entrypoint

In the entrypoint script, changing this line:

  smp-server init --yes \
                  --store-log \
                  --daily-stats \
                  --source-code \
                  "$@" > /dev/null 2>&1

To this:

  smp-server init --yes \
                  --store-log \
                  --daily-stats \
                  --source-code \
                  "$@"

reveals the underlying error. Now the entrypoint script fails with the following invocation error and usage example:

option --password: endOfInput

Usage: smp-server init [--disable-store-log | (-l|--store-log)]
                       [-d|--database DB_CONN] [--schema DB_SCHEMA]
                       [--pool-size POOL_SIZE] [-s|--daily-stats]
                       [-a|--sign-algorithm ALG] [--ip IP] [-n|--fqdn FQDN]
                       [--no-password | --password PASSWORD]
                       [--control-port | --control-port PORT]
                       [--socks-proxy | --socks-proxy PROXY]
                       [--own-domains DOMAINS]
                       [--source-code | --source-code URI]
                       [--operator OPERATOR_NAME]
                       [--operator-country OPERATOR_COUNTRY]
                       [--hosting HOSTING_NAME]
                       [--hosting-country HOSTING_COUNTRY]
                       [--hosting-type HOSTING_TYPE]
                       [--server-country SERVER_COUNTRY]
                       [--operator-website WEBSITE] [--web-path PATH]
                       [--disable-web] [-y|--yes]
  Initialize server - creates /etc/opt/simplex and /var/opt/simplex directories
  and configuration files

Thank you,

-DM

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with scripts/docker/entrypoint-smp-server around line 62 and reproduce the failure using the documented docker run command with PASS=passw@rd. Inspect the invocation and its error output, then verify that initializing the container with an @ character no longer exits silently or enters a reboot loop.

Written by the indexing model from the issue text.

Assessment

Tech stack
docker, shell
Domain
cli, devops
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
68/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.