Блокчейн Erachain в Incus-контейнере
-
1. Меняем порт SSH для хоста
- Откройте терминал и создайте новый файл конфигурации с помощью текстового редактора (например, mcedit) :
sudo mcedit /etc/ssh/sshd_config.d/port.conf- Добавьте строку с новым портом
В открывшемся пустом файле добавьте следующую строку, которая укажет SSH-серверу слушать новый порт :
Port 2222
Совет: Выбирайте порт в диапазоне от 1024 до 65535, чтобы избежать конфликтов с системными службами .Сохраните файл и выйдите из редактора.
- Проверьте конфигурацию SSH
Перед перезапуском службы всегда проверяйте синтаксис конфигурационных файлов, чтобы избежать ошибок, которые могут помешать запуску SSH :
sudo sshd -tЕсли команда не вывела никаких сообщений, значит, синтаксис верен.
- Перезагрузите службу sshd
sudo systemctl restart sshdТеперь при входе по SSH нужно вводить команду
sudo ssh -p 2222 <имя_пользователя>@<ip_сервера> -
2. Создаём контейнер
Система в контейнере желательно должна быть Ubuntu 20.04, но репозиторий Incus удалил уже образ этой устаревшей системы, поэтому надо взять официальный cloud-образ Ubuntu 20.04 вручную с cloud-images.ubuntu.com
Это рабочий способ в 2026 году — Canonical всё ещё держит released-образы 20.04 (хоть и с пометкой [END OF REGULAR SUPPORT]).# Скачайте два файла (amd64, если у вас x86_64) wget https://cloud-images.ubuntu.com/releases/focal/release/ubuntu-20.04-server-cloudimg-amd64-lxd.tar.xz wget https://cloud-images.ubuntu.com/releases/focal/release/ubuntu-20.04-server-cloudimg-amd64.squashfs # или .img, но .squashfs предпочтительнее для Incus # Импортируйте как образ incus image import ubuntu-20.04-server-cloudimg-amd64-lxd.tar.xz ubuntu-20.04-server-cloudimg-amd64.squashfs --alias focal-manual-cloud # Запустите incus launch focal-manual-cloud incus-bcn1Имя контейнера incus-bcn1 для первой ноды, и incus-bcn2 для второй ноды, но можно выбрать любые другие имена.
После импорта можете удалить скачанные файлы.
-
3. Настраиваем систему в контейнере
Заходим в контейнер
incus exec incus-bcn1 -- bash- Обновляем пакеты и устанавливаем утилиты:
apt update apt install mc nano curl wget htop lynx lsof openssh-server- Меняем настройки sshd, чтобы извне можно было входить по паролю, а не по ключу.
Открываем файл /etc/ssh/sshd_config
mcedit /etc/ssh/sshd_configНужно найти и видоизменить следующие строки
PasswordAuthentication yes
ChallengeResponseAuthentication yesОбычно эти строки закомментированы знаком #, нужно убрать комментирование, и смотреть, чтобы везде был параметр yes
Перезагружаем sshd
systemctl restart sshd- Задаём пароль для суперпользователя (root)
passwd rootИ два раза вводим придуманный пароль
- Создаём нового пользователя и включаем его в группу sudo
sudo adduser newuserСистема попросит вас:
- Ввести пароль (символы при вводе не отображаются).
- Повторить пароль.
- Ввести данные пользователя (ФИО, номер комнаты и т.д.) — это можно пропустить, просто нажимая Enter.
- Далее будет предложено подтвердить настройки, выбираем Y и жмём Enter
Добавляем пользователя в группу sudo
sudo usermod -aG sudo newuser-a (append) — добавить. -G (groups) — в группу.Чтобы убедиться, что всё прошло успешно, переключитесь на нового пользователя:
su - newuserЗатем попробуйте выполнить любую команду с sudo, например, обновить список пакетов:
sudo apt updateЕсли система приняла пароль и начала обновление — пользователь успешно настроен.
Выходим из режима пользователя
exitВыходим из контейнера
exit -
-
-
A Admin переместил эту тему из
-
6. Делаем IP-адрес контейнера статическим
- Узнаём текущий ip контейнера (на хостовой системе)
incus list incus-bcn1- Назначаем статический ip
incus config device override incus-bcn1 eth0 ipv4.address=10.10.10.245 # подставьте нужный ip- Проверяем, что ip зафиксировался
incus config show incus-bcn1 | grep -A10 eth0Среди выведенного текста должны увидеть примерно такое:
ipv4.address: 10.10.10.245
- Перезапускаем контейнер
incus restart incus-bcn1 -
7. Пробрасываем порты 9056, 9057, 9058 для ноды (на хостовой системе)
incus config device add incus-bcn1 erachain-9056 proxy \ # имя erachain-9056 можно поменять на другое listen=tcp:192.168.0.65:9056 \ # Замените айпи хоста на нужный connect=tcp:10.214.97.211:9056 \ # Замените ip контейнера на нужный nat=trueincus config device add incus-bcn1 erachain-9057 proxy \ listen=tcp:192.168.0.65:9057 \ # Замените айпи хоста на нужный connect=tcp:10.214.97.211:9057 \ # Замените ip контейнера на нужный nat=trueincus config device add incus-bcn1 erachain-9058 proxy \ listen=tcp:192.168.0.65:9058 \ # Замените айпи хоста на нужный connect=tcp:10.214.97.211:9058 \ # Замените ip контейнера на нужный nat=trueВажные моменты:
- После \ не должно быть пробелов
- Каждая опция (listen=..., connect=..., nat=...) идёт на новой строке с отступом (необязательно, но удобно)
- Всё можно писать в одну строку, если удобнее
Кроме того, следует учитывать, что ip-адрес хоста - это не внешний ip, а именно адрес, назначенный хостовой машине. Он может совпадать в внешним, если у сервера нет роутера.
Если нужно что-то поменять в уже применённых командах, следует сначала удалить созданные устройства с портами
# Удаляем порт 9056 incus config device remove incus-bcn1 erachain-9056 # Удаляем порт 9057 incus config device remove incus-bcn1 erachain-9057 # Удаляем порт 9058 incus config device remove incus-bcn1 erachain-9058
Ещё следует учитывать, что если компьютер имеет роутер, то на роутере обязательно нужно пробросить указанные порты.
-
-
9. Проверяем работу портов
Внутри контейнера временно запускаем веб-сервер (и подставляем нужный порт)
python3 -m http.server 9056На пользовательском компьютере или телефоне в браузере вводим адрес
<ip-сервера>:порт
Если в браузере видим список каталогов (в калоге, откуда запущена команда терминала), значит порт доступен.
Если порт недоступен, запускаем веб-сервер на хостовой машине, вне контейнера. Если на хосте команда срабаотывает, а в контейнере нет - значит у контейнера не проброшен нужный порт, ищем решение проблемы. -
10. Позволяем в контейнере запускать команду sudo reboot без пароля
-
Откройте терминал и запустите редактор
sudoersспециальной командой (это безопаснее, чем редактировать файл вручную):sudo visudo -
Найдите в файле строку, которая отвечает за права вашего пользователя (обычно в конце файла), или добавьте туда следующую строку.
- Если ваш пользователь называется
username, добавьте:username ALL=(ALL) NOPASSWD: /sbin/reboot, /sbin/shutdown - Если ваш пользователь состоит в группе
sudo(илиwheel), вы можете добавить правило для всей группы, чтобы разрешить всем в ней перезагрузку без пароля:
(В разных дистрибутивах группа может называться%sudo ALL=(ALL) NOPASSWD: /sbin/reboot, /sbin/shutdownsudoилиwheel. Посмотрите, как написано у других пользователей в этом же файле).
- Если ваш пользователь называется
-
Сохраните файл и выйдите (в
visudoобычно этоCtrl+X, затемYдля подтверждения, либо:wqесли открылсяvim).
Результат: Теперь команда
sudo rebootбудет перезагружать компьютер сразу, без запроса пароля.
Внимание !
В файле есть важная строка:
#includedir /etc/sudoers.dЛучше добавить ваши правила до этой строки (сразу после
%sudo ALL=(ALL:ALL) ALL), а не после. Хотя технически они могут работать и в конце, правильнее размещать их выше директивы#includedir.Вот как должен выглядеть блок:
# Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL # Разрешение на перезагрузку без пароля username ALL=(ALL) NOPASSWD: /sbin/reboot, /sbin/shutdown %sudo ALL=(ALL) NOPASSWD: /sbin/reboot, /sbin/shutdown # See sudoers(5) for more information on "#include" directives: #includedir /etc/sudoers.dПосле сохранения файла, выйдите из контейнера, зайдите снова и проверьте:
sudo rebootПароль больше не должен запрашиваться.
-