Сообщество - Лига Сисадминов

Лига Сисадминов

2 416 постов 18 934 подписчика

Популярные теги в сообществе:

Нужна помощь с OpenMediaVault

Приветствую, друзья!
Обращаюсь к сообществу за советом и помощью в настройке OpenMediaVault.
Суть такова: есть домашняя файлопомойка на которой крутиться OMV 7. При ее постройке была задача собрать минисервер из старых комплектух (на данный момент это FX8350 + 8Гб DDR3 + россыпь из пары SSD по 120 Гб и пары HDD на 250 Гб и 1 Тб) и поднять NAS, который может подключаться к WI-FI из коробки. Это важно, т.к. розетки ethernet в комнате нет, как и кабель притащить в неё нет возможности.
Так вот NAS на OMV 7 работает, но хочется большего. Чего, спросите вы? Конечно же miniDLNA и облачного доступа к папкам с фото для неноглядной супруги. miniDLNA работает без проблем - все телевизоры дома его видят, фильмы/сериалы смотрятся без проблем.
И тут начинаются трудности конкретно у меня. А именно настройка Docker. После установки Compose при попытке задать настройки папок в Docker система выдаёт вот такую ошибку:

500 - internal server error
Failed to execute command 'export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin; export LC_ALL=C.UTF-8; export LANGUAGE=; omv-salt deploy run --no-color compose 2>&1' with exit code '1': debian:
----------
ID: configure_compose_global_env_file
Function: file.managed
Name: /srv/dev-disk-by-uuid-d7ccf09a-0b64-4d3d-8e21-54b10bdd45d1/compose/global.env
Result: True
Comment: File /srv/dev-disk-by-uuid-d7ccf09a-0b64-4d3d-8e21-54b10bdd45d1/compose/global.env is in the correct state
Started: 19:35:42.484912
Duration: 142.62 ms
Changes:
----------
ID: configure_etc_docker_dir
Function: file.directory
Name: /etc/docker
Result: True
Comment: The directory /etc/docker is in the correct state
Started: 19:35:42.627644
Duration: 0.894 ms
Changes:
----------
ID: /etc/docker/daemon.json
Function: file.serialize
Result: True
Comment: File /etc/docker/daemon.json updated
Started: 19:35:42.628628
Duration: 52.602 ms
Changes:
----------
diff:
---
+++
@@ -1,3 +1,3 @@
{
- "data-root": "/srv/dev-disk-by-uuid-d7ccf09a-0b64-4d3d-8e21-54b10bdd45d1/docker"
+ "data-root": "/var/lib/docker"
}
----------
ID: docker_install_packages
Function: pkg.installed
Result: False
Comment: An error was encountered while installing package(s): E: The repository 'http://security.debian.org/debian rep Release' does not have a Release file.
W: GPG error: https://deb.debian.org/debian stable-backports InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 6ED0E7B82643E131 NO_PUBKEY 78DBA3BC47EF2265
E: The repository 'https://deb.debian.org/debian stable-backports InRelease' is not signed.
E: The repository 'http://deb.debian.org/debian-security security Release' does not have a Release file.
E: The repository 'http://mirror.yandex.ru/debian deb Release' does not have a Release file.
E: The repository 'https://github.com/OpenMediaVault-Plugin-Developers/packages... deb Release' does not have a Release file.
Started: 19:35:43.508231
Duration: 21668.952 ms
Changes:
----------
ID: docker_compose_install_packages
Function: pkg.installed
Result: True
Comment: All specified packages are already installed and are at the desired version
Started: 19:36:05.177328
Duration: 172.653 ms
Changes:
----------
ID: docker_purged_packages
Function: pkg.purged
Result: True
Comment: None of the targeted packages are installed or partially installed
Started: 19:36:05.350077
Duration: 0.749 ms
Changes:
----------
ID: docker
Function: service.running
Result: False
Comment: Failed to start docker.service: Unit docker.service not found.
Started: 19:36:05.373095
Duration: 148.741 ms
Changes:
----------
ID: /etc/systemd/system/docker.service.d/waitAllMounts.conf
Function: file.managed
Result: True
Comment: File /etc/systemd/system/docker.service.d/waitAllMounts.conf is in the correct state
Started: 19:36:05.522219
Duration: 94.262 ms
Changes:
----------
ID: systemd_daemon_reload_docker
Function: cmd.run
Name: systemctl daemon-reload
Result: True
Comment: State was not run because none of the onchanges reqs changed
Started: 19:36:05.617431
Duration: 0.005 ms
Changes:
----------
ID: create_usr_local_bin_dir
Function: file.directory
Name: /usr/local/bin
Result: True
Comment: The directory /usr/local/bin is in the correct state
Started: 19:36:05.617491
Duration: 0.926 ms
Changes:
----------
ID: configure_compose_scheduled_backup
Function: file.managed
Name: /etc/cron.d/omv-compose-backup
Result: True
Comment: File /etc/cron.d/omv-compose-backup is in the correct state
Started: 19:36:05.618500
Duration: 188.316 ms
Changes:
----------
ID: configure_compose_scheduled_update
Function: file.managed
Name: /etc/cron.d/omv-compose-update
Result: True
Comment: File /etc/cron.d/omv-compose-update is in the correct state
Started: 19:36:05.806966
Duration: 141.555 ms
Changes:
----------
ID: configure_compose_scheduled_prune
Function: file.managed
Name: /etc/cron.d/omv-compose-prune
Result: True
Comment: File /etc/cron.d/omv-compose-prune is in the correct state
Started: 19:36:05.948628
Duration: 138.424 ms
Changes:
----------
ID: configure_compose_scheduled_start
Function: file.managed
Name: /etc/cron.d/omv-compose-start
Result: True
Comment: File /etc/cron.d/omv-compose-start is in the correct state
Started: 19:36:06.087150
Duration: 150.164 ms
Changes:
----------
ID: configure_compose_scheduled_stop
Function: file.managed
Name: /etc/cron.d/omv-compose-stop
Result: True
Comment: File /etc/cron.d/omv-compose-stop is in the correct state
Started: 19:36:06.237415
Duration: 138.497 ms
Changes:

