daemontools

3 settembre 2023 by Roberto Puzzanghera 0 commenti

daemontools è una collezione di strumenti per gestire servizi UNIX. Monitora i servizi di qmail e salva i messaggi di errore in uno o più logs.

Changelog

  • Sep 3, 2023
    -Buffer Overflow fixed in timestamp.c (patch multilog-readable_datetime, Ubuntu 22.04). It was causing empty log files everywhere. (thanks Bai Borko and KPC)
  • Jun 30, 2023
    -aggiunta la mia patch multilog-readable_datetime, che sostituisce il timestamp con un formato leggibile nei file log. Non installare questa patch se si preferisce il vecchio timestamp.
    -se si installa questa patch è necessario anche riscaricare il programma convert-multilog. Lasciare invece il programma originale se si usa il timestamp . (diff)

Upgrading

Se si è già installato daemontools e si desidera solo applicare la patch multilog_readable-datetime è necessario seguire i seguenti pasaggi:

cd /var/qmail/admin
wget https://notes.sagredo.eu/files/qmail/patches/daemontools/daemontools-0.76-readable_datetime.patch
cd daemontools
patch -p1 < ../daemontools-0.76-readable_datetime.patch
./package/install
qmailctl reboot

NB: è necessario "uccidere" i processi tcpserver già esecuzione e far ripartire qmail with qmailctl reboot.

Scaricare nuovamente il programma convert-multilog:

rm /usr/local/bin/convert-multilog
wget -O  /usr/local/bin/convert-multilog https://notes.sagredo.eu/files/qmail/convert-multilog

Infine ritoccare queste righe nel proprio file qmail-smtpd/run/log e qmail-smtpsd/run/log files:

- n5 s16777215 '-*' '+* qlog*' !/usr/local/bin/archive_qmail_qlog $LOGDIRQLOG
+ n5 s16777215 '-*' '+*qlog*' !/usr/local/bin/archive_qmail_qlog $LOGDIRQLOG

notare lo spazio bianco mancante in 'qlog'.

Installazione

Innanzitutto creiamo  la cartella che ospiterà qmail, daemontools e ucspi-tcp:

mkdir /var/qmail

In questa guida supporrò che tutti i pacchetti sorgenti siano stati scaricati nella cartella /usr/local/src.

cd /usr/local/src
wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
wget https://notes.sagredo.eu/files/qmail/patches/daemontools/daemontools-0.76.errno.patch
wget https://notes.sagredo.eu/files/qmail/patches/daemontools/multilog_filesize_limit.patch
wget https://notes.sagredo.eu/files/qmail/patches/daemontools/daemontools-0.76-readable_datetime.patch

La patch multilog_filesize_limit (grazie a Sam Tang) consente di estendere il limite delle dimensioni del log file fino a 100MB (per default è 16MB).

La mia patch multilog-readable_datetime sostituisce il timestamp con un formato leggibile. Se si preferisce il normale timestamp, non installare questa patch. Ecco quello che saranno le differenze nelle linee dei file log:

@40000000649b607828223d14 tcpserver: status: 0/200/0
diventerà
2023-06-28 16:17:26.501272173 tcpserver: status: 0/200/0

Installare daemontools:

cd /var/qmail
tar xzf /usr/local/src/daemontools-0.76.tar.gz
cd admin
ln -s daemontools-0.76 daemontools
chmod 1755 .

Dunque abbiamo daemontools in  /var/qmail/admin/daemontools

Ora applichiamo le patch e installiamo:

cd daemontools
patch -p1 < /usr/local/src/daemontools-0.76.errno.patch
patch -p1 < /usr/local/src/multilog_filesize_limit.patch
patch -p1 < /usr/local/src/daemontools-0.76-readable_datetime.patch
package/install

Aggiungere ora il servizio "clear", che è utile quando si deve pulire la riga  readproctitle service errors:

cd ../
mkdir clear
touch clear/down

cat > clear/run << __EOF__
#!/bin/sh
yes '' | head -4000 | tr '\n' .
__EOF__

chmod +x clear/run

Infine, dal momento che tutte quelle cartelle nella directory principale / mi disturbano non poco:

ln -s /var/qmail/admin/daemontools/command /command

In questo modo abbiamo quasi tutto sotto /var/qmail, ad eccezione di /command e /service che sono solo dei link simbolici.

Lanciare daemontools all'avvio

Il commndo /command/svcscanboot è stato inserito nel file /etc/inittab. Ciò sarà sufficiente a lanciare qmail all'avvio della macchina, a meno che non si abbia a che fare con un sistema operativo basato su systemd.

In tal caso il comando di cui sopra potrà essere aggiunto a rc.local, supponendo che lo stesso rc.local sia eseguito all'avvio. In alternativa si può scegliere di creare un servizio specifico daemontools.service come segue:

cat > /etc/systemd/system/daemontools.service << __EOF__
[Unit]
Description=Daemontools service supervision
ConditionPathExists=/command/svscanboot

[Service]
ExecStart=/command/svscanboot
Restart=always

[Install]
WantedBy=multi-user.target
__EOF__

systemctl enable daemontools.service
systemctl start  daemontools.service

Aggiungi un commento

Ultimi commenti
Articoli recenti

RSS feeds