Bug 52402

Summary: Fleet не может подключиться к MySQL-серверу на порту 3306
Product: Sisyphus Reporter: Tatyana Gagina <tatyana>
Component: fleetAssignee: obirvalger <obirvalger>
Status: CLOSED NOTABUG QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: obirvalger, rezvjakovne
Version: unstable   
Hardware: x86_64   
OS: Linux   
Attachments:
Description Flags
journalctl.log none

Description Tatyana Gagina 2024-12-11 15:53:58 MSK
Created attachment 17372 [details]
journalctl.log

Стенды, обновлённые до Sisyphus:
ALT Server x86-64
ALT Workstation x86-64
 
Версии: 
MySQL-server-8.0.40-alt1
wmdocker-1.5-alt3
fleet-4.58.0-alt1

Шаги:
1) Выполнить преднастройки:
# apt-get install wmdocker docker-compose fleet && systemctl start docker && systemctl enable docker
При попытке установить docker:
Пакет docker присутствует в базе данных, но не имеет доступной версии.Тем не менее, следующие пакеты заменяют его:
  wmdocker
E: Для пакета docker не найдено подходящего кандидата для установки
 
Установить mysql-server
# apt-get install  MySQL-server && systemctl start mysqld &&  systemctl enable mysqld

Чтобы у MySQL была возможность принимать соединения по сети:
- закомментировать опцию skip-networking в файле /etc/my.cnf.d/server.cnf
- настроить MySQL на прослушивание (в этом же файле /etc/my.cnf.d/server.cnf):
bind-address=127.0.0.1

Настроить redis:
# apt-get install redis && systemctl enable redis && systemctl start redis

2) Запустить:
#   fleetctl preview

Успешно:
Downloading dependencies from fleetdm/fleet:main into /root/.fleet/preview...
Pulling Docker dependencies...
Starting Docker containers...
Waiting for server to start up...
Initializing server...
Configured fleetctl in the 'preview' context to avoid overwriting existing config.
Loading standard query library...
[+] applied 50 queries
[+] applied 44 policies
Fleet will now log you into the UI automatically.
You can also open the UI at this URL: http://localhost:1337/previewlogin.
Email: admin@example.com
Password: *****
Enrolling local host...
Trying to clear orbit and osquery directories...
{"level":"debug","path":"/root/.fleet/preview/orbit/bin/osqueryd/linux/stable/osqueryd","target":"osqueryd","time":"2024-12-11T13:36:32+03:00","message":"found expected target locally"}
{"level":"debug","path":"/root/.fleet/preview/orbit/bin/orbit/linux/stable/orbit","target":"orbit","time":"2024-12-11T13:36:33+03:00","message":"found expected target locally"}
Waiting for host to enroll...
Automatic browser open failed. Please navigate to http://localhost:1337/previewlogin.
Starting simulated Linux hosts...
Preview environment complete. Enjoy using Fleet!

Здесь обратить внимание: 'Automatic browser open failed'

3) # fleet prepare db --mysql_address=localhost:3306 --mysql_database=fleet --mysql_username=root

Фактический результат: подключение не выполняется
'Failed to start: creating db connection: dial tcp 127.0.0.1:3306: connect: connection refused'

Ожидаемый результат: Migrations completed.

Детали: systemctl status mysqld
active (running)

В /var/log/mysql/ пусто.

# tail -f /var/log/redis/redis-server.log 
46630:C 11 Dec 2024 14:35:31.130 * Supervised by systemd. Please make sure you set appropriate values for TimeoutStartSec and TimeoutStopSec in your service unit.
46630:C 11 Dec 2024 14:35:31.130 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
46630:C 11 Dec 2024 14:35:31.130 * Redis version=7.2.6, bits=64, commit=00000000, modified=0, pid=46630, just started
46630:C 11 Dec 2024 14:35:31.130 * Configuration loaded
46630:M 11 Dec 2024 14:35:31.131 * monotonic clock: POSIX clock_gettime
46630:M 11 Dec 2024 14:35:31.132 * Running mode=standalone, port=6379.
46630:M 11 Dec 2024 14:35:31.132 * Server initialized
46630:M 11 Dec 2024 14:35:31.132 * Ready to accept connections tcp

Выполнена проверка портов 8412 и 3306.
Порт 8412 не прослушивается/не открыт:
# nmap -p 8412 localhost

PORT     STATE SERVICE
8412/tcp open  unknown


Порт 3306 закрыт:
# nmap -p 3306 localhost

PORT     STATE  SERVICE
3306/tcp closed mysql

Есть предположение, что проблема не в самом fleet, а в mysql (точнее, в связке работы с fleet+mysql).

В файле /etc/my.cnf.d/server.cnf было закомментировано:
#master-port     =  <port>
#master-password =   <password>
#master-user     =   <username>
#master-host     =   <hostname>

Изменение настроек, создание базы данных с именем fleet (на mysql) и перезапуск mysql не помогли:
master-password = **** (здесь свой сгенерированный пароль из шага 2)
master-user     =   root
master-host     =   *** (свой хост)

В journalctl:
I1211 12:10:25.756448    33 tls.cpp:254] TLS/HTTPS POST request to URI: https://host.docker.internal:8412/api/osquery/log
{"component":"http","ip_addr":"172.18.0.11","level":"debug","method":"POST","took":"1.25595ms","ts":"2024-12-11T12:10:25.774859672Z","uri":"/api/osquery/log","x_for_ip_addr":""}

Был применён Workaround:
1) Выполнить:
# firewall-cmd --add-port=3306/tcp --permanent
# firewall-cmd --reload
# systemctl restart mysqld
После этого порт 3306 открыт (по аналогии был перенастроен порт 8412):
# nmap -p 3306 localhost
PORT     STATE SERVICE
3306/tcp open  mysql

Итог: порт 3306 открыт и прослушивается (как и порт 8412):
netstat -tuln | grep 3306
tcp        0      0 127.0.0.1:3306              0.0.0.0:*                   LISTEN      
tcp        0      0 :::33060                    :::*                        LISTEN 

2) Создать базу данных fleet (в безопасном режиме):
# systemctl stop mysqld && mysqld_safe --skip-grant-tables
# mysql -u root или  mysql -u root -p
mysql> CREATE DATABASE fleet;
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| fleet              |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0,01 sec)

Снова запустить (c уже созданной базой данных fleet):
# fleet prepare db --mysql_address=localhost:3306 --mysql_database=fleet --mysql_username=root

Однако добиться желаемого результата не получилось:
Failed to start: creating db connection: dial tcp 127.0.0.1:3306: connect: connection refused

В journal те же самые сообщения (no route to host).
Comment 1 obirvalger@altlinux.org 2024-12-18 17:39:24 MSK
Чтобы установить докер лучше ставить пакет docker-engine, а не wmdocker(это виджет системного лотка). После этого, выполняя шаги из данной баги, удалось запустить fleet с ожидаемым повидением. Только перезапустил mysql после изменения конфига и заранее создал базу fleet.
Comment 2 Резвяков Никита 2024-12-25 11:53:14 MSK
Версии пакетов:
fleet-4.58.0-alt1.x86_64
MySQL-server-8.0.40-alt1
docker-engine-27.1.1

Стенды, обновлённые до Sisyphus:
ALT Server x86-64
ALT Workstation x86-64

Во время преднастройки необходимо заранее создать БД fleet и перезапустить mysql: # systemctl restart mysqld
Тогда при выполнении команды: # fleet prepare db --mysql_address=localhost:3306 --mysql_database=fleet --mysql_username=root будет вывод: Migrations completed.