Summary for debian
-------------
Succeeded: 13 (changed=1)
Failed: 2
-------------
Total states run: 15
Total run time: 23.039 s
[ERROR ] Command 'apt-get' failed with return code: 100
[ERROR ] stdout: Get:1 file:/var/cache/openmediavault/archives InRelease
Ign:1 file:/var/cache/openmediavault/archives InRelease
Get:2 file:/var/cache/openmediavault/archives Release
Ign:2 file:/var/cache/openmediavault/archives Release
Get:3 file:/var/cache/openmediavault/archives Packages
Ign:3 file:/var/cache/openmediavault/archives Packages
Get:4 file:/var/cache/openmediavault/archives Translation-en
Ign:4 file:/var/cache/openmediavault/archives Translation-en
Get:5 file:/var/cache/openmediavault/archives Translation-ru
Ign:5 file:/var/cache/openmediavault/archives Translation-ru
Get:3 file:/var/cache/openmediavault/archives Packages
Ign:3 file:/var/cache/openmediavault/archives Packages
Get:4 file:/var/cache/openmediavault/archives Translation-en
Ign:4 file:/var/cache/openmediavault/archives Translation-en
Get:5 file:/var/cache/openmediavault/archives Translation-ru
Ign:5 file:/var/cache/openmediavault/archives Translation-ru
Get:3 file:/var/cache/openmediavault/archives Packages
Ign:3 file:/var/cache/openmediavault/archives Packages
Get:4 file:/var/cache/openmediavault/archives Translation-en
Ign:4 file:/var/cache/openmediavault/archives Translation-en
Get:5 file:/var/cache/openmediavault/archives Translation-ru
Ign:5 file:/var/cache/openmediavault/archives Translation-ru
Get:3 file:/var/cache/openmediavault/archives Packages
Ign:3 file:/var/cache/openmediavault/archives Packages
Get:4 file:/var/cache/openmediavault/archives Translation-en
Ign:4 file:/var/cache/openmediavault/archives Translation-en
Get:5 file:/var/cache/openmediavault/archives Translation-ru
Ign:5 file:/var/cache/openmediavault/archives Translation-ru
Get:3 file:/var/cache/openmediavault/archives Packages
Ign:3 file:/var/cache/openmediavault/archives Packages
Get:4 file:/var/cache/openmediavault/archives Translation-en
Ign:4 file:/var/cache/openmediavault/archives Translation-en
Get:5 file:/var/cache/openmediavault/archives Translation-ru
Ign:5 file:/var/cache/openmediavault/archives Translation-ru
Get:3 file:/var/cache/openmediavault/archives Packages
Ign:3 file:/var/cache/openmediavault/archives Packages
Get:4 file:/var/cache/openmediavault/archives Translation-en
Ign:4 file:/var/cache/openmediavault/archives Translation-en
Get:5 file:/var/cache/openmediavault/archives Translation-ru
Ign:5 file:/var/cache/openmediavault/archives Translation-ru
Get:3 file:/var/cache/openmediavault/archives Packages
Get:4 file:/var/cache/openmediavault/archives Translation-en
Ign:4 file:/var/cache/openmediavault/archives Translation-en
Get:5 file:/var/cache/openmediavault/archives Translation-ru
Ign:5 file:/var/cache/openmediavault/archives Translation-ru
Ign:6 http://security.debian.org/debian rep InRelease
Hit:7 http://security.debian.org/debian-security bookworm-security InRelease
Get:8 https://openmediavault-plugin-developers.github.io/packages/... sandworm InRelease [3945 B]
Err:9 http://security.debian.org/debian rep Release
404 Not Found [IP: 146.75.118.132 80]
Get:10 https://deb.debian.org/debian stable-backports InRelease [53.7 kB]
Err:10 https://deb.debian.org/debian stable-backports InRelease
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 6ED0E7B82643E131 NO_PUBKEY 78DBA3BC47EF2265
Hit:11 https://openmediavault.github.io/packages sandworm InRelease
Hit:12 https://download.docker.com/linux/debian bookworm InRelease
Hit:13 http://packages.openmediavault.org/public sandworm InRelease
Hit:14 http://deb.debian.org/debian bookworm InRelease
Hit:15 http://deb.debian.org/debian bookworm-updates InRelease
Ign:16 http://deb.debian.org/debian-security security InRelease
Err:17 http://deb.debian.org/debian-security security Release
404 Not Found [IP: 146.75.118.132 80]
Ign:18 https://github.com/OpenMediaVault-Plugin-Developers/packages... deb InRelease
Ign:19 http://mirror.yandex.ru/debian deb InRelease
Err:20 http://mirror.yandex.ru/debian deb Release
404 Not Found [IP: 213.180.204.183 80]
Err:21 https://github.com/OpenMediaVault-Plugin-Developers/packages... deb Release
404 Not Found [IP: 140.82.121.3 443]
Reading package lists...
[ERROR ] stderr: E: The repository 'http://security.debian.org/debian rep Release' does not have a Release file.
W: GPG error: https://deb.debian.org/debian stable-backports InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 6ED0E7B82643E131 NO_PUBKEY 78DBA3BC47EF2265
E: The repository 'https://deb.debian.org/debian stable-backports InRelease' is not signed.
E: The repository 'http://deb.debian.org/debian-security security Release' does not have a Release file.
E: The repository 'http://mirror.yandex.ru/debian deb Release' does not have a Release file.
E: The repository 'https://github.com/OpenMediaVault-Plugin-Developers/packages... deb Release' does not have a Release file.
[ERROR ] retcode: 100
[ERROR ] An error was encountered while installing package(s): E: The repository 'http://security.debian.org/debian rep Release' does not have a Release file.
W: GPG error: https://deb.debian.org/debian stable-backports InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 6ED0E7B82643E131 NO_PUBKEY 78DBA3BC47EF2265
E: The repository 'https://deb.debian.org/debian stable-backports InRelease' is not signed.
E: The repository 'http://deb.debian.org/debian-security security Release' does not have a Release file.
E: The repository 'http://mirror.yandex.ru/debian deb Release' does not have a Release file.
E: The repository 'https://github.com/OpenMediaVault-Plugin-Developers/packages... deb Release' does not have a Release file.
[ERROR ] The named service docker is not available
[ERROR ] Command '/bin/systemd-run' failed with return code: 5
[ERROR ] stderr: Running scope as unit: run-rfbb4a7942d6b4404acea4defd80bf95f.scope
Failed to stop docker.service: Unit docker.service not loaded.
[ERROR ] retcode: 5
[ERROR ] Command '/bin/systemd-run' failed with return code: 5
[ERROR ] stderr: Running scope as unit: run-r29ebbf139bb9468e865b6b20d0ecbb37.scope
Failed to start docker.service: Unit docker.service not found.
[ERROR ] retcode: 5
[ERROR ] Failed to start docker.service: Unit docker.service not found.

OMV\ExecException: Failed to execute command 'export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin; export LC_ALL=C.UTF-8; export LANGUAGE=; omv-salt deploy run --no-color compose 2>&1' with exit code '1': debian:
----------
ID: configure_compose_global_env_file
Function: file.managed
Name: /srv/dev-disk-by-uuid-d7ccf09a-0b64-4d3d-8e21-54b10bdd45d1/compose/global.env
Result: True
Comment: File /srv/dev-disk-by-uuid-d7ccf09a-0b64-4d3d-8e21-54b10bdd45d1/compose/global.env is in the correct state
Started: 19:35:42.484912
Duration: 142.62 ms
Changes:
----------
ID: configure_etc_docker_dir
Function: file.directory
Name: /etc/docker
Result: True
Comment: The directory /etc/docker is in the correct state
Started: 19:35:42.627644
Duration: 0.894 ms
Changes:
----------
ID: /etc/docker/daemon.json
Function: file.serialize
Result: True
Comment: File /etc/docker/daemon.json updated
Started: 19:35:42.628628
Duration: 52.602 ms
Changes:
----------
diff:
---
+++
@@ -1,3 +1,3 @@
{
- "data-root": "/srv/dev-disk-by-uuid-d7ccf09a-0b64-4d3d-8e21-54b10bdd45d1/docker"
+ "data-root": "/var/lib/docker"
}
----------
ID: docker_install_packages
Function: pkg.installed
Result: False
Comment: An error was encountered while installing package(s): E: The repository 'http://security.debian.org/debian rep Release' does not have a Release file.
W: GPG error: https://deb.debian.org/debian stable-backports InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 6ED0E7B82643E131 NO_PUBKEY 78DBA3BC47EF2265
E: The repository 'https://deb.debian.org/debian stable-backports InRelease' is not signed.
E: The repository 'http://deb.debian.org/debian-security security Release' does not have a Release file.
E: The repository 'http://mirror.yandex.ru/debian deb Release' does not have a Release file.
E: The repository 'https://github.com/OpenMediaVault-Plugin-Developers/packages... deb Release' does not have a Release file.
Started: 19:35:43.508231
Duration: 21668.952 ms
Changes:
----------
ID: docker_compose_install_packages
Function: pkg.installed
Result: True
Comment: All specified packages are already installed and are at the desired version
Started: 19:36:05.177328
Duration: 172.653 ms
Changes:
----------
ID: docker_purged_packages
Function: pkg.purged
Result: True
Comment: None of the targeted packages are installed or partially installed
Started: 19:36:05.350077
Duration: 0.749 ms
Changes:
----------
ID: docker
Function: service.running
Result: False
Comment: Failed to start docker.service: Unit docker.service not found.
Started: 19:36:05.373095
Duration: 148.741 ms
Changes:
----------
ID: /etc/systemd/system/docker.service.d/waitAllMounts.conf
Function: file.managed
Result: True
Comment: File /etc/systemd/system/docker.service.d/waitAllMounts.conf is in the correct state
Started: 19:36:05.522219
Duration: 94.262 ms
Changes:
----------
ID: systemd_daemon_reload_docker
Function: cmd.run
Name: systemctl daemon-reload
Result: True
Comment: State was not run because none of the onchanges reqs changed
Started: 19:36:05.617431
Duration: 0.005 ms
Changes:
----------
ID: create_usr_local_bin_dir
Function: file.directory
Name: /usr/local/bin
Result: True
Comment: The directory /usr/local/bin is in the correct state
Started: 19:36:05.617491
Duration: 0.926 ms
Changes:
----------
ID: configure_compose_scheduled_backup
Function: file.managed
Name: /etc/cron.d/omv-compose-backup
Result: True
Comment: File /etc/cron.d/omv-compose-backup is in the correct state
Started: 19:36:05.618500
Duration: 188.316 ms
Changes:
----------
ID: configure_compose_scheduled_update
Function: file.managed
Name: /etc/cron.d/omv-compose-update
Result: True
Comment: File /etc/cron.d/omv-compose-update is in the correct state
Started: 19:36:05.806966
Duration: 141.555 ms
Changes:
----------
ID: configure_compose_scheduled_prune
Function: file.managed
Name: /etc/cron.d/omv-compose-prune
Result: True
Comment: File /etc/cron.d/omv-compose-prune is in the correct state
Started: 19:36:05.948628
Duration: 138.424 ms
Changes:
----------
ID: configure_compose_scheduled_start
Function: file.managed
Name: /etc/cron.d/omv-compose-start
Result: True
Comment: File /etc/cron.d/omv-compose-start is in the correct state
Started: 19:36:06.087150
Duration: 150.164 ms
Changes:
----------
ID: configure_compose_scheduled_stop
Function: file.managed
Name: /etc/cron.d/omv-compose-stop
Result: True
Comment: File /etc/cron.d/omv-compose-stop is in the correct state
Started: 19:36:06.237415
Duration: 138.497 ms
Changes:

