Problem trying to install Brewblox on Spark 2

Hi, I’m trying to install Brewblox on my spark 2 and I am following the ‘Getting Started’ guide.
But when I get to Step 4: Spark setup I run into this problem

brewpi@raspberrypi:~ $ cd ~/brewblox
brewpi@raspberrypi:~/brewblox $ brewblox-ctl flash
bash: brewblox-ctl: command not found

Here is the result of Step 3: Install Brewblox

brewpi@raspberrypi:~ $ wget -qO - https://www.brewblox.com/install | bash
INFO       Installing Apt packages... 
Hit:1 https://download.docker.com/linux/raspbian bullseye InRelease
Hit:2 http://archive.raspberrypi.org/debian bullseye InRelease                 
Hit:3 http://raspbian.raspberrypi.org/raspbian bullseye InRelease              
Reading package lists... Done                              
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following package was automatically installed and is no longer required:
  libfuse2
Use 'sudo apt autoremove' to remove it.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
python3-venv is already the newest version (3.9.2-3).
python3-pip is already the newest version (20.3.4-4+rpt1+deb11u1).
The following package was automatically installed and is no longer required:
  libfuse2
Use 'sudo apt autoremove' to remove it.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
INFO       Brewblox dir is "/home/brewpi/brewblox" 
INFO       Brewblox release is "edge" 
INFO       Creating Python virtual env... 
INFO       Downloading brewblox-ctl... 
INFO       Installing Python packages... 
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Requirement already satisfied: pip in ./.venv/lib/python3.9/site-packages (20.3.4)
Requirement already satisfied: setuptools in ./.venv/lib/python3.9/site-packages (44.1.1)
Collecting wheel
  Using cached https://www.piwheels.org/simple/wheel/wheel-0.38.4-py3-none-any.whl (36 kB)
Installing collected packages: wheel
Successfully installed wheel-0.38.4
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Processing ./brewblox-ctl.tar.gz
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
    Preparing wheel metadata ... done
Collecting docker<6.0.0,>=5.0.3
  Using cached https://www.piwheels.org/simple/docker/docker-5.0.3-py2.py3-none-any.whl (146 kB)
Collecting websocket-client<1,>=0.32.0
  Using cached https://www.piwheels.org/simple/websocket-client/websocket_client-0.59.0-py2.py3-none-any.whl (67 kB)
Collecting configobj<6.0.0,>=5.0.6
  Using cached https://www.piwheels.org/simple/configobj/configobj-5.0.8-py2.py3-none-any.whl (35 kB)
Collecting psutil<6.0.0,>=5.8.0
  Using cached https://www.piwheels.org/simple/psutil/psutil-5.9.4-cp39-abi3-linux_armv7l.whl (274 kB)
Collecting python-dotenv[cli]<0.21.0,>=0.20.0
  Using cached https://www.piwheels.org/simple/python-dotenv/python_dotenv-0.20.0-py3-none-any.whl (17 kB)
Collecting pyusb>=1.2
  Using cached https://www.piwheels.org/simple/pyusb/pyusb-1.2.1-py3-none-any.whl (58 kB)
Collecting requests<3.0.0,>=2.26.0
  Using cached https://www.piwheels.org/simple/requests/requests-2.28.2-py3-none-any.whl (62 kB)
Collecting packaging<22.0,>=21.3
  Using cached https://www.piwheels.org/simple/packaging/packaging-21.3-py3-none-any.whl (40 kB)
Collecting click<9.0,>=8.0
  Using cached https://www.piwheels.org/simple/click/click-8.1.3-py3-none-any.whl (96 kB)
Collecting pyserial>=3
  Using cached https://www.piwheels.org/simple/pyserial/pyserial-3.5-py2.py3-none-any.whl (90 kB)
Collecting ruamel.yaml<0.18.0,>=0.17.17
  Using cached https://www.piwheels.org/simple/ruamel-yaml/ruamel.yaml-0.17.21-py3-none-any.whl (105 kB)
Collecting docker-compose<2.0.0,>=1.29.2
  Using cached https://www.piwheels.org/simple/docker-compose/docker_compose-1.29.2-py2.py3-none-any.whl (114 kB)
