Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    how does pfS keep track of services for packages?

    Scheduled Pinned Locked Moved Development
    4 Posts 2 Posters 622 Views 2 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • C Offline
      coreybrett
      last edited by

      I have the following...

      zerotier.xml

      <?xml version="1.0" encoding="utf-8" ?>
      <!DOCTYPE packagegui SYSTEM "../schema/packages.dtd">
      <?xml-stylesheet type="text/xsl" href="../xsl/package.xsl"?>
      <packagegui>
      	<name>zerotier</name>
      	<title>Zerotier</title>
      	<include_file>/usr/local/pkg/zerotier.inc</include_file>
      	<menu>
      		<name>Zerotier</name>
      		<section>VPN</section>
      		<url>/zerotier.php</url>
      	</menu>
      	<service>
      		<name>zerotier</name>
      		<rcfile>zerotier</rcfile>
      		<executable>zerotier-one</executable>
      		<description>Zerotier Daemon</description>
      	</service>
      	<custom_php_global_functions></custom_php_global_functions>
      	<custom_php_install_command>
      		zerotier_install();
      	</custom_php_install_command>
      	<custom_php_deinstall_command>
      		zerotier_deinstall();
      	</custom_php_deinstall_command>
      	<custom_add_php_command></custom_add_php_command>
      	<custom_add_php_command_late></custom_add_php_command_late>
      	<custom_delete_php_command></custom_delete_php_command>
      	<custom_php_resync_config_command>
      		zerotier_sync();
      	</custom_php_resync_config_command>
      	<start_command>
      	</start_command>
      	<process_kill_command>
      		zerotier_kill();
      	</process_kill_command>
      </packagegui>
      

      zerotier.inc

      <?php
      /*
      *
      */
      require_once("config.inc");
      require_once("interfaces.inc");
      require_once("globals.inc");
      require_once("services.inc");
      require_once("service-utils.inc");
      require_once("util.inc");
      function zerotier_sync() {
      	global $config;
      	if (is_service_running("zerotier")) {
      		stop_service("zerotier");
      	}
      	if ($config['installedpackages']['zerotier']['enabled'] == 'true') {
      		start_service("zerotier");
      	}
      }
      function zerotier_install() {
      	global $config;
      	$config['installedpackages']['zerotier']['enabled'] = 'false';
      	$config['installedpackages']['zerotier']['experimental'] = 'false';
      	$zerotier = <<<EOD
      #!/bin/sh
      # $FreeBSD: head/net/zerotier/files/zerotier.in 454856 2017-11-24 23:17:50Z dbaio $
      #
      # PROVIDE: zerotier
      # REQUIRE: NETWORKING
      # BEFORE: SERVERS
      # KEYWORD: shutdown
      #
      # Add these lines to /etc/rc.conf.local or /etc/rc.conf
      # to enable this service:
      #
      # zerotier_enable (bool):       Set to NO by default.
      #                               Set it to YES to enable zerotier.
      . /etc/rc.subr
      name=zerotier
      rcvar=zerotier_enable
      pidfile="/var/db/\${name}-one/\${name}-one.pid"
      load_rc_config \${name}
      command="/usr/local/sbin/\${name}-one"
      command_args="-d"
      run_rc_command "$1"
      EOD;
      	$fd = fopen("/usr/local/etc/rc.d/zerotier", "w");
      	fwrite($fd, $zerotier);
      	fclose($fd);
      	chmod("/usr/local/etc/rc.d/zerotier", 0555);
      	$fd = fopen("/etc/rc.conf.local", "a");
      	fwrite($fd, "zerotier_enable=\"YES\"\n");
      	fclose($fd);
      	$file_contents = file_get_contents("/etc/inc/util.inc");
      	$file_contents = preg_replace('/(\^enc\|)/', "^zt|$1", $file_contents);
      	file_put_contents("/etc/inc/util.inc", $file_contents);
      	write_config("[zerotier] Package installed.");
      }
      function zerotier_deinstall() {
      	exec("killall zerotier-one");
      	$file_contents = file_get_contents("/etc/rc.conf.local");
      	$file_contents = str_replace("zerotier_enable=\"YES\"\n","",$file_contents);
      	file_put_contents("/etc/rc.conf.local",$file_contents);
      	$file_contents = file_get_contents("/etc/inc/util.inc");
      	$file_contents = preg_replace('/\^zt\|(\^enc\|)/', "$1", $file_contents);
      	file_put_contents("/etc/inc/util.inc", $file_contents);
      }
      function zerotier_kill() {
      	if (is_service_running("zerotier")) {
      		stop_service("zerotier");
      		// exec("killall zerotier-one");
      	}
      }
      function zerotier_start() {
      	if ($config['installedpackages']['zerotier']['enabled'] == 'true') {
      		if (!is_service_running("zerotier")) {
      			start_service("zerotier");
      		}
      	}
      }
      
      ?>
      

      Right now, the services status page shows the Zerotier service as always running, regardless of weather the daemon is actually alive or not. How would I fix that?

      1 Reply Last reply Reply Quote 0
      • C Offline
        coreybrett
        last edited by

        https://github.com/coreybrett/pfSense-pkg-zerotier

        1 Reply Last reply Reply Quote 0
        • C Offline
          coreybrett
          last edited by

          Would this be a pfS or FreeBSD question?

          1 Reply Last reply Reply Quote 0
          • F Offline
            full_dutch
            last edited by

            You can use the functions in this file to create a service. That same file also has the functions that are used to determine the status of a service. Avahi example

            1 Reply Last reply Reply Quote 0
            • First post
              Last post
            Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.