From SME Server
Jump to navigationJump to search
PythonIcon.png Skill level: Developer
Risk of inconsistencies with Koozali SME Server methodology, upgrades & functionality is high. One must be knowledgeable about how changes impact their Koozali SME Server. Significant risk of irreversible harm.


esmith::Build::CreateLinks - A library for creating symlinks during rpm construction.

In a root terminal you can do the command below if you want to display the up-to-date content

perldoc esmith::Build::CreateLinks


use esmith::Build::CreateLinks qw(:all);
safe_symlink("../../../functions/$function", "$cgibin/$function")

the beginning is always the same. The createlinks is a file who add during the built of rpm all correct link to different events and services.

#!/usr/bin/perl -w
use esmith::Build::CreateLinks qw(:all);



This function works like symlink(), but if the directory being linked to does not exist, it will create it.

ie. safe_symlink("../../../functions/$function", "$cgibin/$function")

  • links to add (other templates are available in /etc/e-smith/templates-default/)

You don't have to create the file /etc/e-smith/templates/etc/test/db.php/template-begin, it is automatic if needed. You simply have to link to the correct template you want (it depends of your software language). You don't need this safe_symlink if the default template is correct for you.

   safe_symlink("/etc/e-smith/templates-default/template-begin-php", "root/etc/e-smith/templates/etc/test/db.php/template-begin");
   safe_symlink("/etc/e-smith/templates-default/template-end-php", "root/etc/e-smith/templates/etc/test/db.php/template-end");

or another utilisation, do a link to an event already existing

                              existing event                                     new event linked to the other event
safe_symlink("/etc/e-smith/events/bootstrap-console-save/templates2expand", "root/etc/e-smith/events/service-expand/templates2expand");

or if you want to do a link to an existing file

                   existing file              link in the rpm

  • service to restart on demand
for  my $event (qw(
   templates2events("/etc/httpd/conf/httpd.conf", $event);     #####expand-template on event conf-roundcube
   safe_symlink("restart", "root/etc/e-smith/events/$event/services2adjust/mysql.init");  #####restart mysqlinit on event conf-roundcube
   safe_symlink("sigusr1", "root/etc/e-smith/events/$event/services2adjust/httpd-e-smith");  #####restart httpd on event conf-roundcube

This function creates a link to a web panel.


my $panel = "manager";
panel_link("tug", $panel);

ie :

panel_link("denyhosts", "manager");

This function creates a symlink from the common manager directory to a file in the functions directory.


This function creates a symlink from an action’s ordered location in an event directory to its action script. (actions are in /etc/e-smith/events/actions/)


my $event = "tug-update";
event_link("tug-conf", $event, "10");
event_link("conf-masq", $event, "20");
event_link("adjust-masq", $event, "30");
event_link("tug-restart", $event, "40");


foreach my $event (qw/webapps-update ipasserelle-update bootstrap-ldap-save/){
 event_link("phplist-create-pseudo", "$event", "55");

  • Order of implicit actions

The implicit actions are implemented by inserting the action script generic_template_expand early in the list of actions to be run in an event and the adjust-services action near the end of the list. You should normally link your action scripts in the range S10 to S80 so that they occur after templates2expand and before services2adjust.

Important.png Note:
The generic_template_expand action is currently run at S05 and services2adjust is run at S90.


This function creates a symlink from a SysV init start or kill link in a runlevel to e-smith-service, a wrapper that is config db aware.


safe_symlink("daemontools", "root/etc/rc.d/init.d/tug");
service_link_enhanced("tug", "S85", "7");
service_link_enhanced("tug", "K25", "6");
service_link_enhanced("tug", "K25", "0");
safe_symlink("/var/service/tug/", "root/service/tug");

of course the job script needs to be in /var/service/tug (should be relevant that it needs to be named by the same name : tug)


This function creates an empty file, but first creates any enclosing directories. For example:

ie :


will create any of the directories "a", "a/b", "a/b/c" which don’t exist, then create an empty file "a/b/c/d".


This function creates a file tree (of empty files) which is used by the generic_template_expand action to determine which templates need to be expanded for a particular event. Takes one file argument and a list of event names, e.g.

templates2events("/etc/some/file", "event1", "event2", ...);

eg :

foreach my $event (qw(share-create share-modify share-delete share-modify-servers)){
  templates2events("/etc/samba/smb.conf", $event);
  templates2events("/etc/httpd/conf/httpd.conf", $event);
  templates2events("/etc/rsyncd.conf", $event);
  templates2events("/etc/proftpd.conf", $event);

could be written like that also

templates2events("/etc/e-smith/sql/init/phplistdb", qw/webapps-update bootstrap-console-save/);
templates2events("/etc/phplist/config.php", qw/webapps-update bootstrap-console-save/);

or more simply

   templates2events("/opt/roundcube/config/", console-save);

Important.png Note:
The settings below are new, waiting a release with the bug bugzilla: 8951

      This function creates a file tree (of empty files) which is used by the generic_template_expand action to determine which templates need to be expanded for a particular event. Takes one event
      argument and a list of file names, e.g.
       event_templates("$event", "/etc/some/file", "/etc/some/file2", "/etc/some/file3", ...);
# templates to expand
for my $event (qw(
event_templates ($event , "/etc/httpd/conf/httpd.conf");
event_templates ($event , "/etc/dar/DailyBackup.dcf");
event_actions($event, %actions)
      Create links to actions for the given event. %actions is a list of pairs Action => Priority. E.g
        event_actions('myevent', 'action1' => '10', 'action2' => '20', ..);
      See also event_link().
# actions to perform
for my $event (qw(
event_actions ( $event , 'wordpress' => '20', 'wordpressa' => '30' , 'wordpressb' => '40');
event_services($event, %services)
      Create links for the given $event in services2adjust/ subdirectory. %services is a list of pairs Service => LinkDestination
          event_services(’myevent’, ’sshd’ => ’restart’, ’samba’ => ’reload’) See also safe_symlink().
# services to launch on event
for my $event (qw(
event_services ( $event , "httpd-e-smith"=> 'sigusr1');
event_services ( $event , "mysql.init"=> 'restart');


SME Server Developers <>