# 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-virtual-machine-appliance) | | Native | Linux | [see Native installation](#native-installation) | ## Installation based on Docker container ### 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 wget -O - http://iot.bzh/download/public/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 docker images "docker.automotivelinux.org/agl/worker-xds*" REPOSITORY TAG IMAGE ID CREATED SIZE docker.automotivelinux.org/agl/worker-xds 5.0 877979e534ff 3 hours ago 106MB ``` ### Create and start a new container Use provided script to create a new docker image and start a new container: ```bash # Get script wget -O xds-docker-create-container.sh 'https://gerrit.automotivelinux.org/gerrit/gitweb?p=src/xds/xds-server.git;a=blob_plain;f=scripts/xds-docker-create-container.sh;hb=master' # Create new XDS worker container bash ./xds-docker-create-container.sh # Check that new container is running docker ps | grep worker-xds f67079db4339 docker.automotivelinux.org/agl/worker-xds:5.0 "/usr/bin/wait_for..." About a minute ago Up 34 seconds 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-HOSTNAME-0-USERNAME ``` This container exposes following ports: | Port number | Description | |-------------|---------------------------------------------| | 8000 | `xds-server`: serve XDS webapp and REST API | | 69 | TFTP | | 2222 | ssh | This container also creates the following volumes (shared folders 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 | **Note:** You can 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 bash ./xds-docker-create-container.sh --volume /my-workspace:$HOME/my-workspace ``` You can change docker used port with `-id` option ```bash # Create new XDS worker container with a different port number bash ./xds-docker-create-container.sh -id ${ID} # Check that new container is running docker ps | grep worker-xds f67079db4339 docker.automotivelinux.org/agl/worker-xds:5.0 "/usr/bin/wait_for..." About a minute ago Up 34 seconds 0.0.0.0:(2222+ID)->22/tcp, 0.0.0.0:(69+ID)->69/udp, 0.0.0.0:(8000+ID)->8000/tcp, 0.0.0.0:(10809+ID)->10809/tcp agl-xds-HOSTNAME-ID-USERNAME ``` #### Manually setup docker user id **Note:** If you used `xds-docker-create-container.sh` script to create XDS docker container, user uid/gid inside docker has already been changed by this script. If you plan to use **path-mapping sharing type for your projects**, you need to have the same user id and group id inside and outside docker. By default user and group name inside docker is set `devel` (id `1664`). Use following commands to replace id `1664` with your user/group id: ```bash # Set docker container name to use (usually agl-xds-xxx where xxx is USERNAME@MACHINENAME-IDX-NAME) export CONTAINER_NAME=agl-xds-seb@laptop-0-seb docker ps | grep -q ${CONTAINER_NAME} || echo "ERROR: No container name \"${CONTAINER_NAME}\" please set a valid CONTAINER_NAME before you continue" # First kill all processes of devel user (including running xds-server) docker exec ${CONTAINER_NAME} bash -c "/bin/loginctl kill-user devel" # Change user and group id inside docker to match your ids docker exec ${CONTAINER_NAME} bash -c "usermod -u $(id -u) devel" docker exec ${CONTAINER_NAME} bash -c "groupmod -g $(id -g) devel" # Update some files ownership docker exec ${CONTAINER_NAME} bash -c "chown -R devel:devel /home/devel /tmp/xds*" # Restart devel autologin service docker exec ${CONTAINER_NAME} bash -c "systemctl restart autologin" # Restart xds-server as a service (ssh port 2222 may depend on your container ID) ssh -p 2222 devel@localhost -- "systemctl --user restart xds-server" ``` ### Check if xds-server is running (open XDS webapp) **`xds-server` is automatically started** as a service on container startup. If the container is running on your localhost, you can access to a basic web application: ```bash xdg-open http://localhost:8000 ``` If needed you can status / stop / start it manually using following commands: ```bash # Status XDS server: ssh -p 2222 devel@localhost systemctl --user status xds-server.service # Stop XDS server ssh -p 2222 devel@localhost systemctl --user stop xds-server.service # Start XDS server ssh -p 2222 devel@localhost systemctl --user start xds-server.service # Get XDS server logs ssh -p 2222 devel@localhost journalctl --user --unit=xds-server.service --output=cat ``` `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.html#installing-agl-sdks) Please refer to [part 2 - xds-server](../part-2/1_xds-server.html#sdk-cross-toolchain-management) documentation for additional info. ## Installation based on Virtual Machine appliance ### Virtual Machine appliance prerequisites > VirtualBox is installed on the host machine please refer to [VirtualBox documentation](https://www.virtualbox.org/wiki/Downloads) for more details. ### Get the appliance Load the pre-build AGL SDK appliance image including `xds-server`: ```bash wget http://iot.bzh/download/public/XDS/appliance/xds-vm-debian9_latest.ova ``` ### Clean old appliance You must have one and one xds appliance only. So, first remove the oldest xds appliance if needed. ```bash # Get the virtual machine name VDS_VMNAME=$(VBoxManage list vms | grep xds-vm-debian | cut -d "\"" -f2) echo ${VDS_VMNAME} # Remove old XDS appliance [ -n ${VDS_VMNAME} ] && VBoxManage controlvm ${VDS_VMNAME} poweroff [ -n ${VDS_VMNAME} ] && VBoxManage unregistervm ${VDS_VMNAME} --delete ``` ### Create and start a new appliance Used provided script to create a new appliance or you can use VirtualBox GUI: ```bash # Import image into VirtualBox VBoxManage import ./xds-vm-debian9_latest.ova # Check import result VDS_VMNAME=$(VBoxManage list vms | grep xds-vm-debian | cut -d "\"" -f2) echo ${VDS_VMNAME} # Start XDS appliance [ -n ${VDS_VMNAME} ] && VBoxManage startvm ${VDS_VMNAME} ``` **Mandatory**: Add share folder to appliance, to allow files sharing using pathmap method: ```bash # Create local share folder mkdir -p $HOME/xds-workspace #Add share folder to appliance vboxmanage sharedfolder add ${VDS_VMNAME} --name XDS-workspace --hostpath $HOME/xds-workspace ``` ### Appliance settings This image exposes following network ports (NAT mode): - 8000 : `xds-server` to serve XDS basic web page - 69 : TFTP - 2222 : ssh ## 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/appliance is running on your local host # (else replace localhost by the name or the ip of the machine running the container) 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.html#installing-agl-sdks) ## 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} export DISTRO="xUbuntu_16.04" wget -O - http://download.opensuse.org/repositories/isv:/LinuxAutomotive:/app-Development/${DISTRO}/Release.key | sudo apt-key add - sudo bash -c "cat >> /etc/apt/sources.list.d/AGL.list < **Optional step**: skip this chapter if you plan to use default settings Please refer to [Configuration chapter of xds-server](../part-2/1_xds-server.html#configuration) documentation for more details about JSON configuration file. ### Start/Stop xds-server `xds-server` can be managed as a systemd service with the following commands: ```bash # Status XDS server: systemctl --user status xds-server.service # Stop XDS server systemctl --user stop xds-server.service # Start XDS server systemctl --user start xds-server.service # Get XDS server logs 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 xdg-open http://localhost:8000 ``` or get the current version using the following curl command: ```bash curl http://localhost:8000/api/v1/version ```