Summary for debian
-------------
Succeeded: 13 (changed=1)
Failed: 2
-------------
Total states run: 15
Total run time: 23.039 s
[ERROR ] Command 'apt-get' failed with return code: 100
[ERROR ] stdout: Get:1 file:/var/cache/openmediavault/archives InRelease
Ign:1 file:/var/cache/openmediavault/archives InRelease
Get:2 file:/var/cache/openmediavault/archives Release
Ign:2 file:/var/cache/openmediavault/archives Release
Get:3 file:/var/cache/openmediavault/archives Packages
Ign:3 file:/var/cache/openmediavault/archives Packages
Get:4 file:/var/cache/openmediavault/archives Translation-en
Ign:4 file:/var/cache/openmediavault/archives Translation-en
Get:5 file:/var/cache/openmediavault/archives Translation-ru
Ign:5 file:/var/cache/openmediavault/archives Translation-ru
Get:3 file:/var/cache/openmediavault/archives Packages
Ign:3 file:/var/cache/openmediavault/archives Packages
Get:4 file:/var/cache/openmediavault/archives Translation-en
Ign:4 file:/var/cache/openmediavault/archives Translation-en
Get:5 file:/var/cache/openmediavault/archives Translation-ru
Ign:5 file:/var/cache/openmediavault/archives Translation-ru
Get:3 file:/var/cache/openmediavault/archives Packages
Ign:3 file:/var/cache/openmediavault/archives Packages
Get:4 file:/var/cache/openmediavault/archives Translation-en
Ign:4 file:/var/cache/openmediavault/archives Translation-en
Get:5 file:/var/cache/openmediavault/archives Translation-ru
Ign:5 file:/var/cache/openmediavault/archives Translation-ru
Get:3 file:/var/cache/openmediavault/archives Packages
Ign:3 file:/var/cache/openmediavault/archives Packages
Get:4 file:/var/cache/openmediavault/archives Translation-en
Ign:4 file:/var/cache/openmediavault/archives Translation-en
Get:5 file:/var/cache/openmediavault/archives Translation-ru
Ign:5 file:/var/cache/openmediavault/archives Translation-ru
Get:3 file:/var/cache/openmediavault/archives Packages
Ign:3 file:/var/cache/openmediavault/archives Packages
Get:4 file:/var/cache/openmediavault/archives Translation-en
Ign:4 file:/var/cache/openmediavault/archives Translation-en
Get:5 file:/var/cache/openmediavault/archives Translation-ru
Ign:5 file:/var/cache/openmediavault/archives Translation-ru
Get:3 file:/var/cache/openmediavault/archives Packages
Ign:3 file:/var/cache/openmediavault/archives Packages
Get:4 file:/var/cache/openmediavault/archives Translation-en
Ign:4 file:/var/cache/openmediavault/archives Translation-en
Get:5 file:/var/cache/openmediavault/archives Translation-ru
Ign:5 file:/var/cache/openmediavault/archives Translation-ru
Get:3 file:/var/cache/openmediavault/archives Packages
Get:4 file:/var/cache/openmediavault/archives Translation-en
Ign:4 file:/var/cache/openmediavault/archives Translation-en
Get:5 file:/var/cache/openmediavault/archives Translation-ru
Ign:5 file:/var/cache/openmediavault/archives Translation-ru
Ign:6 http://security.debian.org/debian rep InRelease
Hit:7 http://security.debian.org/debian-security bookworm-security InRelease
Get:8 https://openmediavault-plugin-developers.github.io/packages/... sandworm InRelease [3945 B]
Err:9 http://security.debian.org/debian rep Release
404 Not Found [IP: 146.75.118.132 80]
Get:10 https://deb.debian.org/debian stable-backports InRelease [53.7 kB]
Err:10 https://deb.debian.org/debian stable-backports InRelease
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 6ED0E7B82643E131 NO_PUBKEY 78DBA3BC47EF2265
Hit:11 https://openmediavault.github.io/packages sandworm InRelease
Hit:12 https://download.docker.com/linux/debian bookworm InRelease
Hit:13 http://packages.openmediavault.org/public sandworm InRelease
Hit:14 http://deb.debian.org/debian bookworm InRelease
Hit:15 http://deb.debian.org/debian bookworm-updates InRelease
Ign:16 http://deb.debian.org/debian-security security InRelease
Err:17 http://deb.debian.org/debian-security security Release
404 Not Found [IP: 146.75.118.132 80]
Ign:18 https://github.com/OpenMediaVault-Plugin-Developers/packages... deb InRelease
Ign:19 http://mirror.yandex.ru/debian deb InRelease
Err:20 http://mirror.yandex.ru/debian deb Release
404 Not Found [IP: 213.180.204.183 80]
Err:21 https://github.com/OpenMediaVault-Plugin-Developers/packages... deb Release
404 Not Found [IP: 140.82.121.3 443]
Reading package lists...
[ERROR ] stderr: E: The repository 'http://security.debian.org/debian rep Release' does not have a Release file.
W: GPG error: https://deb.debian.org/debian stable-backports InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 6ED0E7B82643E131 NO_PUBKEY 78DBA3BC47EF2265
E: The repository 'https://deb.debian.org/debian stable-backports InRelease' is not signed.
E: The repository 'http://deb.debian.org/debian-security security Release' does not have a Release file.
E: The repository 'http://mirror.yandex.ru/debian deb Release' does not have a Release file.
E: The repository 'https://github.com/OpenMediaVault-Plugin-Developers/packages... deb Release' does not have a Release file.
[ERROR ] retcode: 100
[ERROR ] An error was encountered while installing package(s): E: The repository 'http://security.debian.org/debian rep Release' does not have a Release file.
W: GPG error: https://deb.debian.org/debian stable-backports InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 6ED0E7B82643E131 NO_PUBKEY 78DBA3BC47EF2265
E: The repository 'https://deb.debian.org/debian stable-backports InRelease' is not signed.
E: The repository 'http://deb.debian.org/debian-security security Release' does not have a Release file.
E: The repository 'http://mirror.yandex.ru/debian deb Release' does not have a Release file.
E: The repository 'https://github.com/OpenMediaVault-Plugin-Developers/packages... deb Release' does not have a Release file.
[ERROR ] The named service docker is not available
[ERROR ] Command '/bin/systemd-run' failed with return code: 5
[ERROR ] stderr: Running scope as unit: run-rfbb4a7942d6b4404acea4defd80bf95f.scope
Failed to stop docker.service: Unit docker.service not loaded.
[ERROR ] retcode: 5
[ERROR ] Command '/bin/systemd-run' failed with return code: 5
[ERROR ] stderr: Running scope as unit: run-r29ebbf139bb9468e865b6b20d0ecbb37.scope
Failed to start docker.service: Unit docker.service not found.
[ERROR ] retcode: 5
[ERROR ] Failed to start docker.service: Unit docker.service not found. in /usr/share/php/openmediavault/system/process.inc:247
Stack trace:
#0 /usr/share/php/openmediavault/engine/module/serviceabstract.inc(62): OMV\System\Process->execute()
#1 /usr/share/openmediavault/engined/rpc/config.inc(187): OMV\Engine\Module\ServiceAbstract->deploy()
#2 [internal function]: Engined\Rpc\Config->applyChanges()
#3 /usr/share/php/openmediavault/rpc/serviceabstract.inc(124): call_user_func_array()
#4 /usr/share/php/openmediavault/rpc/serviceabstract.inc(155): OMV\Rpc\ServiceAbstract->callMethod()
#5 /usr/share/php/openmediavault/rpc/serviceabstract.inc(628): OMV\Rpc\ServiceAbstract->OMV\Rpc\{closure}()
#6 /usr/share/php/openmediavault/rpc/serviceabstract.inc(152): OMV\Rpc\ServiceAbstract->execBgProc()
#7 /usr/share/openmediavault/engined/rpc/config.inc(208): OMV\Rpc\ServiceAbstract->callMethodBg()
#8 [internal function]: Engined\Rpc\Config->applyChangesBg()
#9 /usr/share/php/openmediavault/rpc/serviceabstract.inc(124): call_user_func_array()
#10 /usr/share/php/openmediavault/rpc/rpc.inc(86): OMV\Rpc\ServiceAbstract->callMethod()
#11 /usr/sbin/omv-engined(546): OMV\Rpc\Rpc::call()
#12 {main}

Пр этом, конечно же сам Docker не установлен и не запущен. При попытке его перезапуска система выдаёт ошибку с указанием того, что Docker не установлен.
Попытка его переустановки заканчивается неудачей с ошибкой о потере соединения. Подобные сообщения в разных РУ-форумах или англоязычных пестрят сообщениями о том, что нужно все делать по инструкции с omv-extrass или дают ssl команды, которые в моем случае её помогают - принудительное переустановка либо заканчивается неудачей, либо реакция системы остаётся неизменной.

Все установки я делал как было указано на страничках соответствующих пакетов, в т.ч. omv-extras касательно последовательности установки Compose и настройки Docker.

Ребята, куда смотреть? Чего ему не хватает и откуда это взять?

PS. Я не программист и не сисадмин. Я простой инженер машиностроитель. Поэтому заранее прошу давать ответы и советы на обывательском языке


Показать полностью
20

Переход на Proxmox (Austria) с Hyper-V by Microsoft и VMware by Broadcom. Часть 11. Система прав

Для лиги лени: ничего нового, проходите мимо

Часть 1. Общая
Часть 2. Gitlab и Nexus
Часть 3. Ansible и Ansible AWS
Часть 4. Наконец переходим к Proxmox
Часть 5, не запланированная. Обновляем Proxmox с 8.4 до 9.0. Неудачно.
Часть 6. Возвращаемся к запуску Ansible
Часть 7. Разница концепций
Разница концепций. Часть 7.1 Обновления компонентов и система информирования.
Разница концепций. Часть 7.2 Сети
Разница концепций. Часть 7.3 предисловие к теме «Дисковое пространство».
Разница концепций. Часть 7.4 «Локальное дисковое пространство».
Часть 8. Разница концепций
Разница концепций. Часть 8.1 Расположение дисков VM
Разница концепций. Часть 8.2 Добавление дисков к хосту
Разница концепций. Часть 8.3 Настройка нескольких дисков
Разница концепций. Часть 8.4 Управление диском виртуальной машины.
Часть 9. Скорости дисков
Часть 10. Внешние СХД, iSCSI

Часть 11. Система прав

Сначала еще раз немного теории.
Про разницу аутентификации (ты чьих будешь, чей холоп ?) и авторизации (у вас есть право) много раз написано. Кроме них есть и единый источник истины (Single Source of Truth, SSOT). Истины для системы управления жизненным циклом пользователеля, User lifecycle management (ULM), то есть для плановых замен паролей и сертификатов, проверка того, что учетная запись еще включена и имеет те же самые права, что и ранее, и прочее.
Есть два подхода – локальное хранение учетных записей, и удаленное хранение учетных записей.
С локальным хранением все понятно, с удаленным хранением тоже - Identity and access management (IAM or IdAM) or Identity management (IdM), ISO/IEC 24760-1 a framework for identity management, и прочие слова.
Вокруг этого начинаются протоколы, фреймворки, методологии, ISO\ГОСТ, и конечные реализации, в том числе реализации системы прав через ролевую модель, RBAC \ ABAC \ PBAC, вот это все.
Отдельно существуют системы хранения секретов – покойный RatticDB, модные современные HashiCorp Vault, Bitwarden Vault, их клоны и так далее.

В чем проблема? Для малой организации на 2 сервера и 20 сотрудников никакой проблемы с раздачей прав нет. Альтернативно одаренные администраторы сразу дают всем права «на все», хотя бывает и хуже. Как вам, например, заведение на Linux серверах учетных записей root1, root2, root3 и передача паролей от них? Потому что менять руками сложно, а ssh \ bash \ Ansible слова слишком страшные.
Реализаций центральной служб каталогов несколько, многие (как  Novell Netware Directory Services (NDS) \ NetIQ eDirectory) уже ушли в небытие. Замена AD на SAMBA не является предметом данной статьи.

Предметом специальных BDSM практик является использование Realmd\ SSSD, или такое отвратительное явление, как хранение сертификатов в домене. Оба извращения не являются предметом данной статьи.

Что есть в Proxmox .
Конечно, в Proxmox есть встроенная авторизация, в web и SSH, и возможность использовать внешние сервисы.

По умолчанию в Proxmox (из коробки) включены:
Linux PAM standard authentication
Proxmox VE authentication server

Можно добавить Microsoft Active Directory (AD), LDAP и OpenID. Можно добавить 2FA.

В чем разница Linux PAM standard authentication и Proxmox VE authentication server?
Отвечает reddit:

long story short: PAM users are normal gnu/linux user, as in username/password that you can use to log in via ssh.

PVEAS otoh are Proxmox users, they cannot be used to log in via ssh, they are stored in the clustered/distributed storage along with proxmox configuration and they are the same on all the nodes of a proxmox clusters

Как это работает в GUI на уровне DC  
Завожу пользователя user_pam как Linux PAM на уровне DC, но в поле заведения пользователя нет пароля.
Есть выбор группы, но нет предопределенных групп.
При попытке смены пароля для пользователя user_pam получаю ошибку:
change password failed: user 'user_pam' does not exist (500)
В /etc/passwd – нет такого юзера.
В /etc/pve/user.cfg есть оба созданных
По команде «pveum user list» выводится таблица того, что насоздавал. В том числе user_pam@pam.
По команде pveum passwd user_pve@pve можно сменить пароль для юзера в PVE
По команде pveum passwd user_pam@pam сменить пароль тоже нельзя – получаю ошибку
change password failed: user 'user_pam' does not exist

Но в таблице (pveum user list) он есть.

Когда я заводил юзера user_pve в realm Proxmox VE, система сразу предложила не только создать юзера, но и назначить ему права из заранее созданных наборов ролей – от Administrator до No access. 
Но это окно почему-то возникает только один раз, и это магия.

В остальных случаях оказывается, что интерфейс писали люди со своими представлениями, и права выставляются на вкладке Permission, это не только именование раздела.
И изнутри свойств объекта user эти права можно только посмотреть. Как и из Permission, или add, или remove

Остальные права выставляются как права на объект в дереве обьектов

В сочетании с ролями «что с ними делать». Наличие двух ролей Administrator и PVEAdmin только делает жизнь веселее

Управление входом в GUI отличается тем же своеобразием.
В CLI я вижу пользователя как root@pam 
Но войти в GUI, как root@pam я не могу, вне зависимости от выбора realm.
То есть, система не может сама опознать, что я ввел @realm, и realm надо выбирать вручную в GUI, и входить без указания @realm.

Управление ролями в GUI тоже отличается неожиданным подходом. К роли можно выбрать привилегии, но в выпадающем списке нет чекбоксов, но работает OnClick и OnClickAgain , то есть выбор по клику. Это было очень неожиданно.

Чуть странная, с первого взгляда, но понятная ролевая модель. То что у Microsoft называется AGDLP, тут соответственно это User <> Group <> Role <> Permissions

Отредактировать права из GUI нельзя, можно только удалить и создать. УДОБНО!

Права на «просто логин» можно дать через роль No Access, ок, понятно.
Права на консоль можно дать через привилегию Sys.Console, только она не работает «из коробки». Привилегию я выдал, причем на /», причем наследование тоже какое-то не очевидное. Но это привилегия не на запуск консоли, а на право на запуск консоли, и консоль снова запрашивает логин-пароль, но user_pve прав на вход в консоль не имеет. Решение «делать через sudoerr» описано, но проблеме со всей системой прав уже семь лет.

Наблюдается расхождение. Пользователь может быть заведен в Linux, и иметь права на SSH, и на su, но не иметь прав на pveum.

Очень, очень странно.

Примечание. В Hyper-V , несмотря на развесистую систему прав, нет делегирования права на только Hyper-V или отдельную оснастку. Можно знатно поиграть в PowerShell Web Access (PSWA),  PswaAuthorizationRule  и security descriptor definition language (SDDL), но это надо знать, во что играть.

Заключение.

Система понятна, много описано, много описано на практических примерах и форуме. Жить можно, но root отключить нельзя.
По многим причинам, в том числе я еще не описывал все приключения с кластеризацией.

Литература
Difference between RBAC vs. ABAC vs. ACL vs. PBAC vs. DAC
Red Hat Chapter 2. Using Active Directory as an Identity Provider for SSSD
Red Hat Chapter 3. Using realmd to Connect to an Active Directory Domain
Realmd and SSSD Active Directory Authentication
Proxmox User Management
Proxmox Proxmox VE Administration Guide - 14. User Management
Proxmox forum group permissions
Proxmox forum "change password failed: user 'johnsmith' does not exist (500)"
Proxmox forum Add user/group account with ssh access and root privileges
Proxmox forum SSH Login with VE Authentication Server
Proxmox Bugzilla Bug 1856 - System Updates with non-root User using Web-GUI
Proxmox CLI pveum(1)
Reddit ELI5: PAM vs PVE Authentication Server
Microsoft PowerShell Web Access in action

Показать полностью 4
7

А давайте встроим ии в powershell. Часть вторая. Поисковик спецификаций

Интерфейс командной строки программы