Collecting zeroconf<0.39,>=0.38
  Using cached https://www.piwheels.org/simple/zeroconf/zeroconf-0.38.7-py3-none-any.whl (98 kB)
Collecting six
  Using cached https://www.piwheels.org/simple/six/six-1.16.0-py2.py3-none-any.whl (11 kB)
Collecting distro<2,>=1.5.0
  Using cached https://www.piwheels.org/simple/distro/distro-1.8.0-py3-none-any.whl (20 kB)
Collecting docker[ssh]>=5
  Using cached https://www.piwheels.org/simple/docker/docker-6.0.1-py3-none-any.whl (147 kB)
Collecting PyYAML<6,>=3.10
  Using cached https://www.piwheels.org/simple/pyyaml/PyYAML-5.4.1-cp39-cp39-linux_armv7l.whl (45 kB)
Collecting jsonschema<4,>=2.5.1
  Using cached https://www.piwheels.org/simple/jsonschema/jsonschema-3.2.0-py2.py3-none-any.whl (56 kB)
Collecting python-dotenv<1,>=0.13.0
  Using cached https://www.piwheels.org/simple/python-dotenv/python_dotenv-0.21.1-py3-none-any.whl (19 kB)
Collecting dockerpty<1,>=0.4.1
  Using cached https://www.piwheels.org/simple/dockerpty/dockerpty-0.4.1-py3-none-any.whl (16 kB)
Collecting texttable<2,>=0.9.0
  Using cached https://www.piwheels.org/simple/texttable/texttable-1.6.7-py2.py3-none-any.whl (10 kB)
Collecting docopt<1,>=0.6.1
  Using cached https://www.piwheels.org/simple/docopt/docopt-0.6.2-py2.py3-none-any.whl (13 kB)
Collecting docker[ssh]>=5
  Using cached https://www.piwheels.org/simple/docker/docker-6.0.0-py3-none-any.whl (147 kB)
Collecting paramiko>=2.4.2
  Using cached https://www.piwheels.org/simple/paramiko/paramiko-3.0.0-py3-none-any.whl (210 kB)
Collecting pyrsistent>=0.14.0
  Using cached https://www.piwheels.org/simple/pyrsistent/pyrsistent-0.19.3-cp39-cp39-linux_armv7l.whl (102 kB)
Requirement already satisfied: setuptools in ./.venv/lib/python3.9/site-packages (from jsonschema<4,>=2.5.1->docker-compose<2.0.0,>=1.29.2->brewblox-ctl==1.0.0) (44.1.1)
Collecting attrs>=17.4.0
  Using cached https://www.piwheels.org/simple/attrs/attrs-22.2.0-py3-none-any.whl (60 kB)
Collecting pyparsing!=3.0.5,>=2.0.2
  Using cached https://www.piwheels.org/simple/pyparsing/pyparsing-3.0.9-py3-none-any.whl (98 kB)
Collecting cryptography>=3.3
  Using cached https://www.piwheels.org/simple/cryptography/cryptography-38.0.1-cp39-cp39-linux_armv7l.whl (2.5 MB)
Collecting bcrypt>=3.2
  Using cached https://www.piwheels.org/simple/bcrypt/bcrypt-3.2.2-cp39-cp39-linux_armv7l.whl (51 kB)
Collecting pynacl>=1.5
  Using cached https://www.piwheels.org/simple/pynacl/PyNaCl-1.5.0-cp39-cp39-linux_armv7l.whl (585 kB)
Collecting cffi>=1.1
  Using cached https://www.piwheels.org/simple/cffi/cffi-1.15.1-cp39-cp39-linux_armv7l.whl (364 kB)
Collecting pycparser
  Using cached https://www.piwheels.org/simple/pycparser/pycparser-2.21-py2.py3-none-any.whl (119 kB)
Collecting charset-normalizer<4,>=2
  Using cached https://www.piwheels.org/simple/charset-normalizer/charset_normalizer-3.0.1-py3-none-any.whl (45 kB)
Collecting idna<4,>=2.5
  Using cached https://www.piwheels.org/simple/idna/idna-3.4-py3-none-any.whl (61 kB)
Collecting certifi>=2017.4.17
  Using cached https://www.piwheels.org/simple/certifi/certifi-2022.12.7-py3-none-any.whl (155 kB)
Collecting urllib3<1.27,>=1.21.1
  Using cached https://www.piwheels.org/simple/urllib3/urllib3-1.26.14-py2.py3-none-any.whl (140 kB)
Collecting ruamel.yaml.clib>=0.2.6
  Using cached https://www.piwheels.org/simple/ruamel-yaml-clib/ruamel.yaml.clib-0.2.7-cp39-cp39-linux_armv7l.whl (590 kB)
Collecting ifaddr>=0.1.7
  Using cached https://www.piwheels.org/simple/ifaddr/ifaddr-0.2.0-py3-none-any.whl (12 kB)
Building wheels for collected packages: brewblox-ctl
  Building wheel for brewblox-ctl (PEP 517) ... done
  Created wheel for brewblox-ctl: filename=brewblox_ctl-1.0.0-py3-none-any.whl size=62568 sha256=71ac918fb4fecc5a63377d296dd0014d150316f8393594ec0d48b825ad65c553
  Stored in directory: /home/brewpi/.cache/pip/wheels/a3/f6/8a/6d23f2d73ce1c85b2427221afc8211483b64a82007ae4eba65
Successfully built brewblox-ctl
Installing collected packages: pycparser, urllib3, six, idna, charset-normalizer, cffi, certifi, websocket-client, requests, pynacl, cryptography, bcrypt, pyrsistent, paramiko, docker, attrs, texttable, ruamel.yaml.clib, PyYAML, python-dotenv, pyparsing, jsonschema, ifaddr, docopt, dockerpty, distro, click, zeroconf, ruamel.yaml, pyusb, pyserial, psutil, packaging, docker-compose, configobj, brewblox-ctl
Successfully installed PyYAML-5.4.1 attrs-22.2.0 bcrypt-3.2.2 brewblox-ctl-1.0.0 certifi-2022.12.7 cffi-1.15.1 charset-normalizer-3.0.1 click-8.1.3 configobj-5.0.8 cryptography-38.0.1 distro-1.8.0 docker-5.0.3 docker-compose-1.29.2 dockerpty-0.4.1 docopt-0.6.2 idna-3.4 ifaddr-0.2.0 jsonschema-3.2.0 packaging-21.3 paramiko-3.0.0 psutil-5.9.4 pycparser-2.21 pynacl-1.5.0 pyparsing-3.0.9 pyrsistent-0.19.3 pyserial-3.5 python-dotenv-0.20.0 pyusb-1.2.1 requests-2.28.2 ruamel.yaml-0.17.21 ruamel.yaml.clib-0.2.7 six-1.16.0 texttable-1.6.7 urllib3-1.26.14 websocket-client-0.59.0 zeroconf-0.38.7
Command is about to: Install Brewblox and its dependencies.
Do you want to continue? (yes, no, verbose, dry-run) [press ENTER for default value 'yes'] 
Do you want to install with default settings? [Press ENTER for default value 'yes']

INFO       Docker is already installed.
INFO       brewpi already belongs to the docker group.
INFO       Installing apt packages...
Hit:1 https://download.docker.com/linux/raspbian bullseye InRelease            
Hit:2 http://raspbian.raspberrypi.org/raspbian bullseye InRelease              
Hit:3 http://archive.raspberrypi.org/debian bullseye InRelease
Reading package lists... Done
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following package was automatically installed and is no longer required:
  libfuse2
Use 'sudo apt autoremove' to remove it.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
avahi-daemon is already the newest version (0.8-5+deb11u1).
curl is already the newest version (7.74.0-1.3+deb11u5).
libffi-dev is already the newest version (3.3-6).
libssl-dev is already the newest version (1.1.1n-0+deb11u3+rpt1).
The following package was automatically installed and is no longer required:
  libfuse2
