Старый друг - лучше новых двух (тут трется воскресший freenx-server)

Модераторы: dimbor, Модераторы разделов

dimbor
Ведущий рубрики
Сообщения: 1569
Статус: Подвинутый участник

Старый друг - лучше новых двух

Сообщение dimbor »

Началось все с этого:
dimbor писал:
29.12.2019 03:49
freenx-у также само сделал пакет: deb64. Наговнокодил туда всякого типа завершения рутлес сессии не по таймауту, а по завершению специально указанного процесса. Также частично он теперь юзает sqlite. Модно, чо! И багов наловил изрядно.

Раз пошла такая пьянка, на старости лет опозорился и ввалился со всем этим на гитхаб. Упс! Нафигачил туда пиджина - глаза потом с мылом надо мыть - предупреждаю.
И понеслось:
Djelf писал:
29.12.2019 13:45
Забираем freenx-server с гитхаба, подменяем кривой nxloadconfig
Напиши, чем под убунтой он крив. Поправлю.
Djelf писал:
29.12.2019 13:45
Прогоняем nxsetup, проверям nxsetup --test, упс!!! Применяем решение https://www.nomachine.com/ru/TR12M06271
Да блин, забыл про обязаловку с dss ключами написать где-то. А глобально, сменить на криво-эпилептические проблем нема. Нет идей, как при этом совместимость не поломать.
Djelf писал:
29.12.2019 13:45
Обычно базы на sqlite3 имеют расширение db3
А мне вот все sq3 попадались. Чем критично?
Djelf писал:
29.12.2019 13:45
Это не хватает ";" в конце запроса. Ага, после этого и --terminate заработал.
Поправлю, спасибо.
Djelf писал:
29.12.2019 13:45
Но руается
NX> 716 Terminating session 962194E83EA754A5E87A11D5B56CD489 on user request.
/usr/bin/nxnode: строка 416: wait: pid 23178 не является дочерним процессом этой оболочки
А кто у нас был 23178? Это был сам nxagent. Ну и чер с ним...
addm 23178 23146 7 13:33 ? 00:00:09 /usr/bin/nxagent -persistent -D -name NX - addm@server2:2001 - server2 (GPL Edition) -option /home/addm/.nx/C-server2-2001-962194E83EA754A5E87A11D5B56CD489/options -nolisten tcp -dpi 96 :2001
Да, это можно считать нормальным. Там раньше такие гонки были, офигеть. terminate_session запускался в зависимости от фазы луны практически одновременно из _трех_ ниток. Сейчас - из двух. Но это в рутлесе. А у тебя кстати, что?
Djelf писал:
29.12.2019 13:45
Запускается что-то медленно, задержка после соединения,в логе
29.12 13:25:34: node_start_applications (13367): DISPLAY is 2000
29.12 13:25:38: node_start_applications (13367): Sleep while get a valid DISPLAY (59)
потом
29.12 13:25:39: try_remount_printers (13367): Session dir NOT FOUND! Calling twice? Why?
29.12 13:25:39: node_cupsd_stop (13367): end
29.12 13:25:39: node_stop_services (13367): call reconnect_pa
29.12 13:25:39: node_stop_services (13367): end
29.12 13:25:39: node_start_monitor_2_0_0 (13367): end
29.12 13:25:40: node_start_applications (13367): Sleep while get a valid DISPLAY (55)
и так ~17с...
Это ждется дисплейный порт арктического эныкс-агента посредством xdpyinfo. Вообще, оно у них медленно стало стартовать/завершаться. Но не семнадцать секунд. В session при этом что? И версия либ какая? На 3.5.99.22 больше двух сек не выжимает, даже в виртуалке.
Djelf писал:
29.12.2019 13:45
OpenNX, по традиции, на винде не запустился ;)
А с ним то что? Я его обползал весьма тщательно...
Спасибо сказали:
dimbor
Ведущий рубрики
Сообщения: 1569
Статус: Подвинутый участник

Re: opennx

Сообщение dimbor »

Djelf писал:
29.12.2019 13:45
Забираем freenx-server с https://github.com/dimbor-ru?tab=repositories, подменяем кривой nxloadconfig
А мой deb под убунту не встает?
Спасибо сказали:
Djelf
Сообщения: 615
ОС: Гигтег+Цшт32

Re: opennx

Сообщение Djelf »

Да, nxloadconfig из deb отличается от gihub`овского (последний работает).

Лог OpenNX со стороны сервера
Offtopic
29.12 15:14:51: /usr/bin/nxnode (16518): run nxnode with CMDLINE "a=b&&session=server2&type=unix-application&application=startxfce4&rootless=0&virtualdesktop=1&cache=8M&images=32M&link=adsl&geometry=1920x1040&screeninfo=1920x1040x32+render&keyboard=pc101/us&backingstore=1&encryption=1&render=1&composite=1&shmem=1&shpix=1&samba=0&cups=0&nodelay=1&defer=0&client=winnt&media=0&strict=0&aux=1&clientproto=3.5.0&login_method=SU&user=addm&userip=192.168.10.215&uniqueid=0A9D9364C18236C7DCE15C32EE0550D9&display=2000&host=127.0.0.1"
29.12 15:14:51: startsession (16518): starting with args ""
29.12 15:14:51: startsession (16518): generate "/home/addm/.nx/C-server2-2000-0A9D9364C18236C7DCE15C32EE0550D9/options"
29.12 15:14:51: startsession (16518): write xauth script file
29.12 15:14:51: startsession (16518): call 'node_start_agent'
29.12 15:14:51: node_start_agent (16518): starting
29.12 15:14:51: node_start_agent (16518): source profile
29.12 15:14:51: node_start_monitor (16518): staring
29.12 15:14:51: node_start_monitor (16518): call 'node_start_monitor_2_0_0 ""'
29.12 15:14:51: node_start_agent (16518): source bash profile
29.12 15:14:51: node_start_monitor_2_0_0 (16518): starting
29.12 15:14:51: node_start_agent (16518): NXAgent session type
29.12 15:14:51: node_start_agent (16518): env start LC_PAPER=ru_RU.UTF-8
LC_ADDRESS=ru_RU.UTF-8
LC_MONETARY=ru_RU.UTF-8
NX_CLIENT=/usr/bin/nxdialog
IFS=

SHELL=/bin/bash
LC_NUMERIC=ru_RU.UTF-8
USER=addm
LC_TELEPHONE=ru_RU.UTF-8
NLSPATH=/opt/cprocsp/share/locale/%L/LC_MESSAGES/%N:/opt/cprocsp/share/locale/%L/LC_MESSAGES/%N
NXSESSIONID=server2-2000-0A9D9364C18236C7DCE15C32EE0550D9
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/snap/bin
MAIL=/var/mail/addm
SHADOW_XAUTHORITY=/home/addm/.nx/C-server2-2000-0A9D9364C18236C7DCE15C32EE0550D9/authority
LC_IDENTIFICATION=ru_RU.UTF-8
PWD=/home/addm
LANG=ru_RU.UTF-8
LC_MEASUREMENT=ru_RU.UTF-8
HOME=/home/addm
SHLVL=2
LANGUAGE=ru:en
NXUSERIP=192.168.10.215
LOGNAME=addm
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
DISPLAY=nx/nx,options=/home/addm/.nx/C-server2-2000-0A9D9364C18236C7DCE15C32EE0550D9/options:2000
LC_TIME=ru_RU.UTF-8
XAUTHORITY=/home/addm/.nx/C-server2-2000-0A9D9364C18236C7DCE15C32EE0550D9/authority
LC_NAME=ru_RU.UTF-8
_=/usr/bin/env
29.12 15:14:51: node_start_agent (16518): env end
29.12 15:14:51: node_start_agent (16518): Start nxagent by command: '/usr/bin/nxagent -persistent -D -name "NX - addm@server2:2000 - server2 (GPL Edition)" -option "/home/addm/.nx/C-server2-2000-0A9D9364C18236C7DCE15C32EE0550D9/options" -nolisten tcp -dpi 96 :2000'
29.12 15:14:51: node_start_agent (16518): Wait for NODE_AGENT_PID (16891)
29.12 15:14:51: startsession (16518): wait for nxagent pid - 1 decs
29.12 15:14:51: startsession (16518): call 'node_start_applications'
29.12 15:14:51: node_start_applications (16518): starting
29.12 15:14:51: node_start_applications (16518): source profile
29.12 15:14:51: node_start_applications (16518): source bash profile
29.12 15:14:51: node_start_applications (16518): DISPLAY is 2000
29.12 15:14:57: node_start_applications (16518): Sleep while get a valid DISPLAY (29)
29.12 15:14:57: node_start_applications (16518): Sleep while get a valid DISPLAY (28)
29.12 15:14:57: node_start_applications (16518): Sleep while get a valid DISPLAY (27)
29.12 15:14:58: node_start_agent (16518): NODE_AGENT_EXIT_STATUS = "1"
29.12 15:14:58: node_start_agent (16518): NODE_FAILED = "failed"
29.12 15:14:58: node_start_agent (16518): close session
29.12 15:14:58: node_start_agent (16518): cleanup session information 'server2-2000-0A9D9364C18236C7DCE15C32EE0550D9'
29.12 15:14:58: node_start_agent (16518): remove agent pidfile -- '/home/addm/.nx/C-server2-2000-0A9D9364C18236C7DCE15C32EE0550D9/pids/agent'
29.12 15:14:58: node_start_agent (16518): call 'node_terminate_session "server2-2000-0A9D9364C18236C7DCE15C32EE0550D9" "failed"'
29.12 15:14:58: node_terminate_session (16518): starting
29.12 15:14:58: node_terminate_session (16518): Start terminating session "server2-2000-0A9D9364C18236C7DCE15C32EE0550D9" with status "failed"
29.12 15:14:58: node_terminate_session (16518): call node_stop_services
29.12 15:14:58: node_stop_services (16518): starting
29.12 15:14:58: node_stop_services (16518): call node_umount_smb
29.12 15:14:58: node_umount_smb (16518): starting with ENABLE_SHARE_MULTIMOUNT == 1
29.12 15:14:58: node_umount_smb (16518): No shares controlled by session found. Stop remounting.
29.12 15:14:58: node_stop_services (16518): call node_cupsd_stop
29.12 15:14:58: node_cupsd_stop (16518): starting with ENABLE_CUPS_SERVER_MODE = 1, call try_remount_printers()
29.12 15:14:58: try_remount_printers (16518): starting.
29.12 15:14:58: try_remount_printers (16518): process printer "*", search in system cups.
29.12 15:14:58: try_remount_printers (16518): printer "*" NOT FOUND in system cups
29.12 15:14:58: try_remount_printers (16518): end.
29.12 15:14:58: node_cupsd_stop (16518): end
29.12 15:14:58: node_stop_services (16518): call reconnect_pa
29.12 15:14:58: node_stop_services (16518): end
29.12 15:14:58: node_terminate_session (16518): Remove display information
29.12 15:14:58: node_terminate_session (16518): Remove magic cookie information
29.12 15:14:58: node_terminate_session (16518): Preserve or remove session information
29.12 15:14:58: node_terminate_session (16518): Clean session information.
29.12 15:14:58: node_terminate_session (16518): end
29.12 15:14:58: node_start_agent (16518):remove /tmp/.X2000-lock
29.12 15:14:58: node_start_agent (16518): remove /tmp/.X11-unix/X2000
29.12 15:14:58: node_start_monitor_2_0_0 (16518): call node_stop_services at ending
29.12 15:14:58: node_stop_services (16518): starting
29.12 15:14:58: node_start_applications (16518): Sleep while get a valid DISPLAY (26)
29.12 15:14:58: node_stop_services (16518): call node_umount_smb
29.12 15:14:58: node_umount_smb (16518): starting with ENABLE_SHARE_MULTIMOUNT == 1
29.12 15:14:58: node_umount_smb (16518): No shares controlled by session found. Stop remounting.
29.12 15:14:58: node_stop_services (16518): call node_cupsd_stop
29.12 15:14:58: node_cupsd_stop (16518): starting with ENABLE_CUPS_SERVER_MODE = 1, call try_remount_printers()
29.12 15:14:58: try_remount_printers (16518): Session dir NOT FOUND! Calling twice? Why?
29.12 15:14:58: node_cupsd_stop (16518): end
29.12 15:14:58: node_stop_services (16518): call reconnect_pa
29.12 15:14:58: node_stop_services (16518): end
29.12 15:14:58: node_start_monitor_2_0_0 (16518): end
29.12 15:14:58: node_start_applications (16518): Sleep while get a valid DISPLAY (25)
29.12 15:14:58: node_start_applications (16518): Sleep while get a valid DISPLAY (24)
29.12 15:14:59: node_start_applications (16518): Sleep while get a valid DISPLAY (23)
29.12 15:14:59: node_start_applications (16518): Sleep while get a valid DISPLAY (22)
29.12 15:14:59: node_start_applications (16518): Sleep while get a valid DISPLAY (21)
29.12 15:15:00: node_start_applications (16518): Sleep while get a valid DISPLAY (20)
29.12 15:15:00: node_start_applications (16518): Sleep while get a valid DISPLAY (19)
29.12 15:15:00: node_start_applications (16518): Sleep while get a valid DISPLAY (18)
29.12 15:15:01: node_start_applications (16518): Sleep while get a valid DISPLAY (17)
29.12 15:15:01: node_start_applications (16518): Sleep while get a valid DISPLAY (16)
29.12 15:15:01: node_start_applications (16518): Sleep while get a valid DISPLAY (15)
29.12 15:15:02: node_start_applications (16518): Sleep while get a valid DISPLAY (14)
29.12 15:15:02: node_start_applications (16518): Sleep while get a valid DISPLAY (13)
29.12 15:15:02: node_start_applications (16518): Sleep while get a valid DISPLAY (12)
29.12 15:15:02: node_start_applications (16518): Sleep while get a valid DISPLAY (11)
29.12 15:15:03: node_start_applications (16518): Sleep while get a valid DISPLAY (10)
29.12 15:15:03: node_start_applications (16518): Sleep while get a valid DISPLAY (9)
29.12 15:15:03: node_start_applications (16518): Sleep while get a valid DISPLAY (8)
29.12 15:15:04: node_start_applications (16518): Sleep while get a valid DISPLAY (7)
29.12 15:15:04: node_start_applications (16518): Sleep while get a valid DISPLAY (6)
29.12 15:15:04: node_start_applications (16518): Sleep while get a valid DISPLAY (5)
29.12 15:15:05: node_start_applications (16518): Sleep while get a valid DISPLAY (4)
29.12 15:15:05: node_start_applications (16518): Sleep while get a valid DISPLAY (3)
29.12 15:15:05: node_start_applications (16518): Sleep while get a valid DISPLAY (2)
29.12 15:15:06: node_start_applications (16518): Sleep while get a valid DISPLAY (1)
29.12 15:15:06: node_start_applications (16518): Sleep while get a valid DISPLAY (0)
29.12 15:15:06: node_find_application (16518): starting with args "unix-application"
29.12 15:15:06: node_find_application (16518): return NODE_STARTX="startxfce4"
29.12 15:15:06: node_find_application (16518): end
29.12 15:15:06: node_start_applications (16518): Got NODE_APPLICATION is "startxfce4"
29.12 15:15:06: get_pa_sound_mode (16518): Client's pulseaudio at 192.168.10.215:4713 is not reachable.
29.12 15:15:06: node_start_applications (16518): Starting NODE_APPLICATION with /etc/nxserver/Xsession
29.12 15:15:06: node_start_applications (16518): Start successful. NODE_APP_PID=17516
29.12 15:15:06: node_start_applications (16518): Waiting for NODE_APP_PID
29.12 15:15:06: node_start_applications (16518): NODE_APP_PID finished
29.12 15:15:06: node_start_applications (16518): Clean pids/apps/17516
29.12 15:15:11: node_start_applications (16518): Call node_terminate_agent for non-rootless or virtualdesktop session type
29.12 15:15:11: node_start_applications (16518): Call 'node_terminate_agent "server2-2000-0A9D9364C18236C7DCE15C32EE0550D9"'
29.12 15:15:11: node_terminate_session (16518): starting
29.12 15:15:11: node_terminate_session (16518): Start terminating session "server2-2000-0A9D9364C18236C7DCE15C32EE0550D9" with status ""
29.12 15:15:11: node_terminate_session (16518): call node_stop_services
29.12 15:15:11: node_stop_services (16518): starting
29.12 15:15:11: node_stop_services (16518): call node_umount_smb
29.12 15:15:11: node_umount_smb (16518): starting with ENABLE_SHARE_MULTIMOUNT == 1
29.12 15:15:11: node_umount_smb (16518): No shares controlled by session found. Stop remounting.
29.12 15:15:11: node_stop_services (16518): call node_cupsd_stop
29.12 15:15:11: node_cupsd_stop (16518): starting with ENABLE_CUPS_SERVER_MODE = 1, call try_remount_printers()
29.12 15:15:11: try_remount_printers (16518): starting.
29.12 15:15:11: try_remount_printers (16518): process printer "*", search in system cups.
29.12 15:15:11: try_remount_printers (16518): printer "*" NOT FOUND in system cups
29.12 15:15:11: try_remount_printers (16518): end.
29.12 15:15:11: node_cupsd_stop (16518): end
29.12 15:15:11: node_stop_services (16518): call reconnect_pa
29.12 15:15:11: node_stop_services (16518): end
29.12 15:15:11: node_terminate_session (16518): Remove display information
29.12 15:15:11: node_terminate_session (16518): Remove magic cookie information
29.12 15:15:11: node_terminate_session (16518): Preserve or remove session information
29.12 15:15:11: node_terminate_session (16518): Clean session information.
29.12 15:15:11: node_terminate_session (16518): end
29.12 15:15:11: node_start_applications (16518): end
29.12 15:15:11: startsession (16518): end
Спасибо сказали:
dimbor
Ведущий рубрики
Сообщения: 1569
Статус: Подвинутый участник

Re: opennx

Сообщение dimbor »

Запяточия и nxloadconfig поправил. А что у тебя за версия sqlite? Моя глотает запросы без запяточий.
Спасибо сказали:
Djelf
Сообщения: 615
ОС: Гигтег+Цшт32

Re: opennx

Сообщение Djelf »

Версия sqlite не важна (из коробки очень древняя), ты же командный интерфейс работаешь, а из нее выражение sql должно завершаться точкой с запятой. Возможно, что при ее отсутствии, запрос может сработать, но это не корректное поведение.
Расширение не важно, sq3, так sq3. Виндовые приблуды обычно используют .sqlite .db или .db3, sq3 вообще ни разу не видал.
По самой базе:
Не "sessionId TEXT UNIQUE", а "sessionId TEXT PRIMARY KEY". Потому что в первом случае UNIQUE не создает индекса, но есть еще колонка с PRIMARY KEY и индексом, т.е. медленный поиск и затраты по времени на обработку UNIQUE. Во втором случае только одна индексированная колонка. Размер будет больше из-за индекса, но это окупится.
Ну и индекс по полю status, пока не заметно, но когда мертвых сессий накопится - станет заметно.
Спасибо сказали:
dimbor
Ведущий рубрики
Сообщения: 1569
Статус: Подвинутый участник

Re: opennx

Сообщение dimbor »

Вот оно чо, Михалыч! Благодарю за ценные замечания. Что-то такое я смутно подозревал, но в конкретику оно само не оформилось без пинка. Пока речь шла вообще о возможности переделать здоровенный скрипт, который многократно дописывал десяток человек. Каждый со своими тараканами. Честно говоря, что оно умудрилось заработать, было той еще нежданной радостью.
Спасибо сказали:
dimbor
Ведущий рубрики
Сообщения: 1569
Статус: Подвинутый участник

Re: opennx

Сообщение dimbor »

PRIMARY KEY - сделал.
И пошли такого за бутылкой, он принесет две. Добавил два индекса. Еще по userName. Оно там намного нужнее, судя по алгоритму.

Также теперь при установке deb существующий sq3 удаляется. Как-то не хочется выяснять, как будет материться скулайт на ранешнюю базу.
Спасибо сказали:
Djelf
Сообщения: 615
ОС: Гигтег+Цшт32

Re: opennx

Сообщение Djelf »

А отдельный индекс по userName это ты зря. Лучше тогда кластерный по обоим полям status,username именно в таком порядке!
В одном запросе всегда используется только один индекс, а самый критичный запрос это запрос именно по обоим полям.
Если пользователей будет много, sqlite может решить использовать индекс по username, но сессий в статусе closed, будет по факту значительно больше, чем в статусе runing или suspended, и они будут отбрасываться уже перебором, а не индексом.
Ну и nxserver --list этот индекс сможет использовать по первому полю.
Остальные запросы по времени не критичны.
Спасибо сказали:
dimbor
Ведущий рубрики
Сообщения: 1569
Статус: Подвинутый участник

Re: opennx

Сообщение dimbor »

Хоккей! Сейчас изменю. Вообще-то, конкретные пацаны на гитхабе такие вещи трут. С помощью ишесов и пулреквестов. Давно хотел потренироваться. Почему б не на тебе? ;)
Добавлено (17:25):
ЗЫ: Так индекс один должен быть или два?
Спасибо сказали:
Djelf
Сообщения: 615
ОС: Гигтег+Цшт32

Re: opennx

Сообщение Djelf »

Индексов может быть сколько угодно, но при запросе всегда будет использоваться только один (наиболее подходящий по мнению базы, ну или хинтами можно слегка поправить /у sqlite использование индекса по полю отключается установкой +поле='значение'/).
Чем больше индексов, тем больше накладных расходов на вставку записей в базу.
Оптимально иметь минимум индексов с максимальным попаданием в критических запросах, в остальных запросах это не важно.
имхо: 2х индексов (primary и по status,username) вполне достаточно.
Спасибо сказали:
dimbor
Ведущий рубрики
Сообщения: 1569
Статус: Подвинутый участник

Re: opennx

Сообщение dimbor »

Раз уж ты о своем разумении в sqlite проговорился (на самом деле, я и раньше знал, но забыл), помучаю тебя еще вопросами.

1) То что уже усть, пытается охватить самую критичную часть фриэныкса по части одновременности запросов. Когда в начале рабочего дня трое-четверо подключаются, в исходной файловой /{closed,failed,running} временами случаются чудесатые чудеса.

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

2) У юзера одновременность скорее нет, чем да. Получаются таблицы: собсно сессий, для shadow, пидов запущенных приложений, шар, принтеров. Последние две можно объединить. Уже 4 штуки. Не много? Не мало?

А там же еще можно всю конфигурацию в sqlite загнать. Шутка.
Спасибо сказали:
Djelf
Сообщения: 615
ОС: Гигтег+Цшт32

Re: opennx

Сообщение Djelf »

Скорость отклика при записи в базу sqlite сильно повышается при PRAGMA journal_mode=WAL; https://www.sqlite.org/wal.html
Но у тебя же соединение с базой не постоянное, основное время видимо тратиться на установку соединения.
Тут нужно уже курить в сторону сопроцессов bash https://www.gnu.org/software/bash/manual/html_node/Coprocesses.html

Скомунизженно с лор`а https://www.linux.org.ru/forum/development/5827072