Интерфейс командной строки программы

В прошлый раз мы увидели, как с помощью powershell можем взаимодействовать с моделью Gemini через интерфейс командной строки. В этой статье я покажу как извлечь пользу из наших знаний. Сегодня мы соберем интерактивный справочник, который на вход будет принимать параметры компонента (марка, модель, категория, артикул и т. п.), а возвращать интерактивную таблицу с характеристиками, полученную от модели Gemini.

Что нам понадобится:
Gemini-CLI
OutConsoleGridView

Дисклеймер. В пикабу нет редактора кода - поэтому такое форматирование и картинки. В конце поста я дам ссылку на github. Почитайте, и если вам интересно, смотрите код на гитхабе.

Инженеры, разработчики и другие специалисты сталкиваются с тем, что нужно узнать точные параметры, например материнской платы, автомата в электрощитке или сетевого коммутатора. Наш справочник всегда будет под рукой и по запросу соберет информацию, уточнит параметры в интернете и вернет искомую таблицу. В таблице можно выбрать необходимый параметр/ы и по необходимости продолжить углубленный поиск. В дальнейшем мы научимся передавать результат по конвейеру для дальнейшей обработки: экспорта в таблицу Excel, Google таблицу, хранения в базе данных или передачи в другую программу В случае неудачи модель посоветует, какие параметры надо уточнить. Впрочем, смотрите сами:

Шаг 1: Настройка

Назначение строк:

  • $env:GEMINI_API_KEY = "..." — устанавливает API ключ для доступа к Gemini AI

  • if (-not $env:GEMINI_API_KEY) — проверяет наличие ключа, завершает работу если его нет

  • $scriptRoot = Get-Location — получает текущую рабочую директорию

  • $HistoryDir = Join-Path... — формирует путь к папке для хранения истории диалогов (.gemini/.chat_history)

  • $timestamp = Get-Date... — создает временную метку в формате 2025-08-26_14-30-15

  • $historyFileName = "ai_session_$timestamp.jsonl" — генерирует уникальное имя файла сессии

  • $historyFilePath = Join-Path... — создает полный путь к файлу истории текущей сессии

Проверка окружения — что должно быть установлено.

Что проверяется:

  • Наличие Gemini CLI в системе — без него скрипт не работает

  • Файл GEMINI.md — содержит системный промпт (инструкции для AI)

  • Файл ShowHelp.md — справка для пользователя (команда ?)

Основная функция взаимодействия с AI.

Задачи функции:

  • Вызывает Gemini CLI с указанной моделью и промптом

  • Захватывает все выводы (включая ошибки)

  • Очищает результат от служебных сообщений CLI

  • Возвращает чистый ответ AI или $null при ошибке

Функции управления историей.

Назначение:

  • Add-History — сохраняет пары «вопрос-ответ» в JSONL формате

  • Show-History — показывает содержимое файла истории

  • Clear-History — удаляет файл истории текущей сессии

Функция отображения выбранных данных

Show-SelectionTable

Show-SelectionTable

Задача функции: После выбора элементов в Out-ConsoleGridView показывает их в консоли в виде аккуратной таблицы, чтобы пользователь видел, что именно выбрал.

Основной рабочий цикл.

Основой цикл программы

Основой цикл программы

Ключевые особенности:

  • Индикатор [Выборка активна] показывает, что есть данные для анализа

  • Каждый запрос включает всю историю диалога для поддержания контекста

  • AI получает и историю, и выбранные пользователем данные

  • Результат пытается отобразиться как интерактивная таблица

  • При неудаче парсинга JSON показывается обычный текст

Структура рабочей директории.

Проследим весь жизненный цикл нашего скрипта - что происходит с момента запуска и до получения результатов.

Инициализация: подготовка к работе

При запуске скрипт первым делом настраивает рабочее окружение. Он устанавливает API ключ для доступа к Gemini AI, определяет текущую папку как базовую директорию и создает структуру для хранения файлов. Особое внимание уделяется истории диалогов - для каждой сессии создается уникальный файл с временной меткой, например ai_session_2025-08-26_14-30-15.jsonl.

Затем система проверяет, что все необходимые инструменты установлены. Она ищет Gemini CLI в системе, проверяет наличие файлов конфигурации (системный промпт и справка). Если что-то критично важное отсутствует, скрипт предупреждает пользователя или завершает работу.

Запуск интерактивного режима

После успешной инициализации скрипт переходит в интерактивный режим - показывает приветственное сообщение и ждет ввода от пользователя. Приглашение выглядит как 🤖AI :) > и меняется на 🤖AI [Выборка активна] :) > когда у системы есть данные для анализа.

Обработка пользовательского ввода

Каждый ввод пользователя сначала проверяется на служебные команды через функцию Command-Handler. Эта функция распознает команды ? (справка из файла ShowHelp.md), history (показать историю сессии), clear и clear-history (очистить файл истории), gemini help (справка по CLI), exit и quit (выход). Если это служебная команда, она выполняется немедленно без обращения к AI, и цикл продолжается.

Если это обычный запрос, система начинает формировать контекст для отправки в Gemini. Она читает всю историю текущей сессии из JSONL файла (если он существует), добавляет блок с данными из предыдущей выборки (если есть активная выборка), и объединяет все это с новым запросом пользователя в структурированный промпт с разделами "ИСТОРИЯ ДИАЛОГА", "ДАННЫЕ ИЗ ВЫБОРКИ" и "НОВАЯ ЗАДАЧА". После использования данные выборки обнуляются.

Взаимодействие с искусственным интеллектом

Сформированный промпт отправляется в Gemini через командную строку. Система вызывает gemini -m модель -p промпт, захватывает весь вывод и очищает его от служебных сообщений CLI. Если происходит ошибка на этом этапе, пользователь получает предупреждение, но скрипт продолжает работать.

Обработка ответа AI

Полученный от AI ответ система пытается интерпретировать как JSON. Сначала она ищет блок кода в формате json..., извлекает содержимое и пытается его распарсить. Если такого блока нет, парсит весь ответ целиком. При успешном парсинге данные отображаются в интерактивной таблице Out-ConsoleGridView с заголовком "Выберите строки для следующего запроса (OK) или закройте (Cancel)" и множественным выбором. Если JSON не распознается (ошибка парсинга), ответ показывается как обычный текст в голубом цвете.

Работа с выборкой данных

Когда пользователь выбирает строки в таблице и нажимает OK, система выполняет несколько действий. Сначала вызывается функция Show-SelectionTable, которая анализирует структуру выбранных данных: если это объекты с свойствами, она определяет все уникальные поля и показывает данные через Format-Table с автоподбором размера и переносом. Если это простые значения, отображает их как нумерованный список. Затем выводит счетчик выбранных элементов и сообщение "Выборка сохранена. Добавьте ваш следующий запрос (например, 'сравни их')".

Выбранные данные преобразуются в сжатый JSON с глубиной вложенности 10 уровней и сохраняются в переменной $selectionContextJson для использования в следующих запросах к AI.

Ведение истории

Каждая пара "запрос пользователя - ответ AI" сохраняется в файл истории в формате JSONL. Это обеспечивает непрерывность диалога - AI "помнит" весь предыдущий разговор и может ссылаться на ранее обсуждавшиеся темы.

Цикл продолжается

После обработки запроса система возвращается к ожиданию нового ввода. Если у пользователя есть активная выборка, это отражается в приглашении командной строки. Цикл продолжается до тех пор, пока пользователь не введет команду выхода.

Практический пример работы

Представим, что пользователь запускает скрипт и вводит "RTX 4070 Ti Super":

  1. Подготовка контекста: Система берет системный промпт из файла, добавляет историю (пока пустую) и новый запрос

  2. Обращение к AI: Полный промпт отправляется в Gemini с просьбой найти характеристики видеокарт

  3. Получение данных: AI возвращает JSON с массивом объектов, содержащих информацию о различных моделях RTX 4070 Ti Super

  4. Интерактивная таблица: Пользователь видит таблицу с производителями, характеристиками, ценами и выбирает 2-3 интересующие модели

  5. Отображение выборки: В консоли появляется таблица с выбранными моделями, приглашение меняется на [Выборка активна]

  6. Уточняющий запрос: Пользователь пишет "сравни производительность в играх"

  7. Контекстный анализ: AI получает и исходный запрос, и выбранные модели, и новый вопрос - дает детальное сравнение именно этих карт

Завершение работы

При вводе exit или quit скрипт корректно завершается, сохранив всю историю сессии в файл. Пользователь может в любой момент вернуться к этому диалогу, просмотрев содержимое соответствующего файла в папке .chat_history.

Вся эта сложная логика скрыта от пользователя за простым интерфейсом командной строки. Человек просто задает вопросы и получает структурированные ответы, а система берет на себя всю работу по поддержанию контекста, парсингу данных и управлению состоянием диалога.

