wiki:SynAutomation

Version 1 (modified by trac, 16 years ago) (diff)

--

Syn-3 automatisch dingen laten doen

De filosofie van Syn-3 is dat alles automatisch en intelligent moet gebeuren, zonder dat de user zich hier druk om hoeft te maken. Deze pagina legt uit hoe je dit optimaal kan doen.

Opstarten van services (daemons)

Services kun je gewoon in /service te staan, zoals beschreven bij SynServices.

Het update systeem zorgt zelf dat de service gestopt word en gerestart na het installeren van het pakketje.

Zet de run, start en stop scripts in je package svn directory en pas de slackbuild aan zodat ze naar de juiste plek gekopieerd worden. (/service/servicename/...)

Post installatie scripts

Vaak is het nodig om na de installatie van een pakketje nog dingen te doen. Bijvoorbeeld users aanmaken of databases vullen.

Dit kun je eenvoudig doen door een executable script te maken in /etc/postinst.d/post.packagename.

Na installatie worden deze scripts uitgevoerd:

  • Als het script exit met code 0 dan word de x-bit verwijderd zodat het script niet meer uitgevoerd word.
  • Als het script exit met een andere code blijft het x-bit staan. Bij een volgende postinstall run word het script opnieuw uitgevoerd. De gebruiker word op de hoogte gesteld van deze fout via het monitoring systeem. SynMonitor.

Wellicht is het handig om in bestaande post installatie scripts te kijken. Als je een service down wilt hebben tijdens de post installatie zal je script er ongeveer zo uit zien:

svcstop /service/naam || exit 1
...doe allerlei shit
svcreset /service/naam || exit 1

Gebruik dus svcreset ipv svcstart, omdat je voorkomen dat je dingen start die de user eigenlijk down wou hebben.

Denk erom dat een pakketje later nog een keer geinstalleerd kan worden (bij een update bijvoorbeeld.) Zorg dus dat je script wat intelligenter worden en rekening houden met bestaande instellingen en degelijke.

Bij de eerste installatie van een Syn-3 machine worden de post installatie pas uitgevoerd nadat het systeem helemaal geboot is.

Dingen alleen bij eerste installatie laten doen

Soms wil je dat dingen slechts 1x gebeuren en bij een update niet meer. Het down gooien van de dhcp server is hier een goed voorbeeld van:

[Syn-3] root@darkstar.example.net /service/dhcpd# cat /etc/postinst.d/post.dhcp
#!/bin/bash

#first time installation?
if [ `ls /var/log/packages/dhcp-* 2>/dev/null|wc -l` == "1" ]; then
        #make sure dhcpd is down by first time installation
        touch /service/dhcpd/down
fi

exit 0

Config files

Configfiles worden normaal gesproken gewoon overschreven net als alle andere files.

Wil je dit niet, geef dan de config file een naam die eindigd op .new. Het systeem overschrijft dan bestaande files niet. Je kan je postinstall script eventueel zo slim maken om simpelle wijzigingen aan bestaande configfile te doen.

Backup systeem

Alle files die je onder /home/system/ zet worden zowieso gebackupped. Zorg dus dat alle files waar de user en eindusers wijzigingen in kunnen hier in een subdir staan! Dus /home/system/packagename.

Als je een database of iets anders hebt wat 'gedumpt' moet worden voor een backup, dan kun je hiervoor een speciale backup en restore scripts maken in /usr/backup. Kijk in SynBackup hoe dit moet. Een backup word altijd 'hot' gemaakt: services worden dus niet uitgeschakeld tijdens een backup.

Iets uitvoeren na het booten

Wil je iets automatisch uitvoeren tijdens het booten, zet deze scripts dan in /etc/boot.d/ en maak ze executable. Symbolic links zijn ook toegestaan.

De exit code word gechecked en de user word op de hoogte gesteld van eventuele errors. (exit anders dan 0)

Een taak schedulen

Moet er iets elk uur/dag/week/maand gebeuren, plaats dan je script in de /etc onder cron.daily cron.hourly cron.monthly of cron.weekly.

Een cronjob voor root kun je automatisch toevoegen in een postinstall file, maar de voorkeur heeft dat je dit niet doet! Dit kan problemen opleveren als je dit niet goed script. Gebruik dus altijd de directorys in /etc als het kan.

Monitoring en logging voor de eind gebruiker

Wil je een tekst naar de logs, console of eindgebruiker sturen?

Wil je de status van een bepaald iets bijhouden zodat de user hiervan op de hoogte gesteld word via de SCC en email?

Kijk dan bij SynMonitor.