Hi, I’m new to Home Assistant, so please bear with me. I have HassOS running on my Raspberry Pi, and I am trying to install some integrations that are not available from the web UI, for example the Apple TV, or Bluetooth integrations. They require me to run some initial apt-get commands to install some packages, but the commands don’t work because apt-get is not installed. Is there a way I could get apt-get to work on HassOS, or is there another way I could install the packages?
You cannot install packages for Home Assistant OS and you shouldn’t need to install any packages to use any of the built-in integrations. Have you tried to use the integrations without installing additional packages?
Actually, I haven’t. I’ll try that
Please report back with your results. If the Docs are misleading they should be updated. If your willing to do the updates see the link below with how. If you are not, post the results and myself or someone else can make the updates.
In fact you can install packages in home assistant OS. The package manager uses the command apk add xxxx
First create bash script and make executable and put it in a shell command
shell_command:
setup: /config/scripts/setup.sh
# setup. sh
#!/bin/sh
apk update
apk add -u busybox
apk add busybox-extras
apk add expect
apk add sshpass
Then create an automation that runs your shell command during startup
- id: hass_1
initial_state: 'true'
alias: System Startup Notification
trigger:
platform: homeassistant
event: start
action:
- service: shell_command.setup
That is not the OS, that is inside the homeassistant container
True that’s where home assistant is running as docker on top of home assistant OS.
In this way the packages that are not by default avaliable can be installed and used with home assistant.
Every use case is different… in my case telnet client and expect for scripting is not avaliable by default hence the above proposed solution.
arent you missing the bash instruction here?
like : setup: bash /config/scripts/setup.sh
you could add the bash command indd but I works without here as well
if you make your scripts executable chmod +x setup. sh should work as well
it depends on your system
Yeah, it works, but I also need to load modules with modprobe, that doesn’t work
hmm, tried it today, with automation, but then it fails
created an requirements.sh with this as content and did a chmod +x on it
#!/bin/bash
sudo apk add can-utils
if i run it from putty, then it works, it installs that package
bash /config/python_scripts/requirements.sh
if i run it from the automation
- alias: Dobiss Server
initial_state: 'on'
trigger:
- platform: homeassistant
event: start
action:
- service: shell_command.requirements
shell_command:
requirements: bash /config/python_scripts/requirements.sh
then i receve error below
2021-02-17 09:35:51 ERROR (MainThread) [homeassistant.components.shell_command] Error running command:
bash /config/python_scripts/requirements.sh, return code: 127
if i remove the sudo from the .sh script, i get error 1 instead of error 127
any idea?
it has todo with environment, i know the yaml code is correct, because if i try something simple in the bash script, it creates the abc.txt file, so everything is fired
it has something todo with rights i think of installing an file , with maybe the user that runs teh script not able to install apk files? with or without sudo gives me another error 1 or 127
#!/bin/bash
apk add can-utils
#echo abc > abc.txt
return code: 1
############
#!/bin/bash
sudo apk add can-utils
#echo abc > abc.txt
return code: 127
chmod a+x doesnt help either
Hi, not sure what the problem is, but you can try executing the command with exec myScript.sh
to test. Follow it with echo $?
to get the exit status. Exec will close your terminal session so maybe wrap it $(exec myScript.sh)
The Shebang(#!
) must be on the first line of the file with no whitespace between the start of the file and the Shebang.
Try a space between the Shebang and the /bin/bash
. Most of the time it doesn’t matter because it’s launched from a shell and processed by that shell also exec is usually smart enough. In this case it may be that the exec
command processor is looking for the area between the first space and the end of the line. I’ve seen this happen on a Linux system before. Not HA, but others.
BTW. HA default is #!/usr/bin/with-contenv bashio
. Try this one.
Here’s a list of valid Shebangs I found on the terminal addon. Run On Startup.d
I have solved it, all command were actually fine, but I opened an session in docker itself, to see what went wrong, because it worked in an ssh session from ssh addon … Seems ssh add-on is running alpine 3.13 and HassOs is running 3.12 and that apk is not part of 3.12 …
So I needed to modify script to download another apk version
Hmm I’m having a small issue: Where do you put the following:
shell_command:
setup: /config/scripts/setup.sh
Does this go in /config/configuration.yaml or another location?
I put the following in the /config/configuration.yaml file:
shell_command:
setup: /config/shell/setup.sh
My /config/automations
- id: '1635091517986'
alias: startup
description: Adds APK packages to HomeAssistant through apk package manager at boot
trigger:
- platform: homeassistant
event: start
action:
- service: shell_command.setup
initial_state: 'on'
Here is /config/shell/setup.sh:
#! /bin/sh
# apk_add_packages_at_boot.sh
# Script taken from: https://community.home-assistant.io/t/use-apt-get-commands/236873/4
apk update
apk add git-lfs
My log files however say this:
startup: Error executing script. Service not found for call_service at pos 1: Unable to find service shell_command.setup
OK - I tried manually. I could install the package. Being this is a docker image however, the added file isn’t going to stay after reboot.
In doing some reading – I think I’m approaching things a little wrong, With what you’re telling me to do I’m adding git-lfs package inside the docker container – homeassistant. I think however I want to add git lfs inside the Home Assistant OS – not the container. I can add this package inside the OS – however after a reboot it’s gone as well.
Based on the information I’m gathering, it looks like there is a great method to add permanent packages inside the homeassistant OS
I have the script running at each reboot executing the shell command
you can also execute the the shell command manually in dev tools
automation:
- id: hass_1
initial_state: true
alias: System Startup Notification
trigger:
platform: homeassistant
event: start
action:
- service: notify.telegram
data:
message: Home Assistant back online! at {{now().strftime("%H:%M:%S")}}
- service: shell_command.setup
setup: !secret shell_command_setup
shell_command_setup: "/config/scripts/setup.sh"
setup. sh
#!/bin/sh
echo "Updating Image with Easyplus Tools"
apk update
apk add -u busybox
apk add busybox-extras
apk add expect
apk add sshpass
pip3 install pexpect
echo "Easyplus Tools Installed"
sh /config/scripts/ssh-login-alert-telegram/deploy.sh
What files are you putting the following commands in:
setup: !secret shell_command_setup
shell_command_setup: "/config/scripts/setup.sh"
How do you add packages to the HassOS system? When I access it, I get “apk add…” Apk not found …
Is there also a way to make it permanent after a reboot?
I need to compile something, inside the HassOS itself, I need to add the linux-headers