Update Shellhttpd

The previous section, Dynamic Configuration File, shows how to send configuration files using Fioctl®. You also saw where the file is located on the device: /var/run/secrets/shellhttpd.conf

However, shellhttpd is not yet using this file.

You will learn how to modify docker-compose.yml so that the app uses the host machine’s /var/run/secrets/shellhttpd.conf.

Start by removing shellhttpd.conf from the Dockerfile to simplify your app:

gedit shellhttpd/Dockerfile
FROM alpine

COPY httpd.sh /usr/local/bin/

CMD ["/usr/local/bin/httpd.sh"]

Edit docker-compose.yml and change the volumes stanza to share the /var/run/secrets folder.

gedit shellhttpd/docker-compose.yml
version: '3.2'

services:
  httpd:
    image: hub.foundries.io/<factory>/shellhttpd:latest
#    image: shellhttpd:1.0
    restart: always
    volumes:
      - /var/run/secrets:/home/shellhttpd/
    ports:
      - 8080:${PORT-8080}
    environment:
      MSG: "${MSG-Hello world}"

Check your changes, add, commit, and push:

git status
git add shellhttpd/Dockerfile
git add shellhttpd/docker-compose.yml
git commit -m "Updating shared folder path"
git push

Make sure you received your update by checking the latest Target on the Devices tab in your Factory.

Once you receive the update, the Docker log will show the new message configured with Fioctl in the previous section:

docker logs -f shellhttpd_httpd_1
PORT=8080
MSG=Hello from fioctl

If you test the app with curl, it will also display the new message:

curl <device IP>:8080
Hello from fioctl

Repeat the fioctl config command in the previous section to confirm everything is working. Update the configuration file using Fioctl on your host machine:

fioctl devices config set <device-name> shellhttpd.conf="MSG=\"New config file updated over-the-air\""

Wait, then test your app again:

curl <device IP>:8080
New config file updated over-the-air