Код: Выделить всё

#Открываем базу:
coproc sqlite3 test.sqlite

#Запрос без ответа:
echo "CREATE TABLE test (id INTEGER, text TEXT);" >&${COPROC[1]}
echo "INSERT INTO test (id,text) VALUES(1,one);" >&${COPROC[1]}

#Запрос с ответом, должна быть одна строка!!!
echo "SELECT text FROM ok WHERE text='one' LIMIT 1;" >&${COPROC[1]}
read res <&${COPROC[0]}
echo $res

#Пид sqlite хранится в $COPROC_PID, например можно его пришибить в конце
kill $COPROC_PID
Не такие большие нагрузки на sqlite, чтобы, при правильном приготовлении, база бы захлебнулась.
P.S. MySQL будет медленнее ;) https://www.sqlite.org/speed.html
Спасибо сказали:
Djelf
Сообщения: 615
ОС: Гигтег+Цшт32

Re: opennx

Сообщение Djelf »

1. А ты квест со сборкой nx-libs прошел? Может соберешь nxagent с отладкой по шрифтам?
Потому что не я такой один: https://github.com/ArcticaProject/nx-libs/issues/824
Мне не нравится вот это: https://github.com/ArcticaProject/nx-libs/commit/78a16245a4bbf13acf53768064d81cbaa28c0d8b#diff-561c54382bfe9189c4d3857a71456e18
В кэше nx (в дампе памяти кэша) на сервере появляется туева хуча имен фонтов (на старой версии имен фонтов в кэше вообще нет), тормоз видимо на этапе переговоров клиента и сервера об их количестве и наличии.
От ключей nxagent -deferglyphs и -fp никакого толку нет ;(
Лишние 10-15с все таки напрягают ;)