Use 'sudo apt autoremove' to remove it.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
INFO       Skipped: docker install.
INFO       Skipped: adding brewpi to 'docker' group.
INFO       Fixing Docker IPv6 settings...
INFO       Using Docker config file /etc/docker/daemon.json
touch: cannot touch '/etc/docker/daemon.json': No such file or directory
Command 'sudo touch '/etc/docker/daemon.json'' returned non-zero exit status 1.
brewpi@raspberrypi:~ $

I can see a zipped file named “brewblox-ctl.tar.gz” in the directory /home/brewpi/brewblox

brewpi@raspberrypi:~/brewblox $ $PATH
bash: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games: No such file or directory

Where am I going wrong, what do I need to modify to get this install to work?
Please explain step by step if possible.

Thanks in advance - Kyle

How did you install docker? It appears the “/etc/docker” directory is missing.

Hi Bob, ah yes it will appear that docker is already installed as I ran step 3 again to copy result for post. It was downloaded and installed the first time I went through step 3.
So how exactly do I go about installing the missing docker config file (/etc/docker/daemon.json), is that not supposed to be part of the docker download and install?

It can either be that the directory was not created during the docker installation, or that they decided to move their configuration somewhere else.

To find out, run

ps aux | grep dockerd

Example output:

steersbob@blackbox:~/git/brewblox-firmware$ ps aux | grep dockerd
root        9351  5.5  0.5 1836724 89112 ?       Ssl  11:28   1:40 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
steersb+   31118  0.0  0.0   9212  2372 pts/1    S+   11:58   0:00 grep --color=auto dockerd

If this does NOT mention a --config-file argument, run:

cd
sudo mkdir /etc/docker
rm -rf ~/brewblox
brewblox-ctl install

If it does have a --config-file argument set, please post the output, and we’ll have a look at what’s going on.

For clarification: what you mean is a raspberry pi 2 instead of a spark 2?

Hi Bob, I followed your suggestion. No config file arguement, but still brewblox-ctl: command not found

brewpi@raspberrypi:~ $ ps aux | grep dockerd
root       845  0.8  4.7 938900 44404 ?        Ssl  10:14   0:01 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
brewpi    1782  0.0  0.0   7452   548 pts/0    S+   10:17   0:00 grep --color=auto dockerd
brewpi@raspberrypi:~ $ cd
sudo mkdir /etc/docker
rm -rf ~/brewblox
brewblox-ctl install
bash: brewblox-ctl: command not found
brewpi@raspberrypi:~ $

Ah, I thought it’d have placed the brewblox-ctl shell script already.
Apparently not, so run the web install instead:

wget -qO - https://www.brewblox.com/install | bash

No need to repeat the mkdir command.

Hi Elco, I am using a rpi3 and having issues flashing brewblox to my spark 2 core (step 4 of Blewblox - Getting Started). The rpi3 has a freshly formatted SD card with the latest version of Raspbian.

The BrewPi Spark 2 is connected by micro usb to the rpi3 and the status led on the spark is flashing green.

Hi Bob,

Have run, but still no change:

brewpi@raspberrypi:~ $ wget -qO - https://www.brewblox.com/install | bash
INFO       Installing Apt packages... 
Hit:1 https://download.docker.com/linux/raspbian bullseye InRelease
Hit:2 http://archive.raspberrypi.org/debian bullseye InRelease                                         
Get:3 http://raspbian.raspberrypi.org/raspbian bullseye InRelease [15.0 kB]                            
Fetched 15.0 kB in 2s (8,005 B/s)                          
Reading package lists... Done
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following package was automatically installed and is no longer required:
  libfuse2
Use 'sudo apt autoremove' to remove it.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
python3-venv is already the newest version (3.9.2-3).
python3-pip is already the newest version (20.3.4-4+rpt1+deb11u1).
The following package was automatically installed and is no longer required:
  libfuse2
