HOWTO: Install Ansible Semaphore on CentOS 7.X (no docker)

I wrote a little ago about how to install Ansible Semaphore as a docker. It’s been raining a lot since them, and now it’s time to finish what I started and install it for real. It’s not so complicated. Unfortunately the result didn’t deliver. Below you have my installation log and my setup, together with a relevant output.

## > wget\
> download/v2.8.75/semaphore_2.8.75_linux_amd64.rpm
Resolving (
Connecting to (||:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://XXX
Saving to: - semaphore_2.8.75_linux_amd64.rpm
100%[==========================>] 11,696,811 34.3MB/s in 0.3s
DATE (34.3 MB/s) -  semaphore_2.8.75_linux_amd64.rpm
saved [11696811/11696811]
## > yum install semaphore_2.8.75_linux_amd64.rpm
Loaded plugins: fastestmirror, langpacks, nvidia
Examining semaphore_2.8.75_linux_amd64.rpm:
Marking semaphore_2.8.75_linux_amd64.rpm
to be installed
Resolving Dependencies
--> Running transaction check
---> Package semaphore.x86_64 0:2.8.75-1 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
Package Arch Version Repository Size
semaphore x86_64 2.8.75-1 semaphore_2.8.75_linux_amd64 31 M
Transaction Summary
Install 1 Package
Total size: 31 M
semaphore.x86_64 0:2.8.75-1
## > semaphore setup
Hello! You will now be guided through a setup to:

1. Set up configuration for a MySQL/MariaDB database
2. Set up a path for your playbooks (auto-created)
3. Run database Migrations
4. Set up initial semaphore user & password

What database to use:
1 - MySQL
2 - BoltDB
3 - PostgreSQL
(default 1):

db Hostname (default
db User (default root):
db Password: MYPASSWORD
db Name (default semaphore):
Playbook path (default /tmp/semaphore):
Web root URL (optional, see Web-root-URL):
Enable email alerts? (yes/no) (default no): yes
Mail server host (default localhost):
Mail server port (default 25):
Mail sender address (default semaphore@localhost): XXX
Enable telegram alerts? (yes/no) (default no):
Enable slack alerts? (yes/no) (default no):
Enable LDAP authentication? (yes/no) (default no):
Config output directory (default /root/Downloads):

Running: mkdir -p /XXX/semaphore..
Configuration written to /XXX/semaphore/config.json..
Pinging db..

Running db Migrations..
Executing migration v0.0.0 (at DATE)...
Creating migrations table
Executing migration v1.0.0 (at DATE)...
... some other migrations...
Executing migration v2.8.58 (at DATE)...
Migrations Finished

> Username: root
> Email:
WARN[0075] no rows in result set level=Warn
> Your name: MYNAME
> Password: MYPASSWORD

You are all setup Juan!
Re-launch this program pointing to the configuration file

./semaphore server --config /XXX/semaphore/config.json

To run as daemon:

nohup ./semaphore server \
--config /XXX/semaphore/config.json &

You can login with or root.

Now let’s run it.

## > semaphore server --config /XXX/semaphore/config.json
MySQL root@ semaphore
Tmp Path (projects home) /XXX/ansible/semaphore
Semaphore v2.8.75
Port :3000
Server is running
WARN[0037] write IP:3000->IP:41248: write: broken pipe level=Warn
INFO[322969] Task 1 added to queue
INFO[322970] Set resource locker with TaskRunner 1
INFO[322970] Stopped preparing TaskRunner 1
INFO[322970] Release resource locker with TaskRunner 1
INFO[322975] Task 1 removed from queue

The INFO entries are produced after running my first task successfully. It takes a little to configure it (you need to write an inventory, an environment, choose a key and define your repositories). Everything is fine from now on. Unfortunately it’s relying on repositories and quite complex playbooks, so it’s not going to be my choice. I want something that even a monkey with a keyboard can use. I’ll keep you informed of the results of my search 🙂


HOWTO : fix clock skew on date (when running it on a cron job)

Preliminaries: the date command works but it shows a different output when running as a cronjob than when running as a script. That is:

## > date=$(date +"%Y-%m-%d %H:%M:%S")
## > echo $date
2023-03-27 20:04:49
... wait for the cron each minute to run...
## > more date.log
2023-03-27 14:05:49

Such a precise skew directly points to a wrong timezone. Let’s configure it.

## > timedatectl 
Warning: Ignoring the TZ variable. Reading the system's time zone setting only.
Local time: Mon 2023-03-27 14:12:29 EDT
Universal time: Mon 2023-03-27 18:12:29 UTC
RTC time: Mon 2023-03-27 18:12:29
Time zone: America/New_York (EDT, -0400)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: yes
Last DST change: DST began at
Sun 2023-03-12 01:59:59 EST
Sun 2023-03-12 03:00:00 EDT
Next DST change: DST ends (the clock jumps one hour backwards) at
Sun 2023-11-05 01:59:59 EDT
Sun 2023-11-05 01:00:00 EST

We are NOT in NY! Unfortunately, I hope. I found the fix here. I set the zone to Berlin and restart the crons just in case:

## > timedatectl set-timezone Europe/Berlin
## > systemctl restart crond
## > systemctl restart rsyslog

After this all the times are right, except mine 😀

The origin of the docker names

I thought the docker names were infinite, but if I need to believe what my2cents says about this (btw image also taken fro the article) it is not the case. It’s just a go algorithm that literally picks up a name and an adjetive from a hardcoded list. Here you have a running example and the github code. How boring explanation. It’s not aliens trying to communicate or a desperate AI doing the same 😀

HOWTO: install Chrome in CentOS 7.X

We need to have a browser up to date. And some things don’t run unless we have Chrome (picture taken from here). Unfortunately, the browser is not available by default on CentOS 7.X, so you cannot simply yum install it 🙂 . How can you enjoy it? I found the solution on this linuxize post. In two steps.


yum localinstall google-chrome-stable_current_x86_64.rpm

After that, I get the icon in the corresponding menu (the internet menu) and I can call it from command line if needed. And enjoy the latest technology 🙂

Using Phoenix, a web-based code editor

I’m writing quite some web code here and there, and I’m in need of a generic IDE with some predictive capabilities, a WYSIWYG feature, and available everywhere, to quickly correct my bugs. I found in phoenix the friend I needed for it. Here you have the github project page (picture taken from it) but you better try it out directly on your browser without any additional requirements.

At the very beginning you are asked to choose between a New project, or Import Project. On New you can choose Phoenix default or HTML5. On Import, Open Folder or GitHub project. I do have a few GitHub project, but they are private and I want to keep it this way. So I simply clone the project and open the folder on the Import section.

And I don’t need to do so much afterwards. Clicking around is allowing me to experience the changes on my code almost live. You have the classical shortcuts available (CTRL+S, etc), autocompletion of parameters and words, and everything I really need, so it delivers. At least for me. Will I be able to find a multi-language version of this? I mean, I do have bash scripts, and python code, and even more. But step by step, maybe 🙂

ERROR: kdump-kern.o:kdump-kern.c:(.text+0x445): more undefined references to `__x86_return_thunk’ follow (when building the GPFS packages)

Well I’m happy I’m not the first one with this issue. I’ve updated my CentOS 7.X to the latest kernel, with the so called retbleed kernel patch, and I get the above error when running mmbuildgpl as usual after getting a new kernel. The solution to the issue you can find on this IBM post. I copy it from the article:

  1. Edit /usr/lpp/mmfs/src/gpl-linux/Kbuild on the node
  2. Find the line
    $(KBHOSTPROGS) := lxtrace
  3. Above that line, add a new one with: CFLAGS_kdump-kern.o += -mfunction-return=keep
  4. Save the file and run mmbuildgpl again.

After a successful build I simply try mmstartup and, so far, so good. NOTE: since this is a “mini-post” I have backdated it so that I can post something else today 🙂

HOWTO: install NVIDIA and CUDA on Fedora 37

I come back to Fedora after… 6 years of so… with Scientific Linux first, then with CentOS. It feels nice to come back to it after such a long time! The installation went smootly and I ended up with kernel 6.1.14, which is, very modern in comparison with the one I’m using in CentOS (3.10.0) and slightly more modern than the Ubuntu one (5.15.0). Actually the picture above corresponds to kernel 5.12.8, but the feeling is the same. I took the pic from the installation guide I have followed. Basically the install is done in the same way than 6 years ago. Allow me to ellaborate.

  1. Get the cuda package. I got
  2. Try to run it and check the errors on /var/log/cuda-installer.log and /var/log/nvidia-installer.log.
  3. Install the missing packages (maybe kernel-devel and similar)
  4. Blackliust the nouveau drivers echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
  5. Edit /etc/default/grub. My grub line looks like this : GRUB_CMDLINE_LINUX="rhgb quiet rd.driver.blacklist=nouveau nvidia-drm.modeset=1"
  6. Adjist grub. grub2-mkconfig -o /boot/grub2/grub.cfg
  7. Remove nouveau. yum remove xorg-x11-drv-nouveau
  8. Make initramfs backup first. mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r)-nouveau.img
  9. Generate a new initramfs. dracut /boot/initramfs-$(uname -r).img $(uname -r)
  10. Reboot, go to init 3 (no graphics) and try again the installer.

As you see, pretty easy but with a lot of steps. I need to cook up a better way. Maybe with ansible. I’ll keep you posted. BTW, you can download Fedora for Workstations here. BTW2: sorry but the dragons are fighting, maybe they will come back soon 😉

Tactical RMM: Open Source remote monitoring and management

If I ever have full control over the network, I’d like to install something like this. For the moment I have only partial control – a subnet – so all these network-scraping solutions will not be welcomed in my neighbourhood. But you need to hear about this. Here you have the official documentation. If you click on the LIVE DEMO you will see the power of it. And here you have a condensed user guide. I took the above picture from it. As you see, it’s one web to control it all! Windows, Linux, mac, you name it. With grafana integration and a big community. You get plugins for everything! Pity that I’m not the network administrator. Well, no-one is perfect… 😛

Taskcafe, an open source project management tool

In my eternal search for a good and free project management tool I’ve found this little jewel called Taskcafe. I went for a docker installation without changing an iota of the installation procedure, we clone the repository:

git clone && cd taskcafe

Now do the following:

docker-compose -p taskcafe up -d

This will start a postgres instance as well as a taskcafe instance, so two dockers, taskcafe_web_1 and taskcafe_postgres_1. But how do I log in? Fortunately there’s a trend about it. Just replace the end of the URL you got by /register. After getting my admin, the rest is easy. I create my first project, then I add lists to it, and cards. That’s it. Up and running! Beautiful ❤