Данная инструкция описывает процесс установки 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 перейдите по ссылке.