Use 'sudo apt autoremove' to remove it.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
INFO       Brewblox dir is "/home/brewpi/brewblox" 
INFO       Brewblox release is "edge" 
INFO       Creating Python virtual env... 
INFO       Downloading brewblox-ctl... 
INFO       Installing Python packages... 
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Requirement already satisfied: pip in ./.venv/lib/python3.9/site-packages (20.3.4)
Requirement already satisfied: setuptools in ./.venv/lib/python3.9/site-packages (44.1.1)
Collecting wheel
  Using cached https://www.piwheels.org/simple/wheel/wheel-0.38.4-py3-none-any.whl (36 kB)
Installing collected packages: wheel
Successfully installed wheel-0.38.4
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Processing ./brewblox-ctl.tar.gz
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
    Preparing wheel metadata ... done
Collecting psutil<6.0.0,>=5.8.0
  Using cached https://www.piwheels.org/simple/psutil/psutil-5.9.4-cp39-abi3-linux_armv7l.whl (274 kB)
Collecting pyserial>=3
  Using cached https://www.piwheels.org/simple/pyserial/pyserial-3.5-py2.py3-none-any.whl (90 kB)
Collecting websocket-client<1,>=0.32.0
  Using cached https://www.piwheels.org/simple/websocket-client/websocket_client-0.59.0-py2.py3-none-any.whl (67 kB)
Collecting configobj<6.0.0,>=5.0.6
  Using cached https://www.piwheels.org/simple/configobj/configobj-5.0.8-py2.py3-none-any.whl (35 kB)
Collecting pyusb>=1.2
  Using cached https://www.piwheels.org/simple/pyusb/pyusb-1.2.1-py3-none-any.whl (58 kB)
Collecting packaging<22.0,>=21.3
  Using cached https://www.piwheels.org/simple/packaging/packaging-21.3-py3-none-any.whl (40 kB)
Collecting docker-compose<2.0.0,>=1.29.2
  Using cached https://www.piwheels.org/simple/docker-compose/docker_compose-1.29.2-py2.py3-none-any.whl (114 kB)
Collecting ruamel.yaml<0.18.0,>=0.17.17
  Using cached https://www.piwheels.org/simple/ruamel-yaml/ruamel.yaml-0.17.21-py3-none-any.whl (105 kB)
Collecting docker<6.0.0,>=5.0.3
  Using cached https://www.piwheels.org/simple/docker/docker-5.0.3-py2.py3-none-any.whl (146 kB)
Collecting requests<3.0.0,>=2.26.0
  Using cached https://www.piwheels.org/simple/requests/requests-2.28.2-py3-none-any.whl (62 kB)
Collecting zeroconf<0.39,>=0.38
  Using cached https://www.piwheels.org/simple/zeroconf/zeroconf-0.38.7-py3-none-any.whl (98 kB)
Collecting click<9.0,>=8.0
  Using cached https://www.piwheels.org/simple/click/click-8.1.3-py3-none-any.whl (96 kB)
Collecting python-dotenv[cli]<0.21.0,>=0.20.0
  Using cached https://www.piwheels.org/simple/python-dotenv/python_dotenv-0.20.0-py3-none-any.whl (17 kB)
Collecting six
  Using cached https://www.piwheels.org/simple/six/six-1.16.0-py2.py3-none-any.whl (11 kB)
Collecting distro<2,>=1.5.0
  Using cached https://www.piwheels.org/simple/distro/distro-1.8.0-py3-none-any.whl (20 kB)
Collecting python-dotenv<1,>=0.13.0
  Using cached https://www.piwheels.org/simple/python-dotenv/python_dotenv-0.21.1-py3-none-any.whl (19 kB)
Collecting texttable<2,>=0.9.0
  Using cached https://www.piwheels.org/simple/texttable/texttable-1.6.7-py2.py3-none-any.whl (10 kB)
Collecting PyYAML<6,>=3.10
  Using cached https://www.piwheels.org/simple/pyyaml/PyYAML-5.4.1-cp39-cp39-linux_armv7l.whl (45 kB)
Collecting dockerpty<1,>=0.4.1
  Using cached https://www.piwheels.org/simple/dockerpty/dockerpty-0.4.1-py3-none-any.whl (16 kB)
