.. _techguide-installation-vanilla:vanilla_installation: Vanilla Installation ==================== .. _techguide-installation-vanilla:vanilla_installation-requirements: Requirements ------------ The latest stable **GNU Health** Hospital Management component uses these resources: * Operating system: GNU/Linux or BSD family (FreeBSD, openBSD, ...) for the server. * RDBMS Database: :wikipedia:`PostgreSQL` **>= 12.x** * :wikipedia:`Python`: **>= 3.6** (highly recommended => 3.9) * :wikipedia:`uWSGI`: **>= 2.0** * :wikipedia:`Tryton` |tryton_version| * :wikipedia:`Bash console ` * PIP for **Python3** .. _techguide-installation-vanilla:vanilla_installation-errata: Errata ------ Before you continue, please read the :ref:`appendix-errata:errata` chapter for the latest issues involved the installation or upgrade procedure. .. _techguide-installation-vanilla:vanilla_installation-installing_gnu_health_on_gnu/linux_and_freebsd: Installing GNU Health on GNU/Linux and FreeBSD ---------------------------------------------- .. _techguide-installation-vanilla:vanilla_installation-installing_gnu_health_on_gnu/linux_and_freebsd-operating_system_requirements: Operating System requirements ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The following table contains the instructions to setup your operating system for a standard GNU Health installation. The operating systems and their version shown in the list have been tested using the instructions for each OS. The installation instructions for the different operating systems and distributions have been done on a fresh installation. For simplicity's sake, the server environment was installed without a GUI. No firewall was configured (we will cover this on the security section), and OpenSSH server was installed. The instructions – written here – have been applied and verified with the following operating systems as shown below. .. warning:: Verify that you are using the operating system version documented on the following table .. list-table:: :widths: 25 25 25 10 :header-rows: 1 * - Operating System - Version - Link - Notes * - FreeBSD - FreeBSD 14.0 - :ref:`appendix-opsystem:operating_system-specific_notes-freebsd` - * - Debian - 12 (Bookworm) - :ref:`appendix-opsystem:operating_system-specific_notes-debian` - * - Void Linux - Rolling - :ref:`appendix-opsystem:operating_system-specific_notes-void_linux` - * - PureOS - 10.3 (Byzantium) - :ref:`appendix-opsystem:operating_system-specific_notes-pureos` - * - openSUSE - Leap 15.5 - :ref:`appendix-opsystem:operating_system-specific_notes-opensuse` - * - Ubuntu - 22.04 LTS - :ref:`appendix-opsystem:operating_system-specific_notes-ubuntu` - .. _techguide-installation-vanilla:vanilla_installation-installing_gnu_health_on_gnu/linux_and_freebsd-encrypting_the_gnuhealth_database_and_attachment_filesystem: Encrypting the GNUHealth database and attachment filesystem ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The data stored in the database and attachment directory should be encrypted. You can encrypt the filesystems containing the PostreSQL datafiles (PGDATA) and the gnuhealth administrator $HOME directory. The attachment directory is specified by the "path" entry on the trytond.conf file, and it defaults to "/home/gnuhealth/attach"). It's advisable that you use block device encryption, such as :wikipedia:`LUKS ` in GNU/Linux. If you use :wikipedia:`ZFS` (most BSD systems), it delivers native filesystem encryption. .. _techguide-installation-vanilla:vanilla_installation-installing_gnu_health_on_gnu/linux_and_freebsd-setting_up_network_time_protocol_(ntp): Setting up Network Time Protocol (NTP) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ In order to properly run GNU Health, you need to make sure that the time on both the server (database and central instance) and clients are properly set and in sync. The best way to do this is to keep your clock synchronized with a :wikipedia:`NTP Server ` . This is a critical step, not only for the smooth functioning of GNU Health, but also because many documents will have a timestamp associated with them that can have legal value. .. _techguide-installation-vanilla:vanilla_installation-installing_gnu_health_on_gnu/linux_and_freebsd-creating_the_operating_system_user: Creating the Operating System User ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. warning:: Do this step only if you **didn't** create the user during the installation of the operating system. The following steps will create the GNU Health operating system user. Please note that many operating systems give you the option to create a regular user at installation time. If you already created the "gnuhealth" operating system user, you can skip this section, otherwise, create it now. Run the following command **as root**: .. code-block:: console # adduser gnuhealth .. note:: If your Operating System **doesn't** include the adduser command, you can use the useradd command: .. code-block:: console # useradd -m gnuhealth .. _techguide-installation-vanilla:vanilla_installation-installing_gnu_health_on_gnu/linux_and_freebsd-verify_postgresql_authentication_method: Verify PostgreSQL authentication method ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. note:: You can **skip** this section if you made a standard installation on **FreeBSD** PostgreSQL uses different authentication methods (MD5, ident, trust ... ). Depending the Operating System, the postgreSQL server authentication method will vary. The standard GNU Health installation uses the **peer** authentication method, so you need to check the postgreSQL authentication file configuration. Locate the :code:`pg_hba.conf` file and verify that the **peer** method is set. The location of this configuration file varies across operating systems; under UNIX/Linux, the full pathname of the file can be obtained with the following command, to be executed as **root**: .. code-block:: console # su - postgres -c "psql -t -P format=unaligned -c 'show hba_file'" You may need to start the postgres server at least one time as this file may be created during first startup. An example configuration file entry specifying use of the **peer** method is given in the following line: .. code-block:: ini local all all peer The following example in particular may address issues with establishing a working database connection as reported in the context of the creation of the GNU Health database upon first use of the Tryton client (see further down; Symptom: the "Create" button is not displayed): .. code-block:: ini host all all 127.0.0.1/32 peer host all all ::1/128 peer Make sure you edit the file as user 'postgres', not root. Otherwise, postgres may have trouble reading the changed file. After any changes to the file, the postgreSQL server needs to be restarted. Many authentication errors (e.g., database connection errors) arise because of not having correctly configured this file. You can use other authentication methods, and you can adapt the tryton / GNU Health configuration file to each of them. For the sake of simplicity, we based the documentation and sample files in this book on one specific method (trust). Make sure you **restart your postgresql server**: .. code-block:: console # service postgresql restart .. _techguide-installation-vanilla:vanilla_installation-installing_gnu_health_on_gnu/linux_and_freebsd-creating_the_database_user: Creating the Database User ^^^^^^^^^^^^^^^^^^^^^^^^^^ The following command switches to the :code:`postgres` administration user and gives permissions to your newly created :code:`gnuhealth` administrator: Execute as **root**: .. code-block:: console # su - postgres -c "createuser --createdb --no-createrole --no-superuser gnuhealth" .. _techguide-installation-vanilla:vanilla_installation-installing_gnu_health_on_gnu/linux_and_freebsd-downloading_and_installing_gnu_health: Downloading and Installing GNU Health ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. warning:: Do the following steps with your newly created *gnuhealth* user, **do not** use root. .. _techguide-installation-vanilla:vanilla_installation-installing_gnu_health_on_gnu/linux_and_freebsd-running_the_gnu_health_installer: Running the GNU Health Installer ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. _techguide-installation-vanilla:vanilla_installation-installing_gnu_health_on_gnu/linux_and_freebsd-running_the_gnu_health_installer-become_user_gnuhealth: Become user gnuhealth """"""""""""""""""""" .. code-block:: console # su - gnuhealth $ cd $HOME .. _techguide-installation-vanilla:vanilla_installation-installing_gnu_health_on_gnu/linux_and_freebsd-running_the_gnu_health_installer-download_gnu_health_from_gnu.org: Download GNU Health from GNU.org """""""""""""""""""""""""""""""" .. code-block:: console :substitutions: $ wget https://codeberg.org/gnuhealth/his/releases/download/v|release|/gnuhealth-|release|.tar.gz .. _techguide-installation-vanilla:vanilla_installation-installing_gnu_health_on_gnu/linux_and_freebsd-running_the_gnu_health_installer-verify_the_package_signature: Verify the package signature """""""""""""""""""""""""""" First get the signing key if you haven't done so: .. code-block:: console $ gpg --recv-key --keyserver keyserver.ubuntu.com 0xC015E1AE00989199 The key is issued by *Luis Falcon (meanmicio at GNU) * and its fingerprint is *ACBF C80F C891 631C 68AA 8DC8 C015 E1AE 0098 9199*. This information can be seen issuing: .. code-block:: console $ gpg --with-fingerprint --list-keys 0xC015E1AE00989199 Then, verify the signature, using the matching version number for the latest. For instance, if latest GNU Health version is |release|, then Download the detached signature: .. code-block:: console :substitutions: $ wget https://codeberg.org/gnuhealth/his/releases/download/v|release|/gnuhealth-|release|.tar.gz.sig Verify the package using the detached signature. If the file is correctly validated, the output should be something like: .. code-block:: console :substitutions: $ gpg --verify gnuhealth-|release|.tar.gz.sig gnuhealth-|release|.tar.gz gpg: Signature made Sat Dec 23 22:45:42 2023 WET gpg: using RSA key ACBFC80FC891631C68AA8DC8C015E1AE00989199 gpg: Good signature from "Luis Falcon (PrecisionMed) " [ultimate] gpg: aka "Luis Falcon (GNU Health) " [ultimate] gpg: aka "Luis Falcon (GNU) " [ultimate] gpg: aka "Luis Falcon (GNU Health) " [ultimate] The important part is the *Good signature from "Luis Falcon ...."*. The WARNING means that, even if the file and signature are OK and validated correctly, you aren't trusting that key; and it's OK. You can read more about this in `The GNU Privacy Handbook, Chapter 3. Key Management `_. .. _techguide-installation-vanilla:vanilla_installation-installing_gnu_health_on_gnu/linux_and_freebsd-running_the_gnu_health_installer-uncompress_gnu_health_his_package: Uncompress GNU Health HIS package """""""""""""""""""""""""""""""""" .. code-block:: console :substitutions: $ tar xzf gnuhealth-|release|.tar.gz .. _techguide-installation-vanilla:vanilla_installation-installing_gnu_health_on_gnu/linux_and_freebsd-running_the_gnu_health_installer-change_to_the_gnu_health_installation_directory_matching_your_version: Change to the GNU Health installation directory matching your version """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" .. code-block:: console :substitutions: $ cd gnuhealth-|release| .. _techguide-installation-vanilla:vanilla_installation-installing_gnu_health_on_gnu/linux_and_freebsd-running_the_gnu_health_installer-download_the_latest_gnu_health_installer: Download the latest GNU Health installer """""""""""""""""""""""""""""""""""""""" .. code-block:: console :substitutions: $ wget -qO- https://codeberg.org/gnuhealth/his/releases/download/v|release|/gnuhealth-setup-|release|.tar.gz | tar -xzvf - .. _techguide-installation-vanilla:vanilla_installation-installing_gnu_health_on_gnu/linux_and_freebsd-running_the_gnu_health_installer-run_the_gnu_health_installer: Run the GNU Health Installer """""""""""""""""""""""""""" .. code-block:: console $ bash ./gnuhealth-setup install .. _techguide-installation-vanilla:vanilla_installation-installing_gnu_health_on_gnu/linux_and_freebsd-running_the_gnu_health_installer-enable_the_bash_environment_for_the_gnu_health_admin: Enable the BASH environment for the GNU Health admin """""""""""""""""""""""""""""""""""""""""""""""""""" Finally, enable the BASH environment for the gnuhealth user. .. code-block:: console $ source ${HOME}/.gnuhealthrc .. _techguide-installation-vanilla:vanilla_installation-installing_gnu_health_on_gnu/linux_and_freebsd-running_the_gnu_health_installer-activate_network_devices_for_the_json-rpc_protocol: Activate Network Devices for the JSON-RPC Protocol """""""""""""""""""""""""""""""""""""""""""""""""" The Tryton GNU Health server listens to localhost at port 8000, not allowing direct connections from other workstations. If necessary, enter the following: .. code-block:: console $ editconf You can edit the parameter *listen* in the :code:`[web]` section, to activate the network device so workstations in your net can connect. For example, the following block .. code-block:: ini [web] listen = *:8000 will allow to connect to the server in the different devices of your system. .. _techguide-installation-vanilla:vanilla_installation-installing_gnu_health_on_gnu/linux_and_freebsd-running_the_gnu_health_installer-setting_up_a_local_directory_for_attachments: Setting up a Local Directory for Attachments """""""""""""""""""""""""""""""""""""""""""" By default, Tryton uses a system-wide directory to store the attachments. It is advisable, in GNUHealth to keep the attachments in the *gnuhealth* user space. If necessary, edit the server configuration file trytond.conf and enter the attach directory under the :code:`[database]` section, for instance: .. code-block:: console $ editconf .. code-block:: ini [database] path = /home/gnuhealth/attach As we allowed local access for PostgreSQL we will configure the access here as UNIX socket: .. code-block:: ini [database] uri = postgresql:/// .. _techguide-installation-vanilla:vanilla_installation-installing_gnu_health_on_gnu/linux_and_freebsd-running_the_gnu_health_installer-configuring_the_log_file_(optional): Configuring the log file (optional) """"""""""""""""""""""""""""""""""" The way the server logs and tracks events is based on a log configuration file, that resides in the config directory :code:`"${GNUHEALTH_DIR}"/tryton/server/config/`. A default version is shipped, called *gnuhealth_log.conf*. If necessary, enter the following into *gnuhealth_log.conf*: .. code-block:: ini [formatters] keys: simple [handlers] keys: rotate, console [loggers] keys: root [formatter_simple] format: [%(asctime)s] %(levelname)s:%(name)s:%(message)s datefmt: %a %b %d %H:%M:%S %Y [handler_rotate] class: handlers.TimedRotatingFileHandler args: ('/home/gnuhealth/gnuhealth/logs/gnuhealth.log', 'D', 1, 30) formatter: simple [handler_console] class: StreamHandler formatter: simple args: (sys.stdout,) [logger_root] level: WARNING handlers: rotate, console In this example (and in the standard file) the log file is written in the default logs directory. You can change it to fit your specific installation. In order to use logging, you need to provide the *--logconf* option, along with the path to the log configuration file *gnuhealth_log.conf* as argument, when invoking the Tryton server in the next section (e.g. :code:`trytond --logconf "${GNUHEALTH_DIR}"/tryton/server/config/gnuhealth_log.conf`). For more information, check the following resources: * Python logging facility logging tutorial: https://docs.python.org/3/howto/logging.html#.logging-basic-tutorial * Tryton Server logging documentation: https://trytond.readthedocs.org/en/latest/topics/logs.html .. _techguide-installation-vanilla:vanilla_installation-initialize_the_database_instance: Initialize the database instance -------------------------------- Create the database .. code-block:: console $ createdb health .. note:: We use "health" as an example, choose the name of your database, but keep it short and only alphanumeric chars Change to your newly installed system (use the alias *cdexe*): .. code-block:: console $ cdexe and initialize the instance: .. code-block:: console $ python3 ./trytond-admin --all --database=health -vv You will be asked to provide a password for the "admin" user. If everything goes well, you are ready to start the GNU Health HIS node server. Start the GNU Health HIS node .. code-block:: console $ cd $ ./start_gnuhealth.sh .. note:: As mentioned in the previous section, use the ''--logconf [path]'' option to specify the path of the logging configuration You can execute the GNU Health server in the background (:code:`using nohup ./start_gnuhealth.sh &`) and check the output in the file :code:`nohup.out`. .. _techguide-installation-vanilla:vanilla_installation-creating_a_systemd_service_for_the_gnu_health_server: Creating a Systemd service for the GNU Health server ---------------------------------------------------- If you use the standard installation method, you can use the following scripts to automate the startup/stop of the GNU Health instance using systemd services. .. _techguide-installation-vanilla:vanilla_installation-creating_a_systemd_service_for_the_gnu_health_server-gnu_health_service_unit_file: GNU Health service unit file ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Create the GNU Health Unit file under :code:`/etc/systemd/system/gnuhealth.service`: .. code-block:: ini [Unit] Description=GNU Health Server After=network.target [Service] Type=simple User=gnuhealth WorkingDirectory=/home/gnuhealth ExecStart=/home/gnuhealth/start_gnuhealth.sh Restart=on-abort [Install] WantedBy=multi-user.target .. _techguide-installation-vanilla:vanilla_installation-creating_a_systemd_service_for_the_gnu_health_server-starting_and_stopping_the_gnu_health_service: Starting and Stopping the GNU Health service ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ You can issue the commands: .. code-block:: console # systemctl start gnuhealth or: .. code-block:: console # systemctl stop gnuhealth .. _techguide-installation-vanilla:vanilla_installation-creating_a_systemd_service_for_the_gnu_health_server-enable_the_service_to_start_at_boot_time: Enable the service to start at boot time ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ If you want to automatically start the GNU Health server whenever you start the operating system, you can enable the service with the following command: .. code-block:: console # systemctl enable gnuhealth .. _techguide-installation-vanilla:vanilla_installation-using_a_wsgi_server_for_gnu_health_hospital_management_component: Using a WSGI Server for GNU Health Hospital Management Component ---------------------------------------------------------------- GNU Health HIS uses by default the werkzeug server. This should be valid only for development scenarios. For production servers, GNU Health HIS will benefit from a Web Server Gateway Interface (WSGI), such as uWSGI and a web server that supports reverse proxy, as NGINX. .. _techguide-installation-vanilla:vanilla_installation-using_a_wsgi_server_for_gnu_health_hospital_management_component-your_trytond_configuration_file: Your Trytond configuration file ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Edit your trytond.conf file to meet the requirements. You can edit this file directly using the alias :code:`editconf` with the gnuhealth user. This sample enables access both to the GTK and webclient. .. code-block:: ini [database] uri = postgresql://localhost:5432 path = /home/gnuhealth/attach [web] listen = localhost:8000 root = /home/gnuhealth/sao/package .. _techguide-installation-vanilla:vanilla_installation-using_a_wsgi_server_for_gnu_health_hospital_management_component-uwsgi_configuration_file: uWSGI configuration file ^^^^^^^^^^^^^^^^^^^^^^^^ This is a sample for the gnuhealth uwsgi .ini (:code:`gh.ini`) file. Make sure NINGX user has the appropriate permissions to the uwsgi socket. .. code-block:: ini [uwsgi] master = true processes = 5 plugins = python3 socket = /tmp/uwsgi.sock chmod-socket=660 module=trytond.application:app .. _techguide-installation-vanilla:vanilla_installation-using_a_wsgi_server_for_gnu_health_hospital_management_component-configuring_nginx_as_a_reverse_proxy_for_gnu_health_his: Configuring NGINX as a reverse proxy for GNU Health HIS ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ In this sample, NINGX will listen to 8100 in HTTPS mode, to requests coming from the web clients. It also listens to port 8000 for the native GTK client. .. code-block:: nginx # Virtual host for demo web client using TLS and listening in 8100 server { listen 8100 ssl; server_name your_hostname; ssl_certificate /path/to/your/gnuhealth.crt; ssl_certificate_key /path/to/your/gnuhealth.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { include uwsgi_params; uwsgi_pass unix:/tmp/uwsgi.sock; } } # Virtual host for GNU Health GTK Client on 8000 server { listen 8000; location / { include uwsgi_params; uwsgi_pass unix:/tmp/uwsgi.sock; } } .. _techguide-installation-vanilla:vanilla_installation-using_a_wsgi_server_for_gnu_health_hospital_management_component-putting_everything_together_and_booting_the_gnu_health_server: Putting everything together and booting the GNU Health Server ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Once you have configured the three elements (Trytond server, uwsgi and NGINX) is time to put in into production * Make sure your NGINX server is running: * Start uWSGI with the corresponding gnuhealth .ini file: .. code-block:: console $ uwsgi $HOME/gh.ini --enable-threads & .. _techguide-installation-vanilla:vanilla_installation-installation_of_the_gnu_health_client: Installation of the GNU Health Client ------------------------------------- .. _techguide-installation-vanilla:vanilla_installation-installation_of_the_gnu_health_client-gnu_health_client_installation_with_pip3: GNU Health Client installation with pip3 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Install the system requirements for your operating system. To do so follow the instructions under :ref:`appendix-opsystem:operating_system-specific_notes` -> Your operating system -> 'Requirements for GTK client'. * Update PATH. To make changes permanent, add this line in :code:`$HOME/.bashrc` .. code-block:: console $ export PATH=$HOME/.local/bin:$PATH * Reload the updated BASH environment: .. code-block:: console $ source $HOME/.bashrc * If using Python3.11 or newer (e.g. on Debian 12) see :ref:`appendix-opsystem:operating_system-specific_notes-debian-allow_local_pip_installation` in order to allow user wide pip installation. * Update pip3 .. code-block:: console $ pip3 install --upgrade --user pip * Install GNU Health client .. code-block:: console $ pip3 install --user --upgrade gnuhealth-client The following command will boot your GNU Health client: .. code-block:: console $ gnuhealth-client .. _techguide-installation-vanilla:vanilla_installation-installation_of_the_gnu_health_client-alternative_methods: Alternative Methods ^^^^^^^^^^^^^^^^^^^ .. _techguide-installation-vanilla:vanilla_installation-installation_of_the_gnu_health_client-alternative_methods-system_packages: System Packages """"""""""""""" Instead from source as described above, you can install the GNU Health Client from pre-build packages as well. openSUSE offer packages that you can install with your systems package manager. Make sure you get the current gnuhealth-client version |version|. .. _techguide-installation-vanilla:vanilla_installation-installation_of_the_gnu_health_client-alternative_methods-microsoft_windows_and_macos: Microsoft Windows and macOS """"""""""""""""""""""""""" .. note:: As GNU Health is free/libre software, developed primarily for free/libre operating systems and with the philosophy of free software in mind, it is recommended to use free/libre software with GNU Health, and GNU/Linux or other free/libre operating system for the client. The development of all GNU Health components (server, client, plugins, Thalamus, GNU Health Federation) is done and focused on Free / Libre operating systems. If you use Microsoft Windows or macOS, you can try using the Tryton |tryton_version| client, which may be compatible with GNU Health |version|. Keep in mind that the windows client does not have the GNU Health commands, nor the plugins like GNU Health GNUPG crypto or GNU Health Camera and Federation Resource Locator. `Download the Tryton client executable (Windows) `_ and follow the instructions. .. _techguide-installation-vanilla:vanilla_installation-logging_into_the_application: Logging into the Application ---------------------------- Now that you're back at the login screen, you'll notice that the selected profile is the one you've just created. Fill in the login form: * User name: the one you used previously (usually :code:`admin`) * Password: the one entered twice in the previous section Login credentials for The Demo database: :ref:`userguide-demodb:using_the_demo_database-online_community_servers-gnu_health_federation_community_hub-connection_to_the_gnu_health_his_and_lims` .. _techguide-installation-vanilla:vanilla_installation-installing_the_default_modules: Installing the Default Modules ------------------------------ From this point on, you will use the client for almost every process. Start with the installation of the basic functionality: #. After you've created the database, the system will ask you to create some new users. You can skip this step for now. #. You are then presented with a list of modules that will provide the functionality you desire. If you don't see the *Modules* window, navigate to it on the left side: *Administration → Modules → Modules*. #. Select the :code:`health_profile` module, and click on **Mark for installation**. #. Click on the **Action** icon and select **Perform Pending Installation/Upgrade**: #. Tryton will automatically select all the dependent modules required for the installation: #. Click on **Start Upgrade**. This process will take a while, depending on the computer where GNU Health is being installed on. Once it's done, the following message appears. .. _techguide-installation-vanilla:vanilla_installation-creating_a_company: Creating a Company ------------------ The next thing you need to do is to create the initial company, that will be your health center. You will be presented with a wizard to create it. Press :code:`F3` to create a new company. .. note:: At the party form, please make sure you **set the institution attribute**. You will link this company to your main health institution later on. Please refer to the screenshot provided in this section for details. .. _techguide-installation-vanilla:vanilla_installation-disabling_demo_users_in_production_environments: Disabling demo users in production environments ----------------------------------------------- .. warning:: For security reasons, you **must** deactivate demo users in production environments. GNU Health comes with a set of pre-defined users for demo purposes. They all have the prefix :code:`demo_` (:code:`demo_doctor`, :code:`demo_front_desk`, :code:`demo_nurse`... ). To deactivate the users: #. Navigate to Administration > Users > Users in the sidebar. #. In filters, choose :code:`Login: demo_` and :code:`Active: True` #. Unset the "active" flag of each of them (untick the "Active" boxes). The demo users are now de-activated in your environment. Look at the screenshot captioned *Deactivation of demo users in production environments* for an example (the Active checkboxes haven't been unticked). .. _techguide-installation-vanilla:vanilla_installation-customizing_the_gnu_health_client: Customizing the GNU Health Client --------------------------------- For GNU/Linux and other free operating systems, the GNU Health GTK client configuration file can be found at: .. code-block:: console $HOME/.config/gnuhealth//gnuhealth-client.conf For example: .. code-block:: console :substitutions: $HOME/.config/gnuhealth/|version|/gnuhealth-client.conf .. _techguide-installation-vanilla:vanilla_installation-customizing_the_gnu_health_client-using_a_custom_greeter_/_banner: Using a custom greeter / banner ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ You can customize the login greeter banner to fit your institution. In the section :code:`[client]`, include the banner parameter with the absolute path of the png file. Something like: .. code-block:: ini [client] banner = /home/yourlogin/myhospitalbanner.png The default resolution of the banner is 500 x 128 pixels. Adjust yours to approximately this size. .. _techguide-installation-vanilla:vanilla_installation-completion: Completion ---------- Congratulations! You have completed the initial installation of GNU Health. In the next chapter we will discuss how to add functionality by installing additional modules.