2. Добавь, плиз, в nxserver https://github.com/Etersoft/rx-etersoft/commit/d17420f24865cf82f6d7f3702074aab4e97d5294
Не везде дата/время появляется, но значительно приятнее логи читать ;)

3. По теме https://github.com/ArcticaProject/nx-libs/issues/873
usb-ip то работает, и исходники есть: https://github.com/cezanne/usbip-win
С винды на линух не пробовал, а наоборот успешно прокинул рутокен с егаисом, рса перешить нужно было (это работает только под ie9).
Спасибо сказали:
dimbor
Ведущий рубрики
Сообщения: 1569
Статус: Подвинутый участник

Re: opennx

Сообщение dimbor »

По пункту 2 свое видение собирания строк по кусочкам добавил.

Либы тоже соберу быстро. Только будет лучше, если ткнешь, где там что конкретно включить.

Остальное ща посмотрю.
Добавлено (21:50):
Отрадно конечно, что дело сдвинулось с мертвой точки, но. Стремаюсь я пока прыгать с бубном, тестовым сертификатом и полномочиями системного администратора. Тем более, там пока очень понятно описано:
"usbip-win is not yet ready for production use. We could find problems with more detailed logs."
Добавлено (22:05):
Еще: поскольку мантейнерская крутость условно подросла, все изменения сразу добавляются в выложенный тренировочный deb.
Спасибо сказали:
Djelf
Сообщения: 615
ОС: Гигтег+Цшт32