Collecting docker[ssh]>=5
  Using cached https://www.piwheels.org/simple/docker/docker-6.0.1-py3-none-any.whl (147 kB)
Collecting docopt<1,>=0.6.1
  Using cached https://www.piwheels.org/simple/docopt/docopt-0.6.2-py2.py3-none-any.whl (13 kB)
Collecting jsonschema<4,>=2.5.1
  Using cached https://www.piwheels.org/simple/jsonschema/jsonschema-3.2.0-py2.py3-none-any.whl (56 kB)
Collecting docker[ssh]>=5
  Using cached https://www.piwheels.org/simple/docker/docker-6.0.0-py3-none-any.whl (147 kB)
Collecting paramiko>=2.4.2
  Using cached https://www.piwheels.org/simple/paramiko/paramiko-3.0.0-py3-none-any.whl (210 kB)
Collecting attrs>=17.4.0
  Using cached https://www.piwheels.org/simple/attrs/attrs-22.2.0-py3-none-any.whl (60 kB)
Collecting pyrsistent>=0.14.0
  Using cached https://www.piwheels.org/simple/pyrsistent/pyrsistent-0.19.3-cp39-cp39-linux_armv7l.whl (102 kB)
Requirement already satisfied: setuptools in ./.venv/lib/python3.9/site-packages (from jsonschema<4,>=2.5.1->docker-compose<2.0.0,>=1.29.2->brewblox-ctl==1.0.0) (44.1.1)
Collecting pyparsing!=3.0.5,>=2.0.2
  Using cached https://www.piwheels.org/simple/pyparsing/pyparsing-3.0.9-py3-none-any.whl (98 kB)
Collecting pynacl>=1.5
  Using cached https://www.piwheels.org/simple/pynacl/PyNaCl-1.5.0-cp39-cp39-linux_armv7l.whl (585 kB)
Collecting cryptography>=3.3
  Using cached https://www.piwheels.org/simple/cryptography/cryptography-38.0.1-cp39-cp39-linux_armv7l.whl (2.5 MB)
Collecting bcrypt>=3.2
  Using cached https://www.piwheels.org/simple/bcrypt/bcrypt-3.2.2-cp39-cp39-linux_armv7l.whl (51 kB)
Collecting cffi>=1.1
  Using cached https://www.piwheels.org/simple/cffi/cffi-1.15.1-cp39-cp39-linux_armv7l.whl (364 kB)
Collecting pycparser
  Using cached https://www.piwheels.org/simple/pycparser/pycparser-2.21-py2.py3-none-any.whl (119 kB)
Collecting certifi>=2017.4.17
  Using cached https://www.piwheels.org/simple/certifi/certifi-2022.12.7-py3-none-any.whl (155 kB)
Collecting idna<4,>=2.5
  Using cached https://www.piwheels.org/simple/idna/idna-3.4-py3-none-any.whl (61 kB)
Collecting urllib3<1.27,>=1.21.1
  Using cached https://www.piwheels.org/simple/urllib3/urllib3-1.26.14-py2.py3-none-any.whl (140 kB)
Collecting charset-normalizer<4,>=2
  Using cached https://www.piwheels.org/simple/charset-normalizer/charset_normalizer-3.0.1-py3-none-any.whl (45 kB)
Collecting ruamel.yaml.clib>=0.2.6
  Using cached https://www.piwheels.org/simple/ruamel-yaml-clib/ruamel.yaml.clib-0.2.7-cp39-cp39-linux_armv7l.whl (590 kB)
Collecting ifaddr>=0.1.7
  Using cached https://www.piwheels.org/simple/ifaddr/ifaddr-0.2.0-py3-none-any.whl (12 kB)
Building wheels for collected packages: brewblox-ctl
  Building wheel for brewblox-ctl (PEP 517) ... done
  Created wheel for brewblox-ctl: filename=brewblox_ctl-1.0.0-py3-none-any.whl size=62568 sha256=71ac918fb4fecc5a63377d296dd0014d150316f8393594ec0d48b825ad65c553
  Stored in directory: /home/brewpi/.cache/pip/wheels/a3/f6/8a/6d23f2d73ce1c85b2427221afc8211483b64a82007ae4eba65
