# Installing XDS server
Depending of your configuration, this step is necessary or not.
IOW **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](#docker_container) |
| Virtual Machine | Linux, MacOS or Windows | [see Installation based on VirtualBox appliance](#vbox_appliance) |
| Native | Linux | [see Native installation](#native) |
## 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
```
### 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 web
interface, what we call the "Dashboard", using a web browser :
```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
```
### Container settings
This container (ID=0) exposes following ports:
- 8000 : `xds-server` to serve XDS Dashboard
- 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/ssd/xdt_0 | /xdt | location to store SDKs |
| $HOME/devel/docker/share |/home/devel/share | another shared directory |
Please refer to **part 2 - xds-server** documentation for additional info.
## Installation based on VirtualBox appliance
_coming soon ..._
## Native installation
Only Linux host OS is 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 <
>**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/config.json`
Supported fields in JSON configuration file are :
- **httpPort** : HTTP port of client webapp / dashboard
- **webAppDir** : location of client dashboard (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 http://localhost:8384)
- **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:8384",
"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 ~$ sudo systemctl status xds-server.service
# Stop XDS server
seb@laptop ~$ sudo systemctl stop xds-server.service
# Start XDS server
seb@laptop ~$ sudo systemctl start xds-server.service
# Get XDS server logs
seb@laptop ~$ sudo journalctl --unit=xds-server.service --output=cat
```
To check if xds-server is correctly install and running, you can access the web
interface, what we call the "Dashboard", using a web browser :
```bash
seb@laptop ~$ xdg-open http://localhost:8000
```