Re: [Не спят] мои соседи, белые медведи

Сообщение Djelf »

Хе, хе. Ну теперь держись ;)
Уже стали интересоваться, работает ли Remmina. Отвечаем: работает!!!
https://gyazo.com/dbe3a39e9e6cc385a5381d59237257b6

P.S.: Шапку надо исправить, либо создать новую тему с нормальной шапкой и перенести туда сообщения, иначе не понятно: откуда у медведей растут уши и почему они спать не собираются.

P.P.S.: Укажи на GitHub в списке совместности еще и Remminia. Кто еще там с оригинальным NX-протоколом баловался? QTчтототам...
Всех недоделанных уродцев, с понтами на завоевание мира, уже и не припомню :rolleyes:

P.P.P.S.: По поводу https://github.com/ArcticaProject/nx-libs/issues/873
В чем то они правы, это все переписать нужно, хардкодить каналы это не правильно, а вот засунуть все каналы в массив, захаркодить дефолтные, а все свободные оставить на откуп различным клиент/серверам, это будет годно.
Не нашел где Quality Virtual Desktop (QVD) это использует, попутали с OpenNX?
Спасибо сказали:
dimbor
Ведущий рубрики
Сообщения: 1569
Статус: Подвинутый участник

Re: Старый друг - лучше новых двух

