OberonCore https://forum.oberoncore.ru/ |
|
#020 Host: добавить модуль для чтения параметров запуска https://forum.oberoncore.ru/viewtopic.php?f=134&t=6557 |
Страница 2 из 3 |
Автор: | Иван Денисов [ Понедельник, 24 Февраль, 2020 22:12 ] |
Заголовок сообщения: | Re: #020 Host: добавить модуль для чтения параметров запуска |
Вот скажем я запускаю расчет: Код: #!/bin/sh PATH=./mpich32/bin:$PATH; export PATH LD_LIBRARY_PATH=./mpich32/lib:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH mpiexec -n 5 bbcb $@ Где сам bbcb при том использует переменные окружения: Код: #!/bin/sh pd="/usr/lib/blackbox" sd=`readlink -f .` env \ BB_PRIMARY_DIR="${pd}" BB_SECONDARY_DIR="${sd}" \ "${pd}"/blackbox А аргументы для расчёта уже предаю в виде аргументов командной строки. Обращаюсь к ним через Kernel.argc Kernel.argv Это была рабочая ситуация, когда отлаживал MPI. Так что тут переменные окружения отделяют настройки ББ от аргументов расчёта вполне удачно. Да и сам ББ сейчас так распространяется со скриптом запуска, как я выше привел. И это удачный вариант. Так как вызов из директории, делает её рабочей. Но для чтения через командную строку тоже не против добавить режим в HostEnv, чтобы он проверял "/BB_SECONDARY_DIR" или "--BB_SECONDARY_DIR" |
Автор: | Comdiv [ Понедельник, 24 Февраль, 2020 22:39 ] |
Заголовок сообщения: | Re: #020 Host: добавить модуль для чтения параметров запуска |
Иван Денисов писал(а): Вот скажем я запускаю расчет:... И где-нибудь из-за такой ошибкиКод: env \ BB_PRIMARY_DIR="${pd}" BB_SECONDARY_D1R="${sd}" \ "${pd}"/blackbox Что-то может пойти не так, и ББ об этом не сможет сообщить |
Автор: | Илья Ермаков [ Вторник, 25 Февраль, 2020 00:17 ] |
Заголовок сообщения: | Re: #020 Host: добавить модуль для чтения параметров запуска |
На конференции "Доверенные системы" в этом году и ФГУП НТЦ "Атлас", и ИСП РАН в своем плаче о том, как тяжело сделать хоть немного доверенной экосистему GNU, особо обращали внимание на переменные окружения как фактор всяких уязвимостей. |
Автор: | Евгений Темиргалеев [ Вторник, 25 Февраль, 2020 00:24 ] |
Заголовок сообщения: | Re: #020 Host: добавить модуль для чтения параметров запуска |
С точки зрения системы и переменные окружения и параметры командной строки являются законным способом передачи параметров в программу. Переменные окружения были задействованы в Linux в свое время просто как единственный адекватный вариант, потому что доступ к аргументам командной строки был проблематичен. Теперь, когда Trurl написал новый линкер, эта проблема ушла. Но это не противоречит тому, чтобы навести порядок в Host, поместив извлечение параметров в отдельный модуль. |
Автор: | Иван Денисов [ Четверг, 27 Февраль, 2020 12:47 ] |
Заголовок сообщения: | Re: #020 Host: добавить модуль для чтения параметров запуска |
Спасибо, Евгению, теперь Блэкбокс в Linux умеет читать еще и параметры запуска через аргументы командной строки: Код: ./blackbox --BB_PRIMARY_DIR="." --BB_SECONDARY_DIR="/home/dia" Чтобы работала переменная BB_SECONDARY_DIR нужно обязательно указать BB_PRIMARY_DIR. Но если BB_PRIMARY_DIR задана через переменную окружения, то тогда достаточно указать только BB_SECONDARY_DIR Код: bbcb --BB_SECONDARY_DIR="/home/dia" Графический пример: Вложение: Всё это работает с версии 1.8-a1.015 |
Автор: | Иван Денисов [ Понедельник, 02 Март, 2020 09:39 ] |
Заголовок сообщения: | Re: #020 Host: добавить модуль для чтения параметров запуска |
luowy в чате предложил оформить также более традиционные интерфейсы. И назвать Args по аналогии с другими Оберон/Модула системами. Код: (** Args -- access to program arguments and evironment *) MODULE Args; (** argc -- number of arguments *) VAR argc-: INTEGER; (** GetArg -- fetch an argument into a string buffer *) PROCEDURE GetArg*(n: INTEGER; VAR s: ARRAY OF CHAR) IS "Args_GetArg"; (* CODE const char *t = (0 <= args[0].i && args[0].i < saved_argc ? saved_argv[args[0].i] : ""); obcopy((char * ) args[1].x, t, args[2].i); *) (** GetEnv -- fetch an environment variable into a string buffer *) PROCEDURE GetEnv*(name: ARRAY OF CHAR; VAR s: ARRAY OF CHAR) IS "Args_GetEnv"; (* CODE const char *t = getenv((char * ) args[0].x); if (t == NULL) t = ""; obcopy((char * ) args[2].x, t, args[3].i); *) PROCEDURE SetArgc(VAR ac: INTEGER) IS "Args_SetArgc"; (* CODE ( *(args[0].p)).i = saved_argc; *) BEGIN SetArgc(argc) END Args. Также высказывал предложение про интерфейсный модуль. И потому горячу поддерживаю эту инициативу, в свете тренда по развитию средств интеграции Блэкбокса с ОС и другими программами. Раз в Блкэкбоксе фактически уже есть реализации для этого интерфейса. То не вижу из каких соображений не добавить такой интерфейс. Если есть люди, которые считают, что взятие переменных окружения и аргументов командной строки — это Bells & Whistles и, что мы превращаем Блэбокс в Visual Studio, тоже выскажитесь на этот счёт. |
Автор: | Евгений Темиргалеев [ Понедельник, 02 Март, 2020 09:49 ] |
Заголовок сообщения: | Re: #020 Host: добавить модуль для чтения параметров запуска |
Я считаю, что необходимость привязывать прикладную часть ББ к конкретным механизмам нижележащей системы надо обосновать. И это обоснование должно быть более весомым, чем "потому что так везде". "Потому что так у всех" еще не значит, что нет другого более оптимального на перспективу решения. Например, можно ввести более общий интерфейс, который позволяет прикладным компонентам получать параметры из внешней среды в виде ключ/значение. А откуда эти параметры берутся -- это уже дело десятое. В одной сборке они могут браться из командной строки, во второй из переменных окружения, в третьей сразу и оттуда и оттуда, а в четвертой вообще читаются из файла или из реестра и т.п. Прикладному компоненту системы нужен параметр? На основании каких соображений он его должен читать именно из командной строки? Вот это мне не понятно. |
Автор: | Иван Денисов [ Понедельник, 02 Март, 2020 10:03 ] |
Заголовок сообщения: | Re: #020 Host: добавить модуль для чтения параметров запуска |
Это нужно, чтобы уменьшить использование ядра напрямую. Сейчас люди просто используют Kernel.argc Kernel.argv Код получается не кросс-платформенным, и это плохо. Для решения прикладных задач надо контролировать откуда пришел параметр, из командной строки или переменной окружения. Для настроек Блэкбокса в общем-то не важно. Так что ваша идея с GetPar я считаю отлично решает проблему настройки. Но раз она реализует и решает ходом другую проблему, то давайте решим и её также. |
Автор: | Иван Денисов [ Понедельник, 02 Март, 2020 10:23 ] |
Заголовок сообщения: | Re: #020 Host: добавить модуль для чтения параметров запуска |
Согласен с тем, что в некой абстрактной ОС нет понятия переменной окружения и нет понятия аргументов командной строки. Так что возможно в System не лучшее место. Тем не менее в Dialog, например есть глобальная переменная commandLinePars. |
Автор: | Иван Денисов [ Понедельник, 02 Март, 2020 11:13 ] |
Заголовок сообщения: | Re: #020 Host: добавить модуль для чтения параметров запуска |
Раз необходимо обобщение, то я бы тогда сделал параметры двух видов: - параметры окружения (операционной системы, сессии, пользователя) - параметры запуска программы (аргументы командной строки, файлы с конфигурацией запуска и т.п.) В общем они все параметры, так что получается в интерфейсе три процедуры для чтения: - GetEnv - GetRun - GetPar, как обобщение первого и второго. |
Автор: | adimetrius [ Понедельник, 02 Март, 2020 13:18 ] |
Заголовок сообщения: | Re: #020 Host: добавить модуль для чтения параметров запуска |
Евгений Темиргалеев писал(а): Например, можно ввести более общий интерфейс, который позволяет прикладным компонентам получать параметры из внешней среды в виде ключ/значение. А откуда эти параметры берутся -- это уже дело десятое. В одной сборке они могут браться из командной строки, во второй из переменных окружения, в третьей сразу и оттуда и оттуда, а в четвертой вообще читаются из файла или из реестра и т.п. Плюсую. Это дает возможность абстрагироваться от источника настроек тем, кому это не важно; а кому важно - если, напр, я в Лин пишу утилиту командной строки - будут напрямую обращаться к параметрическому бэкэнду. Или с парой ключ/значение можно сообщать, откуда оно взялось. Располагаться этот интерфейс должен в Dialog, кмк - если сохранять преемственность, поскольку там сейчас чтение параметров комстроки. |
Автор: | Иван Денисов [ Четверг, 12 Март, 2020 07:04 ] |
Заголовок сообщения: | Re: #020 Host: добавить модуль для чтения параметров запуска |
Теперь надо вот так запускать Windows версию в Wine Код: #!/bin/sh wine '/home/dia/oberon/blackbox/BlackBox.exe' /USE "`winepath -w "$PWD"`" $* & Раньше вот так работало Код: #!/bin/sh
wine '/home/dia/oberon/blackbox/BlackBox.exe' -use "`winepath -w "$PWD"`" $* & |
Автор: | kekc_leader [ Понедельник, 18 Январь, 2021 07:03 ] |
Заголовок сообщения: | Re: #020 Host: добавить модуль для чтения параметров запуска |
Comdiv писал(а): 2. С переменными окружения возможно неявное проникновение нежелательных параметров Это для стабильности Оберона крайне важно. В переменных окружения может оказаться что угодно, и прийти оно может откуда угодно. Поэтому, если, скажем, какое-то приложение объявило, что считывает такие-то переменные окружения, люди стали им пользоваться и вписывать в скрипты, а потом произошло обновление, в результате которого приложение стало считывать ещё какие-то переменные окружения, то уже нельзя сказать, будут ли эти скрипты продолжать работать корректно. Хотя тот, кто скрипт писал, никаких дополнительных параметров явно не передавал, а только те, из первого набора. |
Автор: | Comdiv [ Воскресенье, 24 Январь, 2021 22:04 ] |
Заголовок сообщения: | Re: #020 Host: добавить модуль для чтения параметров запуска |
kekc_leader писал(а): В переменных окружения может оказаться что угодно, и прийти оно может откуда угодно. Поэтому, если, скажем, какое-то приложение объявило, что считывает такие-то переменные окружения, люди стали им пользоваться и вписывать в скрипты, а потом произошло обновление, в результате которого приложение стало считывать ещё какие-то переменные окружения, то уже нельзя сказать, будут ли эти скрипты продолжать работать корректно. Хотя тот, кто скрипт писал, никаких дополнительных параметров явно не передавал, а только те, из первого набора. Свежий пример уязвимости на переменных окружения как часть общей картины проблемности этого типа данных: Цитата: Уязвимость заключается в том, что flatpak-portal передаёт переменные окружения, специфичные для обращающегося к сервису процесса, в обработчики, не изолированные от основной системы (например, запуская команду "flatpak run"). Вредоносное приложение может выставить переменные окружения, влияющие на работу "flatpak run", и запустить любой код на стороне хост-окружения.
|
Автор: | kekc_leader [ Вторник, 26 Январь, 2021 04:05 ] |
Заголовок сообщения: | Re: #020 Host: добавить модуль для чтения параметров запуска |
Консольные приложения иногда считаются чем-то маргинальным, а ведь на серверах практически всё консольное. В свете возникающей иногда необходимости писать консольные приложения, прошу обдумать следующее предложение: Позволить программам на ББ получать аргументы командной строки в чистом виде через единую (кроссплатформенную) переменную или процедурный вызов. |
Автор: | Иван Денисов [ Вторник, 26 Январь, 2021 05:23 ] |
Заголовок сообщения: | Re: #020 Host: добавить модуль для чтения параметров запуска |
С помощью HostEnv cделал, чтобы Dialog.commandLinePars корректно устанавливался на всех платформах. Вместо HostMenus установка происходит в HostDialog, так что в консольной версии эта переменная теперь тоже корректно устанавливается. |
Автор: | Иван Денисов [ Вторник, 26 Январь, 2021 05:26 ] |
Заголовок сообщения: | Re: #020 Host: добавить модуль для чтения параметров запуска |
Ещё вопрос возник. HostMenus содержит следующую возможность: Код: (* File for specifying command line options *) cmdLinePath = "System/Rsrc"; cmdLineFile = "CommandLine.txt"; Как вы относитесь к этой функциональности? Сейчас она поддерживается только в Windows версии. Может быть убрать это из Блэкбокса? Есть ли прецеденты, что кто-то пользовался этим? |
Автор: | Борис Рюмшин [ Вторник, 26 Январь, 2021 11:59 ] |
Заголовок сообщения: | Re: #020 Host: добавить модуль для чтения параметров запуска |
Так Env вроде бы работает универсально и с переменными окружения и с параметрами строки. Нет? |
Автор: | Иван Денисов [ Вторник, 26 Январь, 2021 12:23 ] |
Заголовок сообщения: | Re: #020 Host: добавить модуль для чтения параметров запуска |
Борис Рюмшин писал(а): Так Env вроде бы работает универсально и с переменными окружения и с параметрами строки. Нет? Ну только он HostEnv, а использовать модули подсистемы Host нельзя в проектах. Нужен тогда какой-то интерфейсный модуль Env. У Артура похоже желание самому как-то парсить командную строку. |
Автор: | Comdiv [ Вторник, 26 Январь, 2021 14:15 ] |
Заголовок сообщения: | Re: #020 Host: добавить модуль для чтения параметров запуска |
Иван Денисов писал(а): Может быть убрать это из Блэкбокса? Есть ли прецеденты, что кто-то пользовался этим? Похоже на костыль, а костыли для того и создают, чтобы пользоваться. Так что увы. Но может быть, что в нём уже давно отпала потребность, и о нём забыли.
|
Страница 2 из 3 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |