Установка BAYRELL CLoud OS

Данная инструкция описывает процесс установки BAYRELL Cloud OS альфа версии 0.4. Репозиторий с ОС доступен на гихабе.

Базовая настройка и установка Docker Swarm

Для установки Облачной ОС в LXC контейнер воспользуйтесь следующей инструкцией.

1) Перед тем, как устанавливать Облачную ОС настройте саму систему:

2) Обновите систему

apt-get update
apt-get upgrade

3) Установка dnsmasq

apt install dnsmasq

Скопируйте конфиг dnsmasq:

cp /etc/dnsmasq.conf /etc/dnsmasq.conf.example
echo "" > /etc/dnsmasq.conf

Создайте файл /etc/resolv.dnsmasq

nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 1.1.1.1

В /etc/dnsmasq.conf пропишите:

port=53
listen-address=0.0.0.0
no-dhcp-interface=
bind-interfaces
expand-hosts
local-ttl=1
no-negcache

# Динамические настройки DNS
#resolv-file=/var/run/dnsmasq/resolv.conf

# Настройки DNS по умолчанию
resolv-file=/etc/resolv.dnsmasq

conf-dir=/etc/dnsmasq.d
cache-size=150
max-cache-ttl=600
min-cache-ttl=60

# Одновременный запрос ко всем DNS серверам
# all-servers

# Запрещаем резолвить домены без точки (нужно для Docker Swarm)
domain-needed

# Для отладки
#log-queries

Раскоментируйте строку в файле /etc/default/dnsmasq

IGNORE_RESOLVCONF=yes

Пропишите ip адреса для домена .local в файле /etc/dnsmasq.d/local

address=/.local/127.0.0.1

Выключите резолвер из внешней сети интернет. Создайте файл /etc/dnsmasq.d/disable-external-network

bind-interfaces
except-interface=enp*
except-interface=wlp*
except-interface=wlan*
except-interface=eth*

Удалите файл /etc/resolv.conf и заново его создайте, потому что остается симлинк от днс резолвера systemd, который не дает создать новый файл.

rm -f /etc/resolv.conf
touch /etc/resolv.conf

В /etc/resolv.conf укажите локальный IP адрес

nameserver 127.0.0.1

Отключите резолвер systemd 

systemctl stop systemd-resolved
systemctl disable systemd-resolved

Перезапустите dnsmasq

systemctl restart dnsmasq

Установка Docker Swarm

1) Установите Docker

curl -sSL https://get.docker.com | sh
systemctl enable docker
systemctl start docker
apt-get install docker-compose

2) В файл /etc/iptables/rules.v4 добавьте строчки перед -A ALLOW-INPUT -j RETURN. Это нужно для Docker Swarm

# Разрешить Docker Swarm
-A ALLOW-INPUT -p tcp -m tcp --dport 2376 -j ACCEPT
-A ALLOW-INPUT -p tcp -m tcp --dport 2377 -j ACCEPT
-A ALLOW-INPUT -p tcp -m tcp --dport 7946 -j ACCEPT
-A ALLOW-INPUT -p udp -m udp --dport 7946 -j ACCEPT
-A ALLOW-INPUT -p udp -m udp --dport 4789 -j ACCEPT

# Разрешаем входящие соединения DNS
-A ALLOW-INPUT -i docker0 -p udp -m udp --dport 53 -j ACCEPT
-A ALLOW-INPUT -i docker0 -p tcp -m tcp --dport 53 -j ACCEPT
-A ALLOW-INPUT -i docker_gwbridge -p udp -m udp --dport 53 -j ACCEPT
-A ALLOW-INPUT -i docker_gwbridge -p tcp -m tcp --dport 53 -j ACCEPT

После перезагрузки данные команды применятся

3) В файле /etc/docker/daemon.json пропишите.

{
  "log-driver": "journald",
  "log-opts": {
    "labels":"com.docker.swarm.service.name"
  },
  "dns": ["172.17.0.1"]
}

Это нужно для хранения логов рекомендуется journald, чтобы автоматически происходила ротация логов. А также, чтобы контейнеры использовали dnsmasq.