Серия «Философия PowerShell»
Серия «gemini-cli»

Полезно? Подпишись.
Понравилось — ставь «+»
Задавай вопросы в комментариях 👇👇👇
Удачи! 🚀

UPD:

А в этом посте я рассказываю о А давайте встроим ии в powershell. Начало работы с MS AI Shell в PowerShell

Показать полностью 7 1
2

Низкая скорость wifi, как поправить?

Схема: роутер1 подключён к сети интернет. работает DHCP.
Роутер 2 подключен через wan порт к lan порту роутера1 и получает от него адрес. На роутере1 адрес за роутером2 зарезервирован.
На роутере2 работает DHCP, он раздает wifi. Устройства корректно получают от роутера2 адреса, корректно ходят в интернет, но скорость очень низкая.
Если роутер2 подключить к роутеру 1 через lan порт - скорость приходит в норму.
Подскажите, куда смотреть?

12

Задачи имитационной безопасности в России часть 2

Для лиги лени: Ит-шники неправильно понимают бизнес задачи имитационной безопасности

Часть 1: Задачи отдела имитационной безопасности сводятся не к устранению проблем, а к поиску виноватых.

Часть 2.
Есть два прямо противоположных варианта работы имитационной безопасности.
Вариант первый. Назову, условно, «А». Задачи и процессы имитации безопасности строятся таким образом, чтобы менеджмент максимально от них дистанцировался, и максимально размыть ответственность. Методы размывания ответственности отлично и неоднократно описаны.
Глобальную бизнес-цель «в деньгах» при этом никто считать не будет. В некоторых случаях это, скорее, косвенный налог на уполномоченную (кто сказал аффилированную? Нет нет!) фирму.

Вариант второй. Назову, условно, «М». Задачи и процессы строятся таким образом, чтобы в системе управления образовалось двое (трое, много) властие. При этом ответственность не размывается, а перекладывается на конечного исполнителя. Это хороший (смотря для кого, конечно), метод экономии фондов оплаты труда, показываемый менеджменту в цифрах. Задачи и сроки (невыполнимые) со стороны отдела имитации безопасности поставлены, и на этом их задача выполнена, КПИ и бизнес цели отдела имитации достигнуты.

До какой степени маразма может дойти ситуация?
До любой, пока это не влияет на бизнес показатели. То есть, пока не падают продажи, точнее, пока не падают настолько, что это становится не только заметно, но и чувствительно для акционеров, и пока не начинает влиять на премию лиц, принимающих решения (ЛПР).
Даже падение качества сервиса, если это:
- не несет прямые и моментальные убытки, и
- не влияет на отсутствие обратной связи и
- не влияет на отсутствие регулировки контура управления.
Не повлияет на принятие (или не принятие – бездействие, не выдача ответа это тоже решение) управленческих решений, со стороны лиц, принимающих решения.

Наоборот, ИТ отделы (иногда справедливо) рассматриваются как куча бездельников, которые могут в 2-3 раза повысить производительность труда, но не хотят. Зажрались, одни расходы на них. Дармодеды!
Крайне редко (никогда) ситуация доходит до того, чтобы бизнес выступил арбитром, тем более, если проблема находится на уровне недовольства конечных исполнителей, тем более недовольства конечных исполнителей из центра расходов (Как вы знаете, ИТ относится к центру расходов по финансам).

Возникает ли ситуация «бизнес вдруг как поймет, что мы хорошие, а они плохие»?
Нет. Не возникает. Потому что «они» хорошие, только не в понимании ИТ.
Может возникнуть другая ситуация – аудит. Там, где появляется отдел имитации, зачастую причиной становится появление имитации аудита от регулятора. Почему имитации? Потому что есть финансовые соображения, что бизнес сразу совсем закрывать нельзя, нужно выписать рекомендации по устранению. Сначала посвистеть, потом пробить свободный удар (с ноги), потом выписать желтую карточку, еще одну желтую карточку, и только потом выписать красную. Заказчик аудита, точнее заинтересованная в аудите сторона, прекрасно понимает, что задачи аудита – не устранить «обиды и несправедливости», а намекнуть  бизнес-блоку, чтобы тот уделил чуть больше внимания .. Вы подумали центру расходов? Нет. Улучшению имитации «все хорошо». И даже это всегда очень долгий процесс, полтора-два года, за время которого все участники успеют получить по 2-3 годовые премии. Стоит ли волноваться про процессы такой длительности, если потом можно еще и сменить работу?

Заключение.

Квадрат Декарта помогает оценить ситуацию, ответив на четыре вопроса:
1) Что будет, если это произойдет?
2) Что будет, если этого не произойдет?
3) Чего не будет, если это произойдет?
4) Чего не будет, если этого не произойдет?

Исходя из него, и стоит оценивать ситуацию с задачами по имитации безопасности. Может оказаться так, что вся эта имитация как любовь в резинке: движение есть, прогресса нет.

Иногда бывает так, что компанию просто доедают. Цинично, без сожалений, просто дожигая все, что можно. Типа как киты планктон, ничего личного.
При этом на публику будут рассказы про жертвование собой, и прочие драмы.

Примеров полно, и ситуация с имитацией безопасности только один из вариантов.

Именно о таких случаях китайцы в древности говорили: "Когда носорог глядит на луну, он напрасно тратит цветы своей селезенки".

Показать полностью
12

Переход на Proxmox (Austria) с Hyper-V by Microsoft и VMware by Broadcom. Часть 10. Внешние системы хранения данных - iSCSI

Для лиги лени: ничего нового, проходите мимо.

Часть 1. Общая
Часть 2. Gitlab и Nexus
Часть 3. Ansible и Ansible AWS
Часть 4. Наконец переходим к Proxmox
Часть 5, не запланированная. Обновляем Proxmox с 8.4 до 9.0. Неудачно.
Часть 6. Возвращаемся к запуску Ansible
Часть 7. Разница концепций
Разница концепций. Часть 7.1 Обновления компонентов и система информирования.
Разница концепций. Часть 7.2 Сети
Разница концепций. Часть 7.3 предисловие к теме «Дисковое пространство».
Разница концепций. Часть 7.4 «Локальное дисковое пространство».
Часть 8. Разница концепций
Разница концепций. Часть 8.1 Расположение дисков VM
Разница концепций. Часть 8.2 Добавление дисков к хосту
Разница концепций. Часть 8.3 Настройка нескольких дисков
Разница концепций. Часть 8.4 Управление диском виртуальной машины.
Часть 9. Скорости дисков

Часть 10. Внешние системы хранения данных

Что есть в 2025 году из протоколов подключения систем хранения?
FCP, Fibre Channel Protocol. Старый, постепенно отмирающий, но менять надежность и привычность FCP на DCB сложно. Не столько сложно технически, сколько организационно. Для внедрения нужно будет бить сетевиков палкой, чтобы не пытались рассказывать про LAG вне контекста Mellanox 6 (или 8, не помню).
iSCSI \  iSCSI Extensions for RDMA (iSER). C iSCSI работает вообще все, вопрос с какой скоростью и с какими настройками. iSER при этом под вопросом самого своего существования.
SMB Multichannel.  Живее всех живых.
NVMe over Fabrics в ее вариантах – over FC, over Ethernet, over IB.

Поскольку речь про Proxmox, то SMB Multichannel, крайне удобная и рабочая конструкция для S2D, Storage Spaces Direct, тут рассматриваться не будет.
Подключение по FC сейчас, ввиду политики Broadcom,  вещь неоднозначная.

Остается iSCSI.

Открываем OceanStor Dorado and OceanStor 6.x and V700R001 Host Connectivity Guide for Red Hat и читаем до просветления главу Establishing iSCSI Connections и Recommended Configurations for 6.x and V700R001 Series Storage Systems for Taking Over Data from Other Huawei Storage Systems When the Host Uses the OS Native Multipathing Software.

Или, если у вас другой вендор системы хранения, читаем его документацию. Вообще, конечно, очень странно устроен Linux в части device-mapper-multipath. Точнее, у Hyawei пишется, что настройки нужно делать в alua, и не содержит указаний на настройки rr_min_io, хотя path_selector и выставлен в "round-robin 0". В главе про ESXi для AFA (all flash array) указано про rr=1, а тут нет. Но это настройки больше про скорость, а так и 1000 IOPS сойдет (но может быть не так просто).

Теперь к практике. Сделаю iSCSI target на Windows server, эта функция там из коробки лет 20, и добавлю к Proxmox.