Сообщение dimbor »

Я тебе не супермодер и сообщения по частям растаскивать не умею. А ты пишешь сразу и о умных, и о красивых.

Про недоделанных уродцев - взоржал. На гитхабе ремину добавлю. А вообще ты мне неплохо там толпу создал. Ужо предлагают в дебиан, а я и рад. Почитай их главного https://github.com/dimbor-ru/freenx-server/issues/3

Вообще мне внезапно кодить оказалось - подтираться не успеваю. Еще и наречие это бесовское учить. Кста, в следующих логах на гитхабе ты хоть LANG=C втыкай, а то недостаточно торкает окружающих. ;)

С теми предъявами, о которых речь, надо думать глобально: Сейчас наличие большинства левых бинарей проверяет каждый раз nxloadconfig, нещадно тормозя при этом. Правильней действительно их в nxsetup чекать, раз уж он все равно есть?
Спасибо сказали:
dimbor
Ведущий рубрики
Сообщения: 1569
Статус: Подвинутый участник

Re: [Не спят] мои соседи, белые медведи

Сообщение dimbor »

Djelf писал:
05.01.2020 14:03
P.S.: Шапку надо исправить, либо создать новую тему с нормальной шапкой и перенести туда сообщения, иначе не понятно: откуда у медведей растут уши и почему они спать не собираются.
Вот потому не спали, что не оттуда. Повтыкал, вроде частично по нужным местам. Эх, лучше б покодил...
Djelf писал:
05.01.2020 14:03
Кто еще там с оригинальным NX-протоколом баловался? QTчтототам...
QTNX
Djelf писал:
05.01.2020 14:03
P.P.P.S.: По поводу https://github.com/ArcticaProject/nx-libs/issues/873
В чем то они правы, это все переписать нужно, хардкодить каналы это не правильно, а вот засунуть все каналы в массив, захаркодить дефолтные, а все свободные оставить на откуп различным клиент/серверам, это будет годно.
Да там все копипастой было организовано чисто от любопытства и незнания, что под виндой тогда было никак.

