Running the ZTPServer
=====================
.. The line below adds a local TOC
.. contents:: :local:
:depth: 1
Standalone - Change the ZTPServer Interface
-------------------------------------------
Objective
^^^^^^^^^
I only want the ZTPServer process to listen on a specific network interface.
Solution
^^^^^^^^
Open up the global ZTPServer configuration file:
.. code-block:: console
admin@ztpserver:~# vi /etc/ztpserver/ztpserver.conf
Look for the line ``interface`` in the [server] group.
.. code-block:: console
# To listen on all interfaces
interface = 0.0.0.0
# To listen on a specific interface
interface = 192.0.2.100
Restart the ztps process:
.. code-block:: console
# If running in Standalone Mode, stop ztps
admin@ztpserver:~# pkill ztps
# Then start it again
admin@ztpserver:~# ztps &
Explanation
^^^^^^^^^^^
This recipe helps you define a specific interface for the ZTPServer to listen on.
.. note:: Be sure the ``interface`` coincides with the ``server_url`` value in
the configuration file.
.. End of Standalone - Change the ZTPServer Interface
Standalone - Run ZTPServer on a Specific Port
---------------------------------------------
Objective
^^^^^^^^^
I want to define which port the ZTPServer listens on.
Solution
^^^^^^^^
Open up the global ZTPServer configuration file:
.. code-block:: console
admin@ztpserver:~# vi /etc/ztpserver/ztpserver.conf
Look for the line ``port`` in the [server] group.
.. code-block:: console
# Choose a port of your liking
port = 8080
Restart the ztps process:
.. code-block:: console
# If running in Standalone Mode, stop ztps
admin@ztpserver:~# pkill ztps
# Then start it again
admin@ztpserver:~# ztps &
Explanation
^^^^^^^^^^^
This recipe helps you define a specific port for the ZTPServer to listen on.
.. note:: Be sure the ``port`` coincides with the ``server_url`` value in
the configuration file.
.. End of Standalone - Change the ZTPServer Port
Standalone - Run ZTPServer in a Sub-directory
---------------------------------------------
Objective
^^^^^^^^^
I don't want to run the ZTPServer at the root of my domain, I want it in a
sub-directory.
Solution
^^^^^^^^
Open up the global ZTPServer configuration file:
.. code-block:: console
admin@ztpserver:~# vi /etc/ztpserver/ztpserver.conf
Look for the line ``server_url`` in the [default] group.
.. code-block:: console
# Choose a subdirectory
server_url = http://ztpserver:8080/not/in/root/anymore
Restart the ztps process:
.. code-block:: console
# If running in Standalone Mode, stop ztps
admin@ztpserver:~# pkill ztps
# Then start it again
admin@ztpserver:~# ztps &
Explanation
^^^^^^^^^^^
The ``server_url`` key defines where the REST API lives. You do not need to
change any of your file locations to affect change. Simply change the key above.
.. note:: You can confirm the change by doing a simple
``wget http://server:port/new/directory/path/bootstrap`` to retrieve
the bootstrap script.
.. End of Standalone - Run ZTPServer in a sub-directory
Apache - Run ZTPServer on a Specific Port
-----------------------------------------
Objective
^^^^^^^^^
I'm running ZTPServer as a WSGI with Apache and want to change what port it
listens on.
Solution
^^^^^^^^
Apache configurations can vary widely, and the ZTPServer has no control over this,
so view this simply as a suggestion.
Open up your Apache configuration file:
.. code-block:: console
# Apache
admin@ztpserver:~# vi /etc/apache2/sites-enabled/ztpserver.conf
# HTTPd
admin@ztpserver:~# vi /etc/httpd/conf.d/ztpserver.conf
Change the ``Listen`` and ``VirtualHost`` values to the desired port.
.. code-block:: apacheconf
LoadModule wsgi_module modules/mod_wsgi.so
Listen 8080
WSGIDaemonProcess ztpserver user=www-data group=www-data threads=50
WSGIScriptAlias / /etc/ztpserver/ztpserver.wsgi
# Required for RHEL
#WSGISocketPrefix /var/run/wsgi
WSGIProcessGroup ztpserver
WSGIApplicationGroup %{GLOBAL}
# For Apache <= 2.2, use Order and Allow
Order deny,allow
Allow from all
# For Apache >= 2.4, Allow is replaced by Require
Require all granted
# Override default logging locations for Apache
#ErrorLog /path/to/ztpserver_error.log
#CustomLog /path/to/ztpserver_access.log
Restart the ztps process:
.. code-block:: console
# Restart Apache
admin@ztpserver:~# service apache2 restart
Explanation
^^^^^^^^^^^
When you run ZTPServer as a WSGI under Apache or like server, the interface
and port that are used for listening for HTTP requests are controlled by the
web server. The config snippet above shows how this might be done with Apache,
but note that variations might arise in your own environment.
.. End of Apache - Run ZTPServer on a Specific Port
Apache - Run ZTPServer in a Sub-directory
-----------------------------------------
Objective
^^^^^^^^^
I'm running ZTPServer as a WSGI with Apache and I want to change the path that
the REST API resides.
Solution
^^^^^^^^
WSGI-compliant webserver configurations can vary widely, so here's a sample of
how this is done with Apache.
Open up the global ZTPServer configuration file:
.. code-block:: console
admin@ztpserver:~# vi /etc/ztpserver/ztpserver.conf
Look for the line ``server_url`` in the [default] group.
.. code-block:: console
# Choose a subdirectory
server_url = http://ztpserver:8080/not/in/root/anymore
You might think that you have to change your Apache conf to move this to a
sub-directory, but you don't. Your config should look like the block below.
Note the ````.
.. code-block:: apacheconf
LoadModule wsgi_module modules/mod_wsgi.so
Listen 8080
WSGIDaemonProcess ztpserver user=www-data group=www-data threads=50
WSGIScriptAlias / /etc/ztpserver/ztpserver.wsgi
# Required for RHEL
#WSGISocketPrefix /var/run/wsgi
WSGIProcessGroup ztpserver
WSGIApplicationGroup %{GLOBAL}
# For Apache <= 2.2, use Order and Allow
Order deny,allow
Allow from all
# For Apache >= 2.4, Allow is replaced by Require
Require all granted
# Override default logging locations for Apache
#ErrorLog /path/to/ztpserver_error.log
#CustomLog /path/to/ztpserver_access.log
Restart the ztps process:
.. code-block:: console
# Restart Apache
admin@ztpserver:~# service apache2 restart
Explanation
^^^^^^^^^^^
It might seem counter-intuitive but the Apache configuration should use the
``Location`` directive to point at root. The desired change to the path is done
by the ZTPServer ``server_url`` configuration value in ``/etc/ztpserver/ztpserver.conf``.
.. End of Apache - Run ZTPServer in a Sub-directory
Change ZTPServer File Ownership
-------------------------------
Objective
^^^^^^^^^
I'd like all of the ZTPServer provisioning files to be owned by a particular
user/group.
.. note:: This is most often needed when running the ZTPServer WSGI App and the
apache user is unable to read/write to ``/usr/share/ztpserver``.
Solution
^^^^^^^^
.. code-block:: console
admin@ztpserver:~# chown -R myUser:myGroup /usr/share/ztpserver
admin@ztpserver:~# chmod -R ug+rw /usr/share/ztpserver
Explanation
^^^^^^^^^^^
The shell commands listed above set ownership and permissions for the default
data_root location ``/usr/share/ztpserver``. Be mindful that if you are running
the ZTPServer WSGI App, the mod_wsgi daemon user must be able to read/write to
these files.
.. note:: When running the ZTPServer WSGI App, you should also check the
ownership and permission of ``/etc/ztpserver/ztpserver.wsgi``.
.. End of Change ZTPServer File Ownership
Apache - Configure SELinux Permissions
--------------------------------------
Objective
^^^^^^^^^
My server has SELinux enabled and I'd like to set the ZTPServer file type so
that Apache can read/write files in the data_root.
.. note:: This is most often needed when running the ZTPServer WSGI App and the
apache user is unable to read/write to ``/usr/share/ztpserver``.
Solution
^^^^^^^^
.. code-block:: console
# For Fedora - httpd
admin@ztpserver:~# chcon -Rv --type=httpd_sys_script_rw_t /usr/share/ztpserver
# For Ubuntu - Apache
admin@ztpserver:~# chcon -R -h system_u:object_r:httpd_sys_script_rw_t /usr/share/ztpserver
Explanation
^^^^^^^^^^^
The shell commands listed above set the SELinux file attributes so that Apache
can read/write to the files. This is often the case since ``/usr/share/ztpserver``
is not in the normal operating directory ``/var/www/``. Note that the commands
above are suggestions and you might consider tweaking them to suit your own
environment.
.. End of Apache - Configure SELinux Permissions