Можно также добавить строчки

"max-concurrent-uploads": 1,
"max-concurrent-downloads": 1,

Они позволяют ограничить количество потоков на загрузку докер образов. По умолчанию 3 потока.

4) В крон через команду sudo crontab -e пропишите команду, которая будет автоматически очищать контейнеры

0 0 * * * yes | docker container prune > /dev/null

5) Создайте кластер

docker swarm init

Если у вас несколько IP адресов у распы, то нужно указать конкретный IP адрес, по которому должен создаваться кластер, например так:

docker swarm init --advertise-addr 192.168.1.25

Важно, что сменить IP адрес потом будет нельзя.

После инициализации кластера, команда выдаст ключ подключения к Docker swarm. Если вы забыли Token, то введите команду docker swarm join-token manager на primary node. Подключитесь к остальным серверам и выполните команду, для того чтобы их подключить к кластеру.

docker swarm join --token TOKEN IP-АДРЕС-ГЛАВНОГО-СЕРВЕРА

Если вы забыли токен, его можно узнать командой:

docker swarm join-token manager

6) Выдайте всем нодам в кластере уникальные имена

Узнать ID нод можно командой

docker node ls

Назначить имя можно командой:

docker node update --label-add name=docker0 raspa1

Рекомендуется первый сервер назвать именем docker0, т.к. это имя далее указано в конфигах Cloud OS.

Проверить назначенные label можно командой

docker node inspect self --pretty

7) Добавьте пользователя ubuntu в группу docker

usermod -a -G docker ubuntu

8) Перезагрузите сервер

init 6

Установка NVIDIA драйверов для нейронных сетей

Данную инструкцию нужно выполнять, если вы собираетесь заниматься искусственным интеллектом. На сервере для этого должна быть установлена видеокарта от NVIDIA.

1) Установите драйвер на сервер. Драйвер должен быть последней версии.

aptitude install nvidia-driver-515-server

2) Установите плагин libnvidia-containuer.

Определите версию Убунту

export distribution=$(. /etc/os-release;echo $ID$VERSION_ID)

Установите ключ nvidia:

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg

Добавьте репозиторий:

wget https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list -O "/etc/apt/sources.list.d/nvidia-container-toolkit.list"

sed -i 's|deb https://|deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://|g' /etc/apt/sources.list.d/nvidia-container-toolkit.list

Установите Docker плагин:

apt-get update
apt-get install -y nvidia-docker2

3) Добавьте строчки в /etc/docker/daemon.json

{
  "log-driver": "journald",
  "log-opts": {
    "labels":"com.docker.swarm.service.name"
  },
  "dns": ["172.17.0.1"],
  "default-runtime": "nvidia",
  "runtimes": {
    "nvidia": {
      "path": "nvidia-container-runtime",
      "runtimeArgs": []
    }
  }
}

4) Перезапустите Docker:

systemctl restart docker

5) Выполните команду:

docker run --rm --gpus all nvidia/cuda:11.7.1-base-ubuntu20.04 nvidia-smi

Если команда выполнилась успешно и указала версию драйвера, значит все установлено корректно.

Установка BAYRELL Cloud OS на сервер

Под пользователем ubuntu выполните:

1) Обновите время

sudo ntpdate -s time.nist.gov

2) Запустите облачную ОС в домашнюю папку

cd ~
git clone https://github.com/bayrell-os/cloud_os
cd cloud_os

Скачайте образы

./cloud_os.sh download

и установите ОС

./cloud_os.sh setup

Подождите пока выполнится скрипт установки. Он также вас попросит ввести логин администратора, и в конце создаст и выведет его на экран.

3) Добавьте в автозапуск облачную ОС

Создайте файл через команду

nano /etc/rc.local

Пропишите в нем команды:

#!/bin/bash

for i in $(seq 0 6); do
	sleep 10
	docker start cloud_os_standard_1
done

Поставьте флаг выполнения для этого файла

chmod +x /etc/rc.local

4) Установка завершена!

Установка Desktop Client

Для того чтобы установить Desktop Client перейдите по ссылке.