Во всех ветках оба Sftp-теста всегда пропускаются: - **от обычного пользователя**: `skipped 'sshd not installed'` — при том что openssh на системе **установлен**: бинарник `sshd` лежит в `/usr/sbin`, которого нет в PATH обычного пользователя, а ищет тест его через `shutil.which('sshd')` (строка 68 test/gvfs-test). - **от root** (вход через `su -`, а не ssh): `skipped 'No $XDG_RUNTIME_DIR available'` — `$XDG_RUNTIME_DIR` устанавливается logind только в PAM-сессии; логин-шелл, запущенный через `su -`, его не содержит. Класс Sftp требует эту переменную (декоратор, строка 442), потому что тест кладёт в `$XDG_RUNTIME_DIR` файл `authorized_keys` (ssh не принимает ключи из /tmp). - Дополнительно класс требует наличие `~/.ssh/id_rsa` (декоратор, строка 443 — используется в `test_rsa`), а `test_unknown_host` требует ещё и работу под gvfs-testbed (строка 521). Итого в стандартной раскладке (пользователь + root через `su -`) Sftp-тесты не могут запуститься ни в одной ветке. ## Как тесты предназначены к запуску (upstream-дизайн): gvfs-testbed В репозитории gvfs есть обёртка `test/gvfs-testbed` (bash, ~176 строк, © 2012-2013 Canonical Ltd.). Она вызывается **от root из сессии обычного пользователя** (поднимается по дереву родительских процессов до первого нерoot-процесса, чтобы определить вызвавшего пользователя) и: - требует `smbd` в PATH root и находит `udisksd` по `Exec=` из `/usr/share/dbus-1/system-services/*UDisks2*.service`; - создаёт «unshared»-песочницу (`unshare -m`): tmpfs + bind-монтирование `/etc`, `/home`, `/var`, `/media`; - записывает собственный `/etc/samba/smb.conf` (шары `[public]`/`[private]`), запускает в песочнице `smbd` и `nmbd`, задаёт smb-пароль пользователя; - **генерирует `~/.ssh/id_rsa`** вызывающему пользователю (`ssh-keygen`) — это то, чего требует третий декоратор Sftp; - создаёт setgid-`rootsh` (root-шелл для пользователя) для управления `scsi_debug`; - запускает тестовый набор **от имени вызвавшего пользователя** с `XDG_RUNTIME_DIR=/home/$USER/run`; - помечает песочницу файлом `/home/gvfs_sandbox_marker` — именно его наличие проверяет флаг `in_testbed` (строка 64 test/gvfs-test). Только через эту обёртку исполнимы также 5 тестов класса Drive (сейчас пропускаются как `not running under gvfs-testbed`; дополнительно нужен модуль ядра `scsi_debug`) и «внутренний» сценарий Smb (тест сам решает, использовать системный smbd или собственный). ## Состояние в ALT - `gvfs-testbed` в ALT-пакеты **не ставится** (не включён в meson-сборку spec gvfs); - скрипт не переносим на ALT «как есть»: использует Debian-механизмы (`service smbd`/`smb`, `/etc/init`, правила в `/run/udev`, `systemd-udevd`, `/var/run`). ## Предложение 1. Упаковать `test/gvfs-testbed` в пакет `gvfs-tests` с адаптацией скрипта под ALT (замена `service` на `systemctl`, правила udev в `/etc/udev/rules.d`, и т.п.); тогда Sftp (и Drive) тесты запускаются штатно: root запускает обёртку из пользовательской сессии, обёртка сама обеспечивает `XDG_RUNTIME_DIR` и `id_rsa`. 2. Промежуточный вариант — запускать Sftp-тесты в PAM-сессии logind (например, прямой ssh-вход под root), где `$XDG_RUNTIME_DIR` установлен, при сгенерированном `~/.ssh/id_rsa` и доступном в PATH `sshd`: класс-скипы уйдут, но `test_unknown_host` по-прежнему потребует gvfs-testbed. ## Наблюдаемые причины skip (все ветки, оба режима) ``` test_rsa (__main__.Sftp.test_rsa) sftp://localhost with RSA authentication ... skipped 'sshd not installed' # пользователь sftp://localhost with RSA authentication ... skipped 'No $XDG_RUNTIME_DIR available' # root (su -) test_unknown_host (__main__.Sftp.test_unknown_host) sftp:// with RSA authentication for unknown host ... skipped 'sshd not installed' # пользователь sftp:// with RSA authentication for unknown host ... skipped 'No $XDG_RUNTIME_DIR available' # root (su -) ``` ## Версии - gvfs: p10 1.48.2-alt1, p11 1.57.2-alt1 (задание 435928: 1.58.5-alt1), sisyphus 1.62.0-alt1 - openssh: p10 7.9p1-alt4.p10.10, p11 9.6p1-alt7, sisyphus 9.6p1-alt7