Successfully built brewblox-ctl
Installing collected packages: pycparser, urllib3, six, idna, charset-normalizer, cffi, certifi, websocket-client, requests, pynacl, cryptography, bcrypt, pyrsistent, paramiko, docker, attrs, texttable, ruamel.yaml.clib, PyYAML, python-dotenv, pyparsing, jsonschema, ifaddr, docopt, dockerpty, distro, click, zeroconf, ruamel.yaml, pyusb, pyserial, psutil, packaging, docker-compose, configobj, brewblox-ctl
Successfully installed PyYAML-5.4.1 attrs-22.2.0 bcrypt-3.2.2 brewblox-ctl-1.0.0 certifi-2022.12.7 cffi-1.15.1 charset-normalizer-3.0.1 click-8.1.3 configobj-5.0.8 cryptography-38.0.1 distro-1.8.0 docker-5.0.3 docker-compose-1.29.2 dockerpty-0.4.1 docopt-0.6.2 idna-3.4 ifaddr-0.2.0 jsonschema-3.2.0 packaging-21.3 paramiko-3.0.0 psutil-5.9.4 pycparser-2.21 pynacl-1.5.0 pyparsing-3.0.9 pyrsistent-0.19.3 pyserial-3.5 python-dotenv-0.20.0 pyusb-1.2.1 requests-2.28.2 ruamel.yaml-0.17.21 ruamel.yaml.clib-0.2.7 six-1.16.0 texttable-1.6.7 urllib3-1.26.14 websocket-client-0.59.0 zeroconf-0.38.7
Command is about to: Install Brewblox and its dependencies.
Do you want to continue? (yes, no, verbose, dry-run) [press ENTER for default value 'yes'] y
Do you want to install with default settings? [Press ENTER for default value 'yes']
y
INFO       Docker is already installed.
INFO       brewpi already belongs to the docker group.
INFO       Installing apt packages...
Hit:1 https://download.docker.com/linux/raspbian bullseye InRelease
Hit:2 http://archive.raspberrypi.org/debian bullseye InRelease
Hit:3 http://raspbian.raspberrypi.org/raspbian bullseye InRelease
Reading package lists... Done
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following package was automatically installed and is no longer required:
  libfuse2
Use 'sudo apt autoremove' to remove it.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
avahi-daemon is already the newest version (0.8-5+deb11u1).
curl is already the newest version (7.74.0-1.3+deb11u5).
libffi-dev is already the newest version (3.3-6).
libssl-dev is already the newest version (1.1.1n-0+deb11u3+rpt1).
The following package was automatically installed and is no longer required:
  libfuse2
