Uitleg scripts: Difference between revisions
Line 15: | Line 15: | ||
Dit script is het overkoepelende script dat alle '''gen_*''' scripts op zijn beurt aanroept en mysql om de database te laden. '''upd_smail''' op zijn beurt wordt weer door '''upd_all''' aangeroepen. In dit '''upd_smail''' script worden de SQL header files samengevoegd met de output van de verschillende gen_* scripts. Ook wordt een SQL footer toegevoegd, vaak alleen om de SQL te beëindigen met een ''';'''. Tenslotte wordt mysql gebruikt on de data te laden waarbij de tabellen in z'n geheel wordt vervangen. | Dit script is het overkoepelende script dat alle '''gen_*''' scripts op zijn beurt aanroept en mysql om de database te laden. '''upd_smail''' op zijn beurt wordt weer door '''upd_all''' aangeroepen. In dit '''upd_smail''' script worden de SQL header files samengevoegd met de output van de verschillende gen_* scripts. Ook wordt een SQL footer toegevoegd, vaak alleen om de SQL te beëindigen met een ''';'''. Tenslotte wordt mysql gebruikt on de data te laden waarbij de tabellen in z'n geheel wordt vervangen. | ||
<pre> | <pre> | ||
#!/bin/sh | #!/bin/sh | ||
# | |||
CHOWN=/bin/chown | CHOWN=/bin/chown | ||
CHMOD=/bin/chmod | CHMOD=/bin/chmod | ||
HNET=/usr/local/hobbynet | HNET=/usr/local/hobbynet | ||
HNET_BIN=$HNET/bin | HNET_BIN=$HNET/bin | ||
HNET_LIB=$HNET/lib | HNET_LIB=$HNET/lib | ||
cd $HNET_LIB | cd $HNET_LIB | ||
echo $1 | echo $1 | ||
Line 51: | Line 55: | ||
# | # | ||
echo "Building domain table for Hobbynet..." | echo "Building domain table for Hobbynet..." | ||
cp $HNET_LIB/domain_header.tmpl $HNET_LIB/domain.sql | cp $HNET_LIB/domain_header.tmpl $HNET_LIB/domain.sql | ||
$HNET_BIN/gen_domain | sort | uniq >> $HNET_LIB/domain.sql | $HNET_BIN/gen_domain | sort | uniq >> $HNET_LIB/domain.sql | ||
$HNET_BIN/gen_hobbynet_domain >> $HNET_LIB/domain.sql | $HNET_BIN/gen_hobbynet_domain >> $HNET_LIB/domain.sql | ||
cat $HNET_LIB/domain_footer.tmpl >> $HNET_LIB/domain.sql | cat $HNET_LIB/domain_footer.tmpl >> $HNET_LIB/domain.sql | ||
$CHMOD 644 $HNET_LIB/domain.sql | |||
$CHOWN root:root $HNET_LIB/domain.sql | |||
mysql -u postfixadmin -pvFSQiD7uRyaF postfixadmin <$HNET_LIB/domain.sql | |||
mysqldump -u postfixadmin -pvFSQiD7uRyaF postfixadmin domain >$HNET_LIB/domain-saved.sql | |||
# | |||
echo "Building alias_domain table for Hobbynet..." | |||
cp $HNET_LIB/alias_domain_header.tmpl $HNET_LIB/alias_domain.sql | |||
$HNET_BIN/gen_alias_domain >> $HNET_LIB/alias_domain.sql | |||
cat $HNET_LIB/alias_domain_footer.tmpl >> $HNET_LIB/alias_domain.sql | cat $HNET_LIB/alias_domain_footer.tmpl >> $HNET_LIB/alias_domain.sql | ||
$CHMOD 644 $HNET_LIB/ | $CHMOD 644 $HNET_LIB/alias_domain.sql | ||
$CHOWN root:root $HNET_LIB/ | $CHOWN root:root $HNET_LIB/alias_domain.sql | ||
mysql -u postfixadmin -pvFSQiD7uRyaF postfixadmin <$HNET_LIB/alias_domain.sql | mysql -u postfixadmin -pvFSQiD7uRyaF postfixadmin <$HNET_LIB/alias_domain.sql | ||
mysqldump -u postfixadmin -pvFSQiD7uRyaF postfixadmin alias_domain >$HNET_LIB/alias_domain-saved.sql | mysqldump -u postfixadmin -pvFSQiD7uRyaF postfixadmin alias_domain >$HNET_LIB/alias_domain-saved.sql | ||
# | # | ||
Line 93: | Line 101: | ||
# | # | ||
echo "Building domain2 table for Kadernet..." | echo "Building domain2 table for Kadernet..." | ||
cp $HNET_LIB/domain2_header.tmpl $HNET_LIB/domain2.sql | cp $HNET_LIB/domain2_header.tmpl $HNET_LIB/domain2.sql | ||
$HNET_BIN/gen_domain2 >> $HNET_LIB/domain2.sql | $HNET_BIN/gen_domain2 >> $HNET_LIB/domain2.sql | ||
cat $HNET_LIB/domain2_footer.tmpl >> $HNET_LIB/domain2.sql | cat $HNET_LIB/domain2_footer.tmpl >> $HNET_LIB/domain2.sql | ||
$CHMOD 644 $HNET_LIB/domain2.sql | |||
$CHOWN root:root $HNET_LIB/domain2.sql | |||
mysql -u postfixadmin -pvFSQiD7uRyaF postfixadmin <$HNET_LIB/domain2.sql | |||
# | |||
echo "Building alias_domain2 table for Kadernet..." | |||
cp $HNET_LIB/alias_domain2_header.tmpl $HNET_LIB/alias_domain2.sql | |||
$HNET_BIN/gen_alias_domain2 >> $HNET_LIB/alias_domain2.sql | |||
cat $HNET_LIB/alias_domain2_footer.tmpl >> $HNET_LIB/alias_domain2.sql | cat $HNET_LIB/alias_domain2_footer.tmpl >> $HNET_LIB/alias_domain2.sql | ||
$CHMOD 644 $HNET_LIB/ | $CHMOD 644 $HNET_LIB/alias_domain2.sql | ||
$CHOWN root:root $HNET_LIB/ | $CHOWN root:root $HNET_LIB/alias_domain2.sql | ||
mysql -u postfixadmin -pvFSQiD7uRyaF postfixadmin <$HNET_LIB/alias_domain2.sql | mysql -u postfixadmin -pvFSQiD7uRyaF postfixadmin <$HNET_LIB/alias_domain2.sql | ||
# | # | ||
Line 110: | Line 122: | ||
$CHMOD 644 $HNET_LIB/systemusers | $CHMOD 644 $HNET_LIB/systemusers | ||
$CHOWN root:root $HNET_LIB/systemusers | $CHOWN root:root $HNET_LIB/systemusers | ||
</pre> | </pre> | ||
Revision as of 15:51, 28 September 2010
Introductie
De scripting is er op gericht een aantal tabellen toe te voegen aan de postfixadmin database. De tabellen zijn helemaal standaard gehouden zoals postfixadmin ze aanmaakt bij de installatie maar voor 4 tabellen wordt een identieke tabel gemaakt die NIET onder PostfixAdmin beheerd wordt. Postfixadmin kan worden gebruikt om veranderingen aan te brengen in het beheerde deel dat alleen Hobbynet en/of Hobbynetleden betreft. Het Kadernet deel bevindt zich in de onzichtbare extra tabellen.
Locatie van de bestanden
De bron bestanden: husers, dusers, b3a.txt, b3n.txt, alias.txt alias_domain.txt en de header/footer files staan in /usr/local/hobbynet/lib directory. De scripts staan in /usr/local/hobbynet/bin.
Scripts
De (perl) scripts zijn bewust kort en simpel (KISS) gehouden om ze zo modulair mogelijk te maken. De tactiek is telkens hetzelfde: bij een SQL loader file is er een header, tussenliggende gelijksoortige data regels en een footer te onderscheiden.
- De header is alle tekst die door een MySQL dump gemaakt wordt (met een delete-if-exists erin), tot en met de eerste SQL regel: INSERT INTO.
- De diverse scripts voegen de tussenliggende data regels toe.
- De footer is gewoonlijk een laatste data regel maar dan eindigend op ; in plaats van ,.
Een en ander is goed te zien in het upd_smail shell-script.
upd_smail
Dit script is het overkoepelende script dat alle gen_* scripts op zijn beurt aanroept en mysql om de database te laden. upd_smail op zijn beurt wordt weer door upd_all aangeroepen. In dit upd_smail script worden de SQL header files samengevoegd met de output van de verschillende gen_* scripts. Ook wordt een SQL footer toegevoegd, vaak alleen om de SQL te beëindigen met een ;. Tenslotte wordt mysql gebruikt on de data te laden waarbij de tabellen in z'n geheel wordt vervangen.
#!/bin/sh # CHOWN=/bin/chown CHMOD=/bin/chmod HNET=/usr/local/hobbynet HNET_BIN=$HNET/bin HNET_LIB=$HNET/lib cd $HNET_LIB echo $1 ###################### new scripting for MySQL bases Postfix ############################ # echo "Building mailbox table for Hobbynet..." cp $HNET_LIB/mailbox_header.tmpl $HNET_LIB/mailbox.sql $HNET_BIN/gen_mailbox | sort | uniq >> $HNET_LIB/mailbox.sql cat $HNET_LIB/mailbox_footer.tmpl >> $HNET_LIB/mailbox.sql $CHMOD 644 $HNET_LIB/mailbox.sql $CHOWN root:root $HNET_LIB/mailbox.sql mysql -u postfixadmin -pvFSQiD7uRyaF postfixadmin <$HNET_LIB/mailbox.sql mysqldump -u postfixadmin -pvFSQiD7uRyaF postfixadmin mailbox >$HNET_LIB/mailbox-saved.sql # echo "Building alias table for Hobbynet..." cp $HNET_LIB/alias_header.tmpl $HNET_LIB/alias.sql $HNET_BIN/gen_alias | sort | uniq >> $HNET_LIB/alias.sql $HNET_BIN/gen_hnet_alias >> $HNET_LIB/alias.sql $HNET_BIN/gen_www_alias >> $HNET_LIB/alias.sql $HNET_BIN/gen_hobbynet_alias >> $HNET_LIB/alias.sql cat $HNET_LIB/alias-scouthout.tmpl >> $HNET_LIB/alias.sql cat $HNET_LIB/alias_footer.tmpl >> $HNET_LIB/alias.sql $CHMOD 644 $HNET_LIB/alias.sql $CHOWN root:root $HNET_LIB/alias.sql mysql -u postfixadmin -pvFSQiD7uRyaF postfixadmin <$HNET_LIB/alias.sql mysqldump -u postfixadmin -pvFSQiD7uRyaF postfixadmin alias >$HNET_LIB/alias-saved.sql mysqldump -u postfixadmin -pvFSQiD7uRyaF -w"domain='scouthout.nl'" postfixadmin alias >$HNET_LIB/alias-scouthout.sql # echo "Building domain table for Hobbynet..." cp $HNET_LIB/domain_header.tmpl $HNET_LIB/domain.sql $HNET_BIN/gen_domain | sort | uniq >> $HNET_LIB/domain.sql $HNET_BIN/gen_hobbynet_domain >> $HNET_LIB/domain.sql cat $HNET_LIB/domain_footer.tmpl >> $HNET_LIB/domain.sql $CHMOD 644 $HNET_LIB/domain.sql $CHOWN root:root $HNET_LIB/domain.sql mysql -u postfixadmin -pvFSQiD7uRyaF postfixadmin <$HNET_LIB/domain.sql mysqldump -u postfixadmin -pvFSQiD7uRyaF postfixadmin domain >$HNET_LIB/domain-saved.sql # echo "Building alias_domain table for Hobbynet..." cp $HNET_LIB/alias_domain_header.tmpl $HNET_LIB/alias_domain.sql $HNET_BIN/gen_alias_domain >> $HNET_LIB/alias_domain.sql cat $HNET_LIB/alias_domain_footer.tmpl >> $HNET_LIB/alias_domain.sql $CHMOD 644 $HNET_LIB/alias_domain.sql $CHOWN root:root $HNET_LIB/alias_domain.sql mysql -u postfixadmin -pvFSQiD7uRyaF postfixadmin <$HNET_LIB/alias_domain.sql mysqldump -u postfixadmin -pvFSQiD7uRyaF postfixadmin alias_domain >$HNET_LIB/alias_domain-saved.sql # echo "" echo "Building mailbox2 table for Kadernet..." cp $HNET_LIB/mailbox2_header.tmpl $HNET_LIB/mailbox2.sql $HNET_BIN/gen_mailbox2 | sort | uniq >> $HNET_LIB/mailbox2.sql cat $HNET_LIB/mailbox2_footer.tmpl >> $HNET_LIB/mailbox2.sql $CHMOD 644 $HNET_LIB/mailbox2.sql $CHOWN root:root $HNET_LIB/mailbox2.sql mysql -u postfixadmin -pvFSQiD7uRyaF postfixadmin <$HNET_LIB/mailbox2.sql # echo "Building alias2 table for Kadernet..." cp $HNET_LIB/alias2_header.tmpl $HNET_LIB/alias2.sql $HNET_BIN/gen_alias2 | sort | uniq >> $HNET_LIB/alias2.sql $HNET_BIN/gen_func_alias >> $HNET_LIB/alias2.sql $HNET_BIN/gen_best_alias >> $HNET_LIB/alias2.sql $HNET_BIN/gen_webm_alias >> $HNET_LIB/alias2.sql $HNET_BIN/gen_x_voorz_alias >> $HNET_LIB/alias2.sql $HNET_BIN/gen_x_kernl_alias >> $HNET_LIB/alias2.sql $HNET_BIN/gen_x_secr_alias >> $HNET_LIB/alias2.sql $HNET_BIN/gen_x_penm_alias >> $HNET_LIB/alias2.sql $HNET_BIN/gen_x_webm_alias >> $HNET_LIB/alias2.sql $HNET_BIN/gen_x_bestl_alias >> $HNET_LIB/alias2.sql $HNET_BIN/gen_kader_alias >> $HNET_LIB/alias2.sql cat $HNET_LIB/alias2_footer.tmpl >> $HNET_LIB/alias2.sql $CHMOD 644 $HNET_LIB/alias2.sql $CHOWN root:root $HNET_LIB/alias2.sql mysql -u postfixadmin -pvFSQiD7uRyaF postfixadmin <$HNET_LIB/alias2.sql # echo "Building domain2 table for Kadernet..." cp $HNET_LIB/domain2_header.tmpl $HNET_LIB/domain2.sql $HNET_BIN/gen_domain2 >> $HNET_LIB/domain2.sql cat $HNET_LIB/domain2_footer.tmpl >> $HNET_LIB/domain2.sql $CHMOD 644 $HNET_LIB/domain2.sql $CHOWN root:root $HNET_LIB/domain2.sql mysql -u postfixadmin -pvFSQiD7uRyaF postfixadmin <$HNET_LIB/domain2.sql # echo "Building alias_domain2 table for Kadernet..." cp $HNET_LIB/alias_domain2_header.tmpl $HNET_LIB/alias_domain2.sql $HNET_BIN/gen_alias_domain2 >> $HNET_LIB/alias_domain2.sql cat $HNET_LIB/alias_domain2_footer.tmpl >> $HNET_LIB/alias_domain2.sql $CHMOD 644 $HNET_LIB/alias_domain2.sql $CHOWN root:root $HNET_LIB/alias_domain2.sql mysql -u postfixadmin -pvFSQiD7uRyaF postfixadmin <$HNET_LIB/alias_domain2.sql # echo "" echo "Building systemusers for Roundcube..." cp $HNET_LIB/systemusers.tmpl $HNET_LIB/systemusers $HNET_BIN/gen_systemusers >> $HNET_LIB/systemusers $CHMOD 644 $HNET_LIB/systemusers $CHOWN root:root $HNET_LIB/systemusers
gen_mailbox en gen_mailbox2
Deze scripts maken de mailbox informatie aan. Ook worden salted MD5 passwords gegenereerd aan de hand van de passwords in husers. Hiervoor wordt de perl module unix_md5_crypt gebruikt en een kleine subroutine om het salt te genereren. Bij elke run van gen_mailbox* worden deze strings anders maar ze blijven een match geven met het password. De mailbox naam is altijd <contact>@<systeem>.hobby.nl voor hobbynetleden en <lidnummer>@kader.hcc.nl voor kaderleden. Het domein voor kaderleden is dus altijd kader.hcc.nl, voor hobbynet leden altijd <systeem>.hobby.nl. Eventuele niet-automatisch te genereren mailboxen zullen eenmalig uit een platte tekst file moeten komen (incl. de passwords). De verwachting is dat dit uitsluitend Hobbynetleden betreft en die blijven beheerd met PostfixAdmin. Dit is nog niet ingebouwd.
gen_alias en gen_alias2
Deze scripts genereren alle aliases die uit husers gemaakt kunnen worden. Voor de hobbynetleden wordt een alias gemaakt met de naam van de gebruiker in de alias tabel. Er komt dus een <contact>@<systeem>.hobby.nl die naar de mailbox <contact>@<systeem>.hobby.nl wijst. Voor de kadernetleden komen de aliases in alias2. Voor de kaderleden waar het domain kader.hobby.nl is, wordt dat vervangen door kader.hcc.nl. Er wordt een alias gemaakt die naar de mailbox wijst ( met het lidnummer uit husers) en één met de HCC naam uit het in husers opgenomen email adres deze komen in alias2 terecht. Er komt dus een 1234567@kader.hcc.nl en een a.b.c.janssen@kader.hcc.nl die weer beide naar de mailbox 1234567@kader.hcc.nl verwijzen. De alias tabel is zichtbaar in PostfixAdmin, alias2 niet. Door een MySQL constructie (gebruik van UNION ALL) zijn alias en alias2 als het ware één tabel voor de applicaties (Postfix en Dovecot). De alias tabel kan dus beheerd worden met PostfixAdmin, de alias2 tabel is er wel maar is onzichtbaar voor PostfixAdmin. Via phpmyadmin op dbadmin.hobby.nl kunnen natuurlijk alle tabellen in de database postfixadmin benaderd worden.
gen_hobbynet_alias
Dit script leest alias.txt en genereert regels in de sql-loaderfile. He betreft aliases die te maken hebben met hobby.nl of andere beheerde domeinen. Het kan gezien worden als een uitbreiding op gen_alias.
gen_hnet_alias
Dit script genereert de fff_hnet@hobby.nl alias door uit husers het emailadres te halen van leden met code 0,1,2,3 te halen.
gen_www_alias
Dit script genereert de fff_www@hobby.nl alias door uit husers het emailadres te halen van dié leden die een website op een van de Hobbynet webservers hebben. Het is dus een subset van fff_hnet.
gen_func_alias
Dit script genereert alle functionele aliases voor elke groepering in de tabel alias2. Het maakt aliases aan voor voorzitter@<groepering>.hcc.nl, secretaris@<groepering>.hcc.nl en penningmeester@<groepering>.hcc.nl. Tevens wordt info@<groepering>.hcc.nl gemaakt die ook naar secretaris@<groepering>.hcc.nl verwijst. Om aan backwards compatible te zijn is ook voorzien in aliases voor 'voorz', 'secr' en 'penm' die verwijzen naar de lange naam.
gen_best_alias
Dit script genereert de bestuur alias voor elke groepering. Dus per groepering de voorzitter, secretaris, penningmeester en bestuursleden met als alias bestuur@<groepering>.hcc.nl. De informatie wordt gehaald uit de b3a.txt file. Die file wordt uit de kadertab.csv gemaakt. Deze slag staat volledig los van deze scripts en wordt alleen gedraaid als er een nieuwe kadertab wordt aangeboden door het HCC kantoor. De groepering kantoor wordt overgeslagen. Er is geen bestuur@kantoor.hcc.nl...
gen_webm_alias
Voor de webmasters is een apart script gemaakt omdat er variabel aantal webmasters per groepering kan zijn. Bron bestand is weer b3a.txt. Dit script genereert de webmaster@<groepering>.hcc.nl alias die een variabel aantal target mailboxen kent. Ook wordt altijd de secretaris toegevoegd. In het geval dat er helemaal géén webmaster is aangemeld komt de mail dus tenminste in de mailbox van de secretaris. Bron bestand is natuurlijk weer b3a.txt.
gen_x_<func>_alias
Deze scripts genereren een alias die alle voorzitters, secretarissen, penningmeesters, webmasters, gewone bestuursleden en kernleden als target hebben. Deze aliases worden zelden gebruikt, maar voorzien erin om alle penningmeesters uit te nodigen voor een penm. overleg. De script zijn nagenoeg identiek. Zoals altijd zijn de target adressen mailboxen (herkenbaar aan het lidnummer). Bron bestand is b3a.txt.
gen_kader_alias
Dit script genereert de fff_kader@kader.hcc.nl en fff_bestuur@kader.hcc.nl aliases. Voor de eerste wordt husers gebruikt (code 5); de tweede is slechts een alias naar x_voorz, x_secr, x_penm, x_bestl. Beide aliases bevatten ook email adressen van mensen op kantoor in Haarlem. Deze zijn hardcoded in het script.
gen_domain en gen_domain2
Deze scripts genereren de hobbynet domeinen voor de domeinen in husers in de tabel domain; voor de kadernet domeinen wordt domain2 aangemaakt. Voor kadernet wordt kader.hobby.nl vervangen door kader.hcc.nl. Ook hier geldt weer dat de domain tabel beheerbaar is in PostfixAdmin en dat domain2 tabel niet zichtbaar is in PostfixAdmin maar door de UNION ALL constructie zien domain en domain2 eruit als één tabel voor de applicaties.
gen_sidn_domain (vervangen door gen_hobbynet_domain)
Dit script vulde de SQL voor de domain tabel aan met de domeinen zoals die bij SIDN bekend zijn. Gebruikt werd de .csv file die op de SIDN deelnemers pagina aangevraagd kan worden. Dit is nog een probeersel want die lijst is niet compleet. We hebben ook domeinen bij EuroDNS en elders staan. Waarschijnlijk is een met de hand bijgehouden file beter die eenmalig uit named.conf.local wordt gemaakt. Daar staan n.l. alle domeinen in waar wij iets voor doen. Die moeten dan gecontroleerd worden aan de hand van MX records want als wij geen destination of backup zijn hoeft het domein niet opgenomen te worden. Dit pleit voor een platte file met alle relevante domein informatie bij elkaar.
gen_hobbynet_domain
Dit script is de opvolger van gen_sidn_domain. Bron bestand is dusers; een .csv dump van een Excel sheet. Het script voegt uitsluitend records toe aan de domain tabel die betrekking hebben op de Hobbynetleden met eigen, door HCC!Hobbynet beheerde, domeinen. Het bronbestand is met de hand bij te houden maar daar het niet vaak veranderd (alleen bij wijzigingen in de gehostte domeinen) is het ook mogelijk de Excel file bij te houden. Beter is via PostfixAdmin te werken en geregeld een database dump te maken van (tenminste) de domain tabel.
Ook worden uit een platte tekst file de (met de hand beheerde) alias_domains toegevoegd. De layout van de tekst file is simpel: alias_domain, target_domain. Voorbeeld:
# list of alias_domains # mirror.tld,target.tld # hccm.nl,modelbaan-gg.hcc.nl hcc-modelbaan.nl,modelbaan-gg.hcc.nl hcc-games.nl,games-gg.hcc.nl hcc-clan.nl,games-gg.hcc.nl
Opm: Het alias_domain modelbaan.hcc.nl wordt automatisch gegenereerd (door -gg/afd-/cg- weg te laten) en mag dus NIET in de platte tekst file staan.