Djelf писал:
05.01.2020 14:03
Не нашел где Quality Virtual Desktop (QVD) это использует, попутали с OpenNX?
Но какой-то важный дядька оттуда вроде там был. Они вроде даже его призывали, типа как духа. Безрезультатно.
Спасибо сказали:
Djelf
Сообщения: 615
ОС: Гигтег+Цшт32

Re: Старый друг - лучше новых двух

Сообщение Djelf »

dimbor писал:
06.01.2020 03:30
С теми предъявами, о которых речь, надо думать глобально: Сейчас наличие большинства левых бинарей проверяет каждый раз nxloadconfig, нещадно тормозя при этом. Правильней действительно их в nxsetup чекать, раз уж он все равно есть?
Я поддерживаю перенос чекеров в nxsetup, в nxloadconfig им делать уже нечего.
И/или проверку установленных пакетов делать, как это принято в deb preinst.
Ну я же знал что sqlite3 нужен, но не поставил и какое то время втыкал на то что доступа к базе сессий нет.

Я считаю что это первое что нужно сделать - установка пакета без бубнов на голую систему.
Иначе 90% потенциальных тестеров отвалятся на этом этапе.
Накачаю, пожалуй, разных юбунт про запас - на потестить это.

А ArcticaProject, молодцы, но и их заинтересованность в "новой крови" понятна ;)
Спасибо сказали:
dimbor
Ведущий рубрики
Сообщения: 1569
Статус: Подвинутый участник

Re: Старый друг - лучше новых двух

Сообщение dimbor »

Ну что ж я вообще средним пальцем деланный. Это там было с самого начала:

Код: Выделить всё

 Depends: libnx-x11-6 (>= 3.5.0), libxcomp3 (>= 3.5.0), nxagent (>= 3.5.0), nxproxy (>= 3.5.0), expect, sudo, zenity, x11-xserver-utils, x11-xkb-utils, x11-utils, gettext, sqlite3
Recommends: cups, samba, pulseaudio
Другое дело, что ты мог его через какое-нить --force ставить.
Спасибо сказали:
Djelf
Сообщения: 615
ОС: Гигтег+Цшт32

Re: Старый друг - лучше новых двух

Сообщение Djelf »

А я make install делал, а не через пакет. Через пакет то зависимости есть...
Спасибо сказали:
dimbor
Ведущий рубрики
Сообщения: 1569
Статус: Подвинутый участник

Re: Старый друг - лучше новых двух

Сообщение dimbor »

С точки зрения пакетостроения в make install и гнездится корень зла. Я оттеда повыкидывал все манипуляции с системой, такие как chown и useradd. Пакет-то собирается от юзера. Там конечно есть fakeroot, но правильно его приготовить не осилил. Я те говорю, это мантейнерская религия навроде как про Бога Кузю - чувствую себя подсматривающим за жертвоприношениями.

Т.ч. пусть пакетный менеджер пыхтит в системе или nxsetup.
Спасибо сказали:
Djelf
Сообщения: 615
ОС: Гигтег+Цшт32

Re: Старый друг - лучше новых двух

Сообщение Djelf »

nxsetup еще не дозрел для добавления пользователей ;)
а еще можно в него засунуть пост обработку ключ:значение и все это потом засунуть в sqlite
тогда nxloadconfig вырождается в запрос "selet * from nxsetings", и nxloadconfig можно вообще упразднить
только нужно добавить nxsetup --update-config, либо сравнивать последний тайм-штамп в базе sqlite с конфигами

А у них опять баг в основной ветке ;) На этот раз nxaget падает в корку при запуске любого приложения из xfce, gdb вычисляет где, даже не знаю... напрягать или пусть помучаются, хотя они там мучится будут минут 5 :cray:
Ну я тут не уверен... sqlite, например, не фигачит в основную ветку все что попалось, а только стабильные/проверенные патчи.
Но у каждого разработчика может быть своя идеология разработки.
Спасибо сказали:
dimbor
Ведущий рубрики
Сообщения: 1569
Статус: Подвинутый участник

Re: Старый друг - лучше новых двух

Сообщение dimbor »

