.. _setup-install: Installation of ucloud ====================== To install ucloud, you will first need to install the requirements and then ucloud itself. We describe the installation in x sections: * Installation overview * Requirements on Alpine * Installation on Arch Linux Installation overview --------------------- ucloud requires the following components to run: * python3 * an etcd cluster Installation on Arch Linux -------------------------- In Arch Linux, some packages can be installed from the regular repositories, some packages need to be installed from AUR. System packages ~~~~~~~~~~~~~~~ .. code-block:: sh :linenos: pacman -Syu qemu AUR packages ~~~~~~~~~~~~ Use your favorite AUR manager to install the following packages: * etcd Alpine ------ .. note:: Python Wheel (Binary) Packages does not support Alpine Linux as it is using musl libc instead of glibc. Therefore, expect longer installation times than other linux distributions. Enable Edge Repos, Update and Upgrade ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. warning:: The below commands would overwrite your repositories sources and upgrade all packages and their dependencies to match those available in edge repos. **So, be warned** .. code-block:: sh :linenos: cat > /etc/apk/repositories << EOF http://dl-cdn.alpinelinux.org/alpine/edge/main http://dl-cdn.alpinelinux.org/alpine/edge/community http://dl-cdn.alpinelinux.org/alpine/edge/testing EOF apk update apk upgrade reboot Install Dependencies ~~~~~~~~~~~~~~~~~~~~ .. note:: The installation and configuration of a production grade etcd cluster is out of scope of this manual. So, we will install etcd with default configuration. .. code-block:: sh :linenos: apk add git python3 alpine-sdk python3-dev etcd etcd-ctl openntpd \ libffi-dev openssl-dev make py3-protobuf py3-tempita chrony pip3 install pipenv **Install QEMU (For Filesystem based Installation)** .. code-block:: sh apk add qemu qemu-system-x86_64 qemu-img **Install QEMU/CEPH/radvd (For CEPH based Installation)** .. code-block:: sh $(git clone https://code.ungleich.ch/ahmedbilal/qemu-with-rbd-alpine.git && cd qemu-with-rbd-alpine && apk add apks/*.apk --allow-untrusted) apk add ceph radvd Syncronize Date/Time ~~~~~~~~~~~~~~~~~~~~ .. code-block:: sh :linenos: service chronyd start rc-update add chronyd Start etcd and enable it ~~~~~~~~~~~~~~~~~~~~~~~~ .. note:: The following :command:`curl` statement shouldn't be run once etcd is fixed in alpine repos. .. code-block:: sh :linenos: curl https://raw.githubusercontent.com/etcd-io/etcd/release-3.4/etcd.conf.yml.sample -o /etc/etcd/conf.yml service etcd start rc-update add etcd Install uotp ~~~~~~~~~~~~ .. code-block:: sh :linenos: git clone https://code.ungleich.ch/ungleich-public/uotp.git cd uotp mv .env.sample .env pipenv --three --site-packages pipenv install pipenv run python app.py Run :code:`$(cd scripts && pipenv run python get-admin.py)` to get admin seed. A sample output .. code-block:: json { "seed": "FYTVQ72A2CJJ4TB4", "realm": ["ungleich-admin"] } Now, run :code:`pipenv run python scripts/create-auth.py FYTVQ72A2CJJ4TB4` (Replace **FYTVQ72A2CJJ4TB4** with your admin seed obtained in previous step). A sample output is as below. It shows seed of auth. .. code-block:: json { "message": "Account Created", "name": "auth", "realm": ["ungleich-auth"], "seed": "XZLTUMX26TRAZOXC" } .. note:: Please note both **admin** and **auth** seeds as we would need them in setting up ucloud. Install and configure ucloud ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: sh :linenos: git clone https://code.ungleich.ch/ucloud/ucloud.git cd ucloud pipenv --three --site-packages pipenv install **Filesystem based Installation** You just need to update **AUTH_SEED** in the below code to match your auth's seed. .. code-block:: sh :linenos: mkdir /etc/ucloud cat > /etc/ucloud/ucloud.conf << EOF AUTH_NAME=auth AUTH_SEED=XZLTUMX26TRAZOXC AUTH_REALM=ungleich-auth REALM_ALLOWED = ["ungleich-admin", "ungleich-user"] OTP_SERVER="http://127.0.0.1:8000/" ETCD_URL=localhost STORAGE_BACKEND=filesystem BASE_DIR=/var/www IMAGE_DIR=/var/image VM_DIR=/var/vm VM_PREFIX=/v1/vm/ HOST_PREFIX=/v1/host/ REQUEST_PREFIX=/v1/request/ FILE_PREFIX=/v1/file/ IMAGE_PREFIX=/v1/image/ IMAGE_STORE_PREFIX=/v1/image_store/ USER_PREFIX=/v1/user/ NETWORK_PREFIX=/v1/network/ ssh_username=meow ssh_pkey="~/.ssh/id_rsa" VXLAN_PHY_DEV="eth0" EOF **CEPH based Installation** You need to update the following * **AUTH_SEED** * **NETBOX_URL** * **NETBOX_TOKEN** * **PREFIX** * **PREFIX_LENGTH** .. code-block:: sh :linenos: mkdir /etc/ucloud cat > /etc/ucloud/ucloud.conf << EOF AUTH_NAME=auth AUTH_SEED=XZLTUMX26TRAZOXC AUTH_REALM=ungleich-auth REALM_ALLOWED = ["ungleich-admin", "ungleich-user"] OTP_SERVER="http://127.0.0.1:8000/" ETCD_URL=localhost STORAGE_BACKEND=ceph BASE_DIR=/var/www IMAGE_DIR=/var/image VM_DIR=/var/vm VM_PREFIX=/v1/vm/ HOST_PREFIX=/v1/host/ REQUEST_PREFIX=/v1/request/ FILE_PREFIX=/v1/file/ IMAGE_PREFIX=/v1/image/ IMAGE_STORE_PREFIX=/v1/image_store/ USER_PREFIX=/v1/user/ NETWORK_PREFIX=/v1/network/ ssh_username=meow ssh_pkey="~/.ssh/id_rsa" VXLAN_PHY_DEV="eth0" NETBOX_URL="" NETBOX_TOKEN="netbox-token" PREFIX="your-prefix" PREFIX_LENGTH="64" EOF Install and configure ucloud-cli ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: sh :linenos: git clone https://code.ungleich.ch/ucloud/ucloud-cli.git cd ucloud-cli pipenv --three --site-packages pipenv install cat > ~/.ucloud.conf << EOF UCLOUD_API_SERVER=http://localhost:5000 EOF mkdir /var/www/ **Only for Filesystem Based Installation** .. code-block:: sh mkdir /var/image/ mkdir /var/vm/ Environment Variables and aliases ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ To ease usage of ucloud and its various components put the following in your shell profile e.g *~/.profile* .. code-block:: sh export OTP_NAME=admin export OTP_REALM=ungleich-admin export OTP_SEED=FYTVQ72A2CJJ4TB4 alias ucloud='cd /root/ucloud/ && pipenv run python ucloud.py' alias ucloud-cli='cd /root/ucloud-cli/ && pipenv run python ucloud-cli.py' alias uotp='cd /root/uotp/ && pipenv run python app.py' and run :code:`source ~/.profile`