MassConf

Aus OrgaMon Wiki
Version vom 25. August 2025, 15:39 Uhr von OrgaMon (Diskussion | Beiträge) (→‎Freepascal Consolen Programm)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Freepascal Consolen Programm

  1. Das Programm liesst ablagen.conf (Template) und ablagen.csv (Datei wird manuell erstellt) (Datenbank)
  2. Für jeden Datensatz in der .csv wird eine Konfigurations Datei geschrieben
  3. ablagen.conf wird gelesen, vor dem Doppelpunkt werden Parameter gesetzt und Befehle ausgeführt
  4. Nach dem Doppelpunkt werden alle ~Spaltenüberschriften~ der .csv in den jeweiligen Wert umgesetzt
  5. die Konfiguration wird nach sites-enabled gespeichert


program massConf;

{$mode objfpc}{$H+}

uses
 Classes, SysUtils, Unix;


function split(s:string; Delimiter:string=';'):TStringList;
var
 n : Integer;
begin
 result := TStringList.create;
 repeat
  n := pos(Delimiter,s);
  if (n>0) then
  begin
   result.add( copy(s,1,pred(n)));
   s := copy(s,succ(n),MaxInt);
  end else
  begin
   result.add(s);
   break;
  end;
 until false;
end;

var
 sHeaders : TStringList;
 sValues : TStringList;

const
 Param = 'ablagen';


function eval(s:string):string;
var
 n,m : Integer;
begin
 if (pos('~',s)>0) then
 begin
  for n := 0 to pred(sHeaders.count) do
  begin
   m := pos('~'+sHeaders[n]+'~',s);
   if (m>0) then
   begin
    s :=
     copy(s,1,pred(m)) +
     sValues[n] +
     copy(s,m+length(sHeaders[n])+2,MaxInt);
    if (pos('~',s)=0) then
     break;
   end;
  end;
 end;
 result := s;
end;

var
 sConf : TStringList;
 sParameter : TStringList;
 sTemplate : TStringList;
 sOutPut : TStringList;
 sData : TStringList;
 sCopy : TStringList;
 n,m : Integer;
 StartDataFlag : boolean;

 // Parameter
 pOutput : string;

begin
 sConf := TStringList.create;
 sConf.loadfromFile(Param+'.conf');

 StartDataFlag := false;
 sTemplate := TStringList.create;
 sParameter := TStringList.create;
 for n := 0 to pred(sConf.count) do
 begin
  if StartDataFlag then
  begin
   sTemplate.add(sConf[n]);
  end else
  begin
   if (pos('#',sConf[n])<>1) then
     sParameter.add(sConf[n]);
  end;
  if not(StartDataFlag) then
   if (sConf[n]=':') then
    StartDataFlag := true;
 end;
 sConf.free;

 // Load the parameter, more to come
 pOutPut := sParameter.values['Output'];

 sData := TStringList.create;
 sData.loadfromFile(Param+'.csv');

 sHeaders := split(sData[0]);

 for n := 1 to pred(sData.count) do
 begin

  // prepare Data
  sValues := split(sData[n]);

  // assume [0] is speakfull
  write( sValues[0] + ' ... ' );

  // Dateien sicherstellen?
  for m := 0 to pred(sParameter.count) do
   if (pos('cp ',sParameter[m])=1) then
   begin
    sCopy := split(eval(sParameter[m]),' ');
    if not(FileExists(sCopy[2])) then
     fpsystem('cp '+sCopy[1]+' '+sCopy[2]);
    sCopy.free;
   end;

  // Template ausbelichten
  sOutPut := TStringList.create;
  for m := 0 to pred(sTemplate.count) do
   sOutPut.add( eval(sTemplate[m]));
  sOutPut.saveToFile(eval(pOutPut));
  sOutPut.free;

  // unprepare
  sValues.free;

  writeln('OK');

 end;

 sData.free;
 sHeaders.free;
 sTemplate.free;
 sParameter.free;

end.

Template für http

  • ablagen.conf
#
# Konfigurations-Template für nginx für Internet-Ablagen
# - für die alten Ablagen -
#
Output=/etc/nginx/sites-enabled/~Name~.orgamon.de
cp /srv/ftp/favicon.ico /srv/ftp/~Name~/favicon.ico

:

server {

        listen 80;

        root /srv/ftp/~Name~;
        server_name 
               ~Name~.orgamon.de 
               ~Name~.netzumbau.de
               ~Name~.websrv.lummerland;
        auth_basic "~Name~";
        auth_basic_user_file /srv/ftp/~Name~/.htpasswd;

        index index.php;
        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                index index.php index.html;
                try_files $uri $uri/ =404;
        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        }

}

Template für https

#
# Konfigurations-Template für nginx für Internet-Ablagen
#
Output=/etc/nginx/sites-enabled/~Name~.orgamon.org
cp /srv/ftp/favicon.ico /srv/ftp/~Name~/favicon.ico

:

server {

        listen 443 ssl http2;
        ssl_protocols TLSv1.2;

        root /srv/ftp/~Name~;

        index index.php;

        server_name ~Name~.orgamon.org;

        ssl_certificate /etc/letsencrypt/live/orgamon.org/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/orgamon.org/privkey.pem;

        auth_basic "~Name~";
        auth_basic_user_file /srv/ftp/~Name~/.htpasswd;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                index index.php index.html;
                try_files $uri $uri/ =404;
        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        }

}

Liste der Server

  • ablagen.csv
Name;FTP;ZIP
subdomain1;***;***
subdomain2;***;***