Ну-ка с этого момента поподробнее. Потуги на скулайтивание именно с конфигов у меня и начинались. Ключ-значение - хорошо. Еще должно быть дефолтное по каждому полю. Еще должна быть схема постобработки некоторых. Как-то у меня это не улеглось...
Спасибо сказали:
dimbor
Ведущий рубрики
Сообщения: 1569
Статус: Подвинутый участник

Re: Старый друг - лучше новых двух

Сообщение dimbor »

А еще, есть там одна полезная хрень для nxnode, на боевой машинке иногда пригождается. Называется $USER.node.conf. Ничего пока для нее не придумывается кроме как введения в таблицу еще и столбца с пользователем и хитрым запросом типа WHERE user='man' OR user='all'. А потом еще и ответ обрабатывать, типа как "head -1" для нашего башевского случая?

И если со столбцом с дефолтами я погорячился - не нужен, решается на этапе --update-config, то для юзера точно придется конструировать хитрый запрос.
Спасибо сказали:
dimbor
Ведущий рубрики
Сообщения: 1569
Статус: Подвинутый участник

Re: Старый друг - лучше новых двух

Сообщение dimbor »

Djelf писал:
06.01.2020 19:18
А у них опять баг в основной ветке ;) На этот раз nxaget падает в корку при запуске любого приложения из xfce, gdb вычисляет где, даже не знаю... напрягать или пусть помучаются, хотя они там мучится будут минут 5 :cray:
Это у них баг или мой. Не исключаю, что и сессия может завершаться принудительно когда там каковский пид пропадает. Мало данных.
Спасибо сказали:
Djelf
Сообщения: 615
ОС: Гигтег+Цшт32

Re: Старый друг - лучше новых двух

Сообщение Djelf »

Их. Эти simplifications https://github.com/ArcticaProject/nx-libs/commit/d94f472744355c71987d145727aecace1e8455b6#diff-a00efb72b6aae7dcb4ad720af5779c69 даром не проходят ;) Уже кинули тикет...

Запрос как раз совсем не хитрый:

Код: Выделить всё

SELECT 
    key,
    coalesce(us.value,rs.value) as value /* если у юзверя установлен параметр то он не NULL */
FROM settings as rs
LEFT JOIN settings as us on us.key=rs.key AND us.user=@user
WHERE rs.user='root'
Можно и группу добавить, но только одну! Со вложенными группами будет большая головная боль (на старых версиях sqlite3).
Спасибо сказали:
dimbor
Ведущий рубрики
Сообщения: 1569
Статус: Подвинутый участник

Re: Старый друг - лучше новых двух

Сообщение dimbor »

Фигасе нехитрый! Скорпион, блин, кусает свой хвост. Приведенный код вглухую завесил мой биологический вычислительный кластер. Пишу с safe-mode инстанса, его отвергнувшего из-за алкогольной интоксикации.

Получается, что этот key уже совсем не PRIMARY KEY, раз его много? Как жить?
А не будет ли любезен многоуважаемый джин спроектировать нам структуру бд? Там еще, как я понял, должна быть табличка с контрольными суммами конфигов. Согласен и на crc32, мы же не гордые.

Продолжая цитаты: Лучше день потерять, а потом за десять минут долететь.
Спасибо сказали:
Djelf
Сообщения: 615
ОС: Гигтег+Цшт32

Re: Старый друг - лучше новых двух

Сообщение Djelf »

Можно в качестве user использовать UserID integer, это без разницы...
Можно ключи в отдельную таблицу и связывать их по индексу, но зачем? Быстрее не будет.

Код: Выделить всё

CREATE TABLE settings(
  user TEXT NOT NULL, 
  key TEXT NOT NULL, 
  value, 
  PRIMARY KEY(user,key));
Хочешь контрольные суммы - запихни их туда же, с ключем = имя файла, а в качестве vaiue лучше не crc, а таймштамп файла, зачем crc то считать?

Хотя нет, как то вот так лучше, а корневой юзверь пусть будет NULL

Код: Выделить всё

CREATE TABLE settings(
  user TEXT, 
  key TEXT NOT NULL, 
  value, 
  PRIMARY KEY(user,key));
Спасибо сказали:
dimbor
Ведущий рубрики
Сообщения: 1569
Статус: Подвинутый участник

Re: Старый друг - лучше новых двух

Сообщение dimbor »

Опаньки спасибочки! Семяизвержение вскорости воспоследует. И это, я на гитхабе ветку с удовлетворением пакетных претензий с мастером сливаю, если вопросов к ней нет.
Спасибо сказали:
dimbor
Ведущий рубрики
Сообщения: 1569
Статус: Подвинутый участник

Re: Старый друг - лучше новых двух

Сообщение dimbor »

С этими сопроцессами такой геморрой. Одно неловкое движение и висяк. Не знаешь, как sqlite заставить хотя б перевод строки присылать, если ответ пустой? Может что-то типа .mode insert? Это еше ни пробовал.
Спасибо сказали:
Ответить