323 lines
		
	
	
	
		
			6.6 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			323 lines
		
	
	
	
		
			6.6 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| .. _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="<url-for-your-netbox-installation>"
 | |
|     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`
 |