Use 'sudo apt autoremove' to remove it.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
INFO       Skipped: docker install.
INFO       Skipped: adding brewpi to 'docker' group.
INFO       Fixing Docker IPv6 settings...
INFO       Using Docker config file /etc/docker/daemon.json
INFO       Restarting avahi-daemon service...
INFO       Adding udev rules for Particle devices...
INFO       Setting .env values...
INFO       Checking for port conflicts...
INFO       Copying docker-compose.shared.yml...
INFO       Copying docker-compose.yml...
INFO       Stopping services...
Removing network brewblox_default
WARNING: Network brewblox_default not found.
INFO       Creating datastore directory...
INFO       Creating history directory...
INFO       Creating gateway directory...
INFO       Creating SSL certificate...
edge: Pulling from brewblox/omgwtfssl
cb2ec849933d: Pull complete 
eccb104fbc05: Pull complete 
5b273a1c9e27: Pull complete 
f257d18a381d: Pull complete 
2cf2c54b5497: Pull complete 
9c8cb653411b: Pull complete 
Digest: sha256:f90c413e30bfe0c5143049f4ccbe692aa8823338db7a975ec39085986f7328a2
Status: Downloaded newer image for brewblox/omgwtfssl:edge
.......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*...+....+...........+..........+........+.............+..+...............+.+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.+.....+......+..........+..+...+............+...............+.+.....+.+.....+......+....+...+.................+.+..+.......+.....+....+.....+....+...+..+...+...+.......+..+.+.....+............+...+.+...........+.......+......+..+.........+....+..+....+........+...+....+......+.........+.........+.....+...............+............+...+.+.........+..+.........+.............+..+...+...+............+.+......+.....+.+..+......+.+.....+....+.........+............+......+.....+...+.......+...+...........+...+...+....+...............+......+..............+....+......+...+..+.+..+...+..........+.....+.........+.+.....+....+........+......+....+...+..+...+.......+.....+...............+............+.+........+.+.....+......+..........+...+..+.........+...+.+.....+.+......+...+.....+.+.....+....+......+........+.+..+.........+.........+.......+...+..+...+....+...+.........+...+...............+...+..+.+..+....+..............+.+......+...............+..+..........+...+...+..+.........+...............+....+.....+............+...+.+.....+.+..+............+...+...+.......+...+..+......+.+.........+...........+......+.......+...........+....+...+..+.+...............+......+.....+.+..+.+......+...........+....+..............+...................+...........+..........+..+...+.+..............+.......+.........+........+..............................+.......+........+.+......+........+.+.........+..+....+......+......+...+......+...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
..+....+...+.................+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*..+.+.........+...+......+..+...+......+....+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.+.....+.+...+......+...+...+........+.+......+.....+.............+..............+.+..+....+......+...+...........+.........+......+....+..+....+...+..+.+............+...+...............+...+..+....+...+.....+...+...+...............+......+....+..............+.+...........+.+..+...+....+......+............+.....+.+..............+......+....+...+...+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-----
INFO       Creating mosquitto config directory...
INFO       Creating Spark backup directory...
INFO       Pulling docker images...
Pulling traefik  ... done
Pulling history  ... done
Pulling eventbus ... done
Pulling redis    ... done
Pulling victoria ... done
Pulling ui       ... done
INFO       All done!
brewpi@raspberrypi:~ $ cd ~/brewblox
brewpi@raspberrypi:~/brewblox $ brewblox-ctl flash
bash: brewblox-ctl: command not found

If you run the below commands, does it still give you an error about not finding brewblox-ctl?

exec $SHELL --login
brewblox-ctl --help

Edit: you can also manually check whether it exists:

ls ~/.local/bin/brewblox-ctl

Hi Bob,

I realised the last install of brewblox didn’t reboot the rpi to complete the installation. I have since rebooted and run brewblox-ctl flash and it appears to be flashing my spark 2 currently.

After reboot:

brewpi@raspberrypi:~ $ cd ~/brewblox
brewpi@raspberrypi:~/brewblox $ brewblox-ctl flash
INFO       Flashing Spark 2...
edge: Pulling from brewblox/firmware-flasher
4e5300249f84: Pull complete 
e917b5cb3492: Pull complete 
72ef0619f1a4: Pull complete 
759a0d75ae03: Pull complete 
97f5ac17cf9b: Pull complete 
9307f7bb77be: Pull complete 
702cd635d4ea: Pull complete 
0cf822844b74: Pull complete 
4f4fb700ef54: Pull complete 
18ee9e615c37: Pull complete 
aa5968145ef6: Pull complete 
Digest: sha256:a744705e19e4a4b8fecd53a66c992e060cc6111745a01d57f897acdd09feed5f
Status: Downloaded newer image for brewblox/firmware-flasher:edge
Triggering DFU mode...
Triggering dfu on port /dev/serial/by-id/usb-Particle_Photon_21003d001447353236343033-if00
Flashing Photon...
Flashing System 1 file...
:::: NOTICE:
:::: Your first flash may take up to 10m to complete - during
:::: this time, your device may regularly change LED states
:::: as Device OS upgrades are applied.

Flash success!
Flashing System 2 file...

Flash success!
Flashing Firmware file...

Flash success!
Your firmware has been updated.
If a new bootloader is required, your Spark will automatically download it over WiFi.
ONLY If your Spark LED keeps blinking blue, run: 'brewblox-ctl particle -c flash-bootloader'

Thanks for your help!

2 Likes