# Installing XDS server Depending of your configuration, this step is necessary or not. In other words **you are a developer and plan to use/connect to an existing `xds-server`** running on your local network (On-Premise config) or in the Cloud (SaaS config), **you don't need to install the server part and you can skip this step**. For others (standalone config or administrators that want to install an On-Premise solution) xds-server must be installed. Several installation types are supported : | Install type | Supported OS | Section to refer | |--------------|--------------|------------------| | Container | Linux or MacOS | [see Installation based on Docker container](#installation-based-on-docker-container) | | Virtual Machine | Linux, MacOS or Windows | [see Installation based on VirtualBox appliance](#installation-based-on-virtualbox-appliance) | | Native | Linux | [see Native installation](#native-installation) | ## Installation based on Docker container ### Prerequisites Docker is installed on the host machine, please refer to [Docker documentation](https://docs.docker.com/engine/installation/) for more details. ### Get the container Load the pre-build AGL SDK docker image including `xds-server`: ```bash seb@laptop ~$ wget -O - http://iot.bzh/download/public/2017/XDS/docker/docker_agl_worker-xds-latest.tar.xz | docker load ``` You should get `docker.automotivelinux.org/agl/worker-xds:X.Y` image ```bash # List image that we just load seb@laptop ~$ docker images "docker.automotivelinux.org/agl/worker-xds*" docker.automotivelinux.org/agl/worker-xds 4.0 786d65b2792c 6 days ago 654MB ``` ### Create and start a new container Use provided script to create a new docker container and start it: ```bash # Get script seb@laptop ~$ wget https://raw.githubusercontent.com/iotbzh/xds-server/master/scripts/xds-docker-create-container.sh # Create new XDS worker container seb@laptop ~$ bash ./xds-docker-create-container.sh # Check that new container is running seb@laptop ~$ docker ps | grep worker-xds b985d81af40c docker.automotivelinux.org/agl/worker-xds:3.99.1 "/usr/bin/wait_for..." 6 days ago Up 4 hours 0.0.0.0:8000->8000/tcp, 0.0.0.0:69->69/udp, 0.0.0.0:10809->10809/tcp, 0.0.0.0:2222->22/tcp agl-xds-seb@laptop-0-seb ``` Note that you can also add a new shared directory using `--volume` option in order to use for example with Path-Mapping folder type. ```bash # Create new XDS worker container and share extra '$HOME/my-workspace' directory seb@laptop ~$ bash ./xds-docker-create-container.sh --volume /my-workspace:$HOME/my-workspace ``` ### Check if xds-server is running `xds-server` is automatically started as a service on container startup. To check if xds-server is correctly install and running, you can access the basic web page that gives you some instructions: ```bash # if container is running on your local host # (else replace localhost by the name or the ip of the machine running the container) seb@laptop ~$ xdg-open http://localhost:8000 ``` `xds-server` is now up and running, you can now install AGL SDKs, please refer to next chapter named [Installing AGL SDKs](3_install-sdks.md#installing-agl-sdks) ### Container settings This container (ID=0) exposes following ports: - 8000 : `xds-server` to serve XDS basic web page - 69 : TFTP - 2222 : ssh This container also creates the following volumes (sharing directories between inside and outside docker): | Directory on host | Directory inside docker | Comment | |-------------------|-------------------------|---------| | $HOME/xds-workspace | /home/devel/xds-workspace | XDS projects workspace location| | $HOME/xds-workspace/.xdt_0 | /xdt | location to store SDKs | | $USER_VOLUME | $USER_VOLUME | user path, see `--volume` option of `xds-docker-create-container.sh` script | Please refer to [part 2 - xds-server](../part-2/1_xds-server.md) documentation for additional info. ## Installation based on VirtualBox appliance _coming soon ..._ ## Native installation You can chose to install xds-server 'natively' instead of within a docker container but note that only Linux host OSes are supported and tested for native installation ! ### Install packages for debian distro type ```bash # 'DISTRO' can be set to { xUbuntu_16.04, xUbuntu_16.10, xUbuntu_17.04, Debian_8.0, Debian_9.0} seb@laptop ~$ export DISTRO="xUbuntu_16.04" seb@laptop ~$ wget -O - http://download.opensuse.org/repositories/isv:/LinuxAutomotive:/app-Development/${DISTRO}/Release.key | sudo apt-key add - seb@laptop ~$ sudo bash -c "cat >> /etc/apt/sources.list.d/AGL.list < **Optional step**: skip this chapter if you want to use keep default settings When `xds-server` is started as a systemd service, default environment variables are set into `/etc/default/xds-server` file. `xds-server` configuration is also driven by a JSON config file (`server-config.json`), and default JSON config is `/etc/xds/server/server-config.json`. **Note:** you can use your own JSON config by settings `APP_CONFIG` variable of `/etc/default/xds-server` file to your file, for example `/home/MYUSER/.xds/server/server-config.json` Supported fields in JSON configuration file are : - **httpPort** : HTTP port of client webapp/REST API - **webAppDir** : location of client web application (default: webapp/dist) - **shareRootDir** : root directory where projects will be copied - **logsDir** : directory to store logs (eg. syncthing output) - **sdkRootDir** : root directory where cross SDKs are installed - **syncthing.binDir** : syncthing binaries directory (default: executable directory) - **syncthing.home"** : syncthing home directory (usually .../syncthing-config) - **syncthing.gui-address** : syncthing gui url (default ) - **syncthing.gui-apikey** : syncthing api-key to use (default auto-generated) All fields are optional and example below corresponds to the default values: ```json { "httpPort": 8000, "webAppDir": "webapp/dist", "shareRootDir": "${HOME}/.xds/server/projects", "logsDir": "/tmp/logs", "sdkRootDir": "/xdt/sdk", "syncthing": { "binDir": "./bin", "home": "${HOME}/.xds/server/syncthing-config", "gui-address": "http://localhost:8385", "gui-apikey": "123456789", } } ``` >**Note:** environment variables are supported by using `${MY_VAR}` syntax. ### Start/Stop xds-server `xds-server` can be managed as a systemd service with the following commands: ```bash # Status XDS server: seb@laptop ~$ systemctl --user status xds-server.service # Stop XDS server seb@laptop ~$ systemctl --user stop xds-server.service # Start XDS server seb@laptop ~$ systemctl --user start xds-server.service # Get XDS server logs seb@laptop ~$ systemctl --user --unit=xds-server.service --output=cat ``` To check if xds-server is correctly install and running, you can access the web interface, using a web browser : ```bash seb@laptop ~$ xdg-open http://localhost:8000 ``` or get the current version using the following curl command: ```bash seb@laptop ~$ curl http://localhost:8000/api/v1/version ```