from irmadlad@lemmy.world to selfhosted@lemmy.world on 26 Jun 20:25
https://lemmy.world/post/48686276
AI DISCLAIMER: Yes I used AI in addition to a host of website resources to create this. If down voting ‘AI anything’ makes you feel better, then by all means do so.
PURPOSE:
- To display a ‘Song Of The Day’ in MOTD whenever I log in via SSH.
WHY:
- First, I wanted to see if I could actually pull it off. I’ve been tinkering around with basic Python and some bash scripting again, ever since my Weather Data deployment. So learning was a big part of this. Baby steps I’m sure, but progress nonetheless.
- Secondly, I have a pretty large physical collection of music that I have been accumulating for decades and converting out to flac. Sometimes I forget all the cool songs I might miss every once in a while. So, I figured this would be a cool way to remind myself.
POSSIBLE FUTURE UPDATES:
- Perhaps embedding the link to the Song Of The Day in the MOTD. I’m not sure if that is possible at this point.
Among the things I learned is that if your password to Navidrome has special characters such as $, then wrap the password in single quotes:
- NAVIDROME_PASSWORD="your_password"
- NAVIDROME_PASSWORD=‘$your_pa$$word$’
ETA: Forgot the prerequisites. You must enable these variables in your Docker compose or through Portainer or similar:
- ND_REPORTREALPATH=true
- ND_ENABLESUBSONIC=true
I’m including a pdf for the instructions and script because I can’t seem to get Lemmy formatting to bend to my will. The link will take you to Mega.nz. If you are interested but Mega.nz is not allowed on your network, I can upload anywhere you want. Please scan the pdf before opening.
To the best of my knowledge, this will not cause your server to implode or explode. As with any code you find online, thoroughly examine it before deployment on a production server.

If anyone has a better way or other ideas, I’m willing to be schooled.
Have fun!
#selfhosted
threaded - newest
I would have just baked an api call to navidrome in a shell script with an interpreter like js and some bash variable manipulation and called it directly from motd.
For security, you may want to look at vault for secrets management so you don’t have to expose plaintext secrets in your script.
Yes, you are correct. For what I’ve got surrounding it as far as security wise, I feel fairly secure, not 100%, but more prudence would be much better. Would you have any recommendations maybe in which direction I could go in?
Oh well, see now you’re just showing off. LOL I may do that at some later date. I actually had a good time doing what seems like a simple thing, and I learned a thing or three, so a good time was had all around.
Well, it’s not super difficult. I sort of mash my way through getting data by api by just using curl and then clumsily filtering the output.
You’ve already got the mechanism to get the data, I think your solution is fine. My way to do it is just a relic from my time working with a bunch of devs.
Just yanking your chain bro. But back to your admonishment about the vault. I’ve often wondered about it. We keep secrets in .env files etc. Of course, if a nefarious actor gained entrance to the server, at that point, would a vault help? Just spitballing. My security is pretty tight in my estimation. Some even have told me it’s overboard. However it has served me well over the years without incident, but it is something always in my mind. You’re a programmer, what would you recommend?
Hah! By trade, I’m a sysadmin, my daily is security reviews at the planning and governance level.
I spent a good 6 years working in a Dev shop, and I picked up a lot of habits there, learned a ton about rest APIs, etc.
Setting up a vault for secrets (Hashicorp’s vault is a popular one) might be a bit overkill for your needs in a homelab, but it’s a great way to inject some security into python, bash scripts, which I think is useful, because lots of us start with scripting and move from there.
The basic mechanism is you set up the vault, define pools, etc and then use a token request instead of putting the secret in the script itself. There are tons of examples for each language and mode, but i just use a vault command in the script, throw the output in a variable and that’s pretty much it.
Secrets management in Dev and devops work is really interesting, if you ask me. All the way from the IDE to prod, there are many ways to leak passwords, api tokens, paths no one should know, etc.
Edit: I hope you didn’t take the vault comment as an admonishment, I meant it to be an interesting suggestion.
Edit 2: sometimes I wish I could go back to more technical stuff, that’s pretty much my reason for doing homelab stuff.
I took it as a positive.
What is MOTD?
“Message of the day”, basically a dynamic greeting
Great question. The MOTD on Linux stands for “Message of the Day.” It’s a system text file that’s displayed when you log in usually over SSH or to a local terminal. It’s generated and managed by the distro. It can include server info, warnings, or update notices. The MOTD file is typically
/ etc / motdor/ etc / motd.d /. For instance, my example:spoiler
<img alt="" src="https://lemmy.world/pictrs/image/074a7d3d-418f-4dd9-bd70-9af7657ccdff.png">
There are messages about upgrading, and since I did an update yesterday morning, I need a system restart. The MOTD will tell you about updates, if you have any zombies running around your server all willy-nilly etc. Some people customize their MOTD as such:
spoiler
<img alt="" src="https://lemmy.world/pictrs/image/cf2fc031-41de-4322-ac3a-a57f687a0837.jpeg">
They can be simple or very involved.
spoiler
<img alt="" src="https://lemmy.world/pictrs/image/0ced0951-777f-42f3-a861-60b08d16a2bd.png">
I’m sure there are more than likely others here who have custom MOTDs. There used to be a program called neofetch that would assist in this. I haven’t played around with neofetch in quite a long time, it’s probably been superceeded by something better or updated.