Сначала спланирую сеть, как обычно – с извращениями.
Vlan 11, Windows server 172.16.211.151/24; Proxmox 172.16.211.162/24
Vlan 12, Windows server 10.0.12.151/24; Proxmox 10.0.12.162/24
LACP для iSCSI не рекомендован много кем, в том числе из-за сложностей с Multiple Connections per Session.
Добавляю новый свитч:
New-VMSwitch -Name Privet01 -SwitchType Private
Добавляю по 2 сетевые в обе VM -
Add-VMNetworkAdapter -VMName Proxmox -SwitchName Privet01 -Name V11
Add-VMNetworkAdapter -VMName Proxmox -SwitchName Privet01 -Name V12
Set-VMNetworkAdapterVlan -VMName Proxmox -Access -VlanId 11 -VMNetworkAdapterName V11
Set-VMNetworkAdapterVlan -VMName Proxmox -Access -VlanId 12 -VMNetworkAdapterName V12
и аналогично для второй VM

В этой конфигурации есть проблема. По умолчанию для VMNetworkAdapter включен VMQ. В некоторых сценариях и с некоторыми сетевыми картами эта функция работает очень плохо, вызывая какие-то разрывы, там, где не было ни единого разрыва, причем влияя на весь сетевой стек.

Я бы рекомендовал всем, кто использует Hyper-V и VMQ, проводить тестирование работы до запуска в продуктив.

В этой конфигурации есть еще одна проблема. После создания нового виртуального коммутатора и добавления двух сетевых карт в VM Windows server, первая сетевая карта в VM перестала получать адрес по DHCP, и основной адаптер стал (может, и был, я не проверил)
Microsoft Hyper-V Network Adapter #2
Первый раз такое вижу. Ситуация усугубляется тем, что старый интерфейс управления сетями в Windows server 2025 спрятали, а новый убогий.
Удалил вновь созданный виртуальный коммутатор, хотя он был SwitchType Private, все пересоздал, перезагрузил, сделал статичный IP внутри VM – вроде, работает.
Вопрос «что это было» не раскрыт.

Настройка VM Windows Server
Самое неудобное – это найти по MAC адресу, какая сетевая карта куда включилась.
Get-NetAdapter
вы думали
Set-NetIPAddress -InterfaceIndex 10 -IPAddress 172.16.211.151 -PrefixLength 24 ?

Ничего подобного.
New-NetIPAddress -InterfaceIndex 10 -IPAddress 172.16.211.151 -PrefixLength 24
New-NetIPAddress -InterfaceIndex 12 -IPAddress 10.0.12.151 -PrefixLength 24

И, конечно,
Install-WindowsFeature -Name FS-iSCSITarget-Server –IncludeManagementTools

Настройка Proxmox
ip a, только для того чтобы увидеть MAC адреса интерфейсов
nano /etc/network/interfaces

auto vmbr1.11

iface vmbr1.11 inet static
address 172.16.211.162/24

auto vmbr1
iface vmbr1 inet manual
bridge-ports eth2
bridge-stp off
bridge-fd 0
bridge-vlan-aware yes
bridge-vids 11

не забываем про ifreload -a
И даже пинг не работает на таком свиче.  Что-то прописать забыл. Очень неудобная история с системой интерфейсов в Proxmox. С одной стороны со схемой тут я переусложнил, с другой – в целом система настройки Linux bridge – vlan interface не самая удобная. Слишком много сущностей приходится прописывать.
Примечание. Не забыл. Прописал лишний раз – у меня же отдельный интерфейс отдан в VM, ему не надо настраивать vlan, как будто он в транк включен. Поэтому все проще, не забыть разрешить any any в windows firewall (в рабочих сетях так делать, конечно, не надо), и :

iface eth2 inet manual
auto vmbr2

iface vmbr2 inet manual
address 172.16.211.162/24
bridge-ports eth2
bridge-stp off
bridge-fd 0

аналогично настроить iface eth3, и заработало .
желательно сразу посмотреть ID инициатора -
cat /etc/iscsi/initiatorname.iscsi | grep InitiatorName=

Отдаем iSCSI target с Windows server

Тут ничего нового уже много лет. Server manager – files services – iSCSI – далее- далее – прописать (для стенда сойдет) IP адреса и готово. Конечно, с CHAP. Получаем iSCSI target с Windows server

Два НО.
Первое НО. Нужно заранее прочитать про  Set-IscsiTargetServerSetting и сделать
Set-IscsiTargetServerSetting -IP 192.168 (что там у меня)  -Enable $False
и проверить
netstat -an | findstr "3260"
Менять ли приоритеты для IPv6 или их отключать – ваше личное дело. Напоминаю, что чекбокс «отключить ipv6» не работает уже лет 10. Нужно делать как написано в Guidance for configuring IPv6 in Windows for advanced users
или сделать
Get-NetIPAddress | Select IPAddress
Set-IscsiTargetServerSetting для ipv6
и перепроверить по старой школе
netstat -an | findstr "3260"
Или по новой школе
Get-NetTCPConnection | where {$_.LocalPort -eq 3260}

Второе НО.
Для тестов не забыть сделать:
New-NetFirewallRule -DisplayName "001  permit any 172.16.211.162" -Direction Inbound -Action Allow -RemoteAddress 172.16.211.162
New-NetFirewallRule -DisplayName "001  permit any 10.0.12.162" -Direction Inbound -Action Allow -RemoteAddress 10.0.12.162

С IPv6 поступать опционально, внимательно прочитав Guidance for configuring IPv6 in Windows for advanced users

Подключаем iSCSI target с Windows server на Proxmox (Initiator) - отладка

В GUI подключение iSCSI находится в datacenter-storage, а не в  управлении хостом.
Редактируем /etc/iscsi/iscsid.conf согласно статье Proxmox Multipath и рекомендациям вендора СХД. Или не редактируем!
открываем GUI и .. и видим фигу, потому что полей для авторизации \ CHAP нет, а без них никакого target.
Отключаю CHAP, и все равно ничего не видно. Как обычно, в GUI никаких деталей нет, поэтому проверять придется руками.
Начнем по встроенной инструкции по кнопке HELP в GUI -
pvesm status
pvesm scan iscsi 172.16.211.151:3260:3260
и получу iscsiadm: No portals found

Пойду почитаю Подключение iSCSI диска в Proxmox,
iscsiadm --mode discovery --type sendtargets --portal 172.16.211.151

и получу тот же - iscsiadm: No portals found
nc -z 172.16.211.151 3260
выдает ничего. Пинг есть.

Поиграем в отладку!
nc -v 172.16.211.151 3260 со стороны инициатора (proxmox) работает с выводом результата
[172.16.211.151] 3260 (iscsi-target) open
netstat -an | findstr "211" со стороны target (Windows) работает с выводом результата
TCP  172.16.211.151:3260  172.16.211.162:37638  ESTABLISHED

Осталось протереть глаза, и оказалось, что я, вводя разрешенные IP в target, ввел не 172.16.211.162, а 172.16.11.162
ввел нужные данные, и
pvesm scan iscsi 172.16.211.151:3260 
выдал все что надо.
Иначе бы пришлось лезть в tcpdump с обеих сторон. Для Windows, после ухода на пенсию (deprecated) Microsoft Network Monitor и Microsoft Message Analyzer, пока что есть wireshark.

Верну обратно chap, user = user, password = password1234, добавлю через GUI, посмотрю что вышло в
/etc/pve/storage.cfg
Вышло как по руководству,

iscsi: mynas
portal 10.10.10.1
target iqn.2006-01.openfiler.com:tsn.dcb5aaaddd
content none

И затем в GUI делаем Datacenter – Storage – add – LVM –

То, что это делается на уровне DC, а не на уровне хоста, раздражает конечно. Как и vmotion диска на уровне VM – hardware.

При этом, даже когда я включил CHAP, но или ранее был сделан логин, или еще по каким-то причинам сессия не переподключилась, то можно сделать LVM том , но при попытке перенести на него тестовую VM – получить:
iscsiadm: initiator reported error (8 - connection timed out)
iscsiadm: Could not login to [iface: default, target: iqn.1991-05.com.microsoft:win25-target01-target, portal: 192.168.2.150,3260].
iscsiadm: initiator reported error (19 - encountered non-retryable iSCSI login failure)
iscsiadm: Could not log into all portals

После таких включений на стендах всегда надо перегружать initiator, да и target не повредит.

Подключаем iSCSI target с Windows server на Proxmox (Initiator) с CHAP

Для начала удалю все, что сделал до этого – пустой LVM и подключение iSCSI. Тоже неудобно, конечно – есть у тебя том, зачем на нем еще сущности типа LVM применять.
Удалить iSCSI подключение из управления DC нельзя, будет ошибка
delete storage failed: can't remove storage - storage is used as base of another storage (500)

При этом все сущности хранения лежат в одной куче – и iSCSI, и LVM, и все на уровне DC, а не ноды. Поэтому тут тоже надо сразу делать соглашение по именованию.

Удалю сначала LVM, тогда дает удалить и iSCSI.

Без ввода CHAP в GUI (его там нет) подключение к порталу проходит . Но при попытке создать LVM не возникает список томов для создания LVM.
Придется на ручном приводе (в норме, конечно, через Ansible)

nano (или vi) /etc/iscsi/iscsid.conf

Конфигурация содержит блоки:
1 # To enable CHAP authentication set node.session.auth.authmethod
2 # To set a CHAP username and password for initiator
3 # To set a CHAP username and password for target(s)
4 # To enable CHAP authentication for a discovery session to the target, set discovery.sendtargets.auth.authmethod to CHAP. The default is None.
5 # To set a discovery session CHAP username and password for the initiator
6 # To set a discovery session CHAP username and password for target(s)

Мне нужны
node.session.auth.authmethod = CHAP
node.session.auth.username = user
node.session.auth.password = password1234

и потом по вкусу
systemctl restart iscsid
iscsiadm -m node --portal "172.16.211.151" --login
после чего должны получить:

iscsiadm: default: 1 session requested, but 1 already present.
iscsiadm: Could not log into all portals

посмотрим, что там:
iscsiadm -m discovery -p 172.16.211.151 -t st
о, все работает, нужные порталы есть, не нужных порталов нет!

Если вы все сделали правильно, то в GUI появится возможность выбора base volume

И при попытке создать LVM вы получите ошибку –

create storage failed: command '/sbin/pvs --separator : --noheadings --units k --unbuffered --nosuffix --options pv_name,pv_size,vg_name,pv_uuid /dev/disk/by-id/scsi-360003ff44dc75adcbb96b955813029da' failed: exit code 5 (500)

Хотя должна была быть другая ошибка -
create storage failed: vgcreate vg01 /dev/disk/by-id/scsi-360003ff44dc75adc839073953a451b73 error: Cannot use device /dev/sdc with duplicates. (500)

Отключу один IP на windows target и проверю:

iscsiadm -m session

service open-iscsi status
systemctl restart iscsid.service
systemctl restart open-iscsi.service
/etc/init.d/open-iscsi restart
Ничего не помогает, сессия со стороны Linux до 10.0.12.151, была и осталась.  Со стороны Windows target TCP сессий при этом нет.
И так ничего не получается.
И ладно, да и пошло все, семь бед – один reboot.
после ребута все хорошо, один путь, но при создании группы получаю ошибку, что группа уже создана!
create storage failed: device '/dev/disk/by-id/scsi-360003ff44dc75adcbb96b955813029da' is already used by volume group 'VGiscsi01' (500)

Удалю ее (на уровне хоста в disks – LVM) и пересоздам.
ВЖУХ И ВСЕ СОЗДАЛОСЬ.

Снова удалю, верну обратно два пути на target, перезагружу proxmox (видимо, самый надежный метод),
посмотрим, что там:

iscsiadm -m discovery -p 172.16.211.151 -t st , отлично, два портала на месте.
Создам еще раз LVM через GUI, и отлично, ошибка создания воспроизвелась,  
create storage failed: command '/sbin/pvs --separator : --noheadings --units k --unbuffered --nosuffix --options pv_name,pv_size,vg_name,pv_uuid /dev/disk/by-id/scsi-360003ff44dc75adcbb96b955813029da' failed: exit code 5 (500)
И группа iscsiVG02 создалась! Хотя и не должна была!
Надо будет воспроизвести и баг репорт написать.

Подключаем iSCSI target с Windows server на Proxmox (Initiator) с CHAP и Multipath
Читаем ISCSI Multipath, видим что текст устарел, идем на Multipath. В втором окне не забываем открыть Подключение iSCSI диска в Proxmox – там как раз про multipath есть параграф.
В старом тексте есть абзац

# apt-get install multipath-tools

В новом тексте
apt install multipath-tools
Но почему-то в середине текста.

Окей, multipath-tools поставил,
nano /etc/iscsi/iscsid.conf поправил, lsblk посмотрел, wwid сравнил
/lib/udev/scsi_id -g -u -d /dev/sdc
/lib/udev/scsi_id -g -u -d /dev/sdd
остальные настройки прописал, только для 7.3-6. сервис был
systemctl restart multipath-tools.service
а в 9 стал
systemctl restart multipathd.service
или я опять что-то путаю.
Доделаю. multipath -r; multipath –ll; multipath -v3

Следующий раздел меня, конечно, удручает:
Multipath setup in a Proxmox VE cluster If you have a Proxmox VE cluster, you have to perform the setup steps above on each cluster node. Any changes to the multipath configuration must be performed on each cluster node. Multipath configuration is not replicated between cluster nodes.

Впрочем, на ESXi с прописыванием esxcli storage nmp satp list и esxcli storage nmp satp rule, на каждом хосте, все то же самое.

Далее далее, новая VG создалась. ВЖУХ и трансфер прошел.
На физическом сервере можно было померять скорость доступа и нагрузку на интерфейсы, но в nested среде особого смысла в этом нет.

Может быть, потом.

Литература

Microsoft Set-IscsiTargetServerSetting
Microsoft  Simplified SMB Multichannel and Multi-NIC Cluster Networks
Microsoft Guidance for configuring IPv6 in Windows for advanced users
Microsoft  New-NetFirewallRule
Huawei OceanStor Dorado and OceanStor 6.x and V700R001 Host Connectivity Guide for Windows
Huawei OceanStor Dorado and OceanStor 6.x and V700R001 Host Connectivity Guide for Red Hat
Huawei Recommended Configurations for 6.x and V700R001 Series Storage Systems for Taking Over Data from Other Huawei Storage Systems When the Host Huawei Uses the OS Native Multipathing Software.

NVMe over Fabrics: Fibre Channel vs. RDMA
Synology What is SMB3 Multichannel and how is it different from Link Aggregation?
Обзор NVMe over Fabric, NVMe-oF
Configuring Highly Available NVMe-oF Attached Storage in Proxmox VE
High Performance Shared Storage for Proxmox VE

RH 4.4. Multipaths Device Configuration Attributes
RH Chapter 5. Modifying the DM Multipath configuration file

ISCSI: LACP vs. MPIO
802.3ad LACP for ISCSI
Proxmox Network Configuration

Proxmox Storage: iSCSI
Proxmox Multipath
Proxmox forum iSCSI Huawei Oceanstore Dorado 3000 LVM and Multipath
Proxmox forum How to Configure and Manage iSCSI Storage in Proxmox for Your Virtual Machines?
Proxmox forum How to setup multipathing on Proxmox VE?
Proxmox forum iSCSI with CHAP
Proxmox forum Proxmox, iSCSI and CHAP
Proxmox forum Proxmox 7.1, iSCSI, chap, HPE MSA and problems
Proxmox forum How to move VM to another storage

Подключение iSCSI диска в Proxmox

Показать полностью 6
14

Ответ на пост «Среда разработки и производственная среда»2

На картинке ещё лайтово. По факту эксплуатация спрашивает зачем в проде такая тяжёлая гантель. Почему в стаканах много воды. Безопасность говорит что вода из стакана проливаться не должна, и вообще запаяйте стакан сверху. Чтоб точно не проливалось. Чтобы прикинуть примерный размер гантели ты идёшь к бизнесу и спрашиваешь, на сколько персон будет накрыт стол. Тебе говорят, ориентируемся на 300.000 в первый квартал. Ты рассчитываешь размер гантели, она получается х2 больше чем ты просил у эксплуатации в первый раз. Безопасники запретили выход без непроливающихся запаянных стаканов. Алгоритм придется переделывать, ведь там черным по белому, нужно было из стакана наливать. После всех кругов согласований и выхода в прод, нагрузка будет в 1.000 человек в пике.

9

Ответ на пост «Среда разработки и производственная среда»2

О, вроде сработало, вставил видосик ))
Скрипт вставки из файла, в любое окно, где заблокированы Ctrl+V
Текст скрипта:

$text= Get-content d:\123.txt

$wshell = New-Object -ComObject wscript.shell;

Sleep 10;

$wshell.SendKeys($text)

Запускаем, ставим курсор в окно, ждем заданное командой Sleep время в секундах.
Скрипт эмулирует последовательное нажатие клавиш, а не вставку из буфера, поэтому ограничение на вставку его не касается.

Сам пост обязан появлению спором с товарищем @4ipollintano. Не поверил, что можно наваять нечто подобное за полчаса.

В свое время я таким скриптом обходил ограничение интерфейса одной базы данных службы такси, там нельзя было удалить массово ряд записей, а сама БД была не документирована и лезть в нее запросами было рискованно для заказчика. Я тогда написал скрипт, который эмулировал нажатие клавиш для навигации по окну, выбора записи справочника и нажатию кнопки удаления в интерфейсе, оставил поработать на полчаса и проблема была решена. Вручную пришлось бы пару суток просидеть ))

Показать полностью
Отличная работа, все прочитано!