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

1
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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
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.

1
2
3
4
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)

apk add qemu qemu-system-x86_64 qemu-img

Install QEMU/CEPH/radvd (For CEPH based Installation)

$(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

1
2
service chronyd start
rc-update add chronyd

Start etcd and enable it

Note

The following curl statement shouldn’t be run once etcd is fixed in alpine repos.

1
2
3
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

1
2
3
4
5
6
7
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 $(cd scripts && pipenv run python get-admin.py) to get admin seed. A sample output

{
    "seed": "FYTVQ72A2CJJ4TB4",
    "realm": ["ungleich-admin"]
}

Now, run 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.

{
    "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

1
2
3
4
5
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.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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="<url-for-your-netbox-installation>"
NETBOX_TOKEN="netbox-token"
PREFIX="your-prefix"
PREFIX_LENGTH="64"
EOF

Install and configure ucloud-cli

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
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

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

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 source ~/.profile