OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 24 Июнь, 2021 02:40

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 54 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
СообщениеДобавлено: Понедельник, 24 Февраль, 2020 22:12 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3111
Вот скажем я запускаю расчет:
Код:
#!/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"


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 24 Февраль, 2020 22:39 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1301
Откуда: Киев
Иван Денисов писал(а):
Вот скажем я запускаю расчет:...
И где-нибудь из-за такой ошибки
Код:
env \
   BB_PRIMARY_DIR="${pd}" BB_SECONDARY_D1R="${sd}" \
   "${pd}"/blackbox

Что-то может пойти не так, и ББ об этом не сможет сообщить


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 25 Февраль, 2020 00:17 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9419
Откуда: Россия, Орёл
На конференции "Доверенные системы" в этом году и ФГУП НТЦ "Атлас", и ИСП РАН в своем плаче о том, как тяжело сделать хоть немного доверенной экосистему GNU, особо обращали внимание на переменные окружения как фактор всяких уязвимостей.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 25 Февраль, 2020 00:24 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4619
Откуда: Россия, Орёл
С точки зрения системы и переменные окружения и параметры командной строки являются законным способом передачи параметров в программу. Переменные окружения были задействованы в Linux в свое время просто как единственный адекватный вариант, потому что доступ к аргументам командной строки был проблематичен. Теперь, когда Trurl написал новый линкер, эта проблема ушла. Но это не противоречит тому, чтобы навести порядок в Host, поместив извлечение параметров в отдельный модуль.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 27 Февраль, 2020 12:47 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3111
Спасибо, Евгению, теперь Блэкбокс в 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"


Графический пример:
Вложение:
HostEnv.png
HostEnv.png [ 84.25 КБ | Просмотров: 1606 ]


Всё это работает с версии 1.8-a1.015


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 02 Март, 2020 09:39 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3111
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 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4619
Откуда: Россия, Орёл
Я считаю, что необходимость привязывать прикладную часть ББ к конкретным механизмам нижележащей системы надо обосновать. И это обоснование должно быть более весомым, чем "потому что так везде". "Потому что так у всех" еще не значит, что нет другого более оптимального на перспективу решения.

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 02 Март, 2020 10:03 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3111
Это нужно, чтобы уменьшить использование ядра напрямую. Сейчас люди просто используют Kernel.argc Kernel.argv
Код получается не кросс-платформенным, и это плохо. Для решения прикладных задач надо контролировать откуда пришел параметр, из командной строки или переменной окружения. Для настроек Блэкбокса в общем-то не важно. Так что ваша идея с GetPar я считаю отлично решает проблему настройки. Но раз она реализует и решает ходом другую проблему, то давайте решим и её также.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 02 Март, 2020 10:23 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3111
Согласен с тем, что в некой абстрактной ОС нет понятия переменной окружения и нет понятия аргументов командной строки. Так что возможно в System не лучшее место.
Тем не менее в Dialog, например есть глобальная переменная commandLinePars.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 02 Март, 2020 11:13 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3111
Раз необходимо обобщение, то я бы тогда сделал параметры двух видов:
- параметры окружения (операционной системы, сессии, пользователя)
- параметры запуска программы (аргументы командной строки, файлы с конфигурацией запуска и т.п.)

В общем они все параметры, так что получается в интерфейсе три процедуры для чтения:
- GetEnv
- GetRun
- GetPar, как обобщение первого и второго.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 02 Март, 2020 13:18 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 486
Евгений Темиргалеев писал(а):
Например, можно ввести более общий интерфейс, который позволяет прикладным компонентам получать параметры из внешней среды в виде ключ/значение. А откуда эти параметры берутся -- это уже дело десятое. В одной сборке они могут браться из командной строки, во второй из переменных окружения, в третьей сразу и оттуда и оттуда, а в четвертой вообще читаются из файла или из реестра и т.п.


Плюсую. Это дает возможность абстрагироваться от источника настроек тем, кому это не важно; а кому важно - если, напр, я в Лин пишу утилиту командной строки - будут напрямую обращаться к параметрическому бэкэнду. Или с парой ключ/значение можно сообщать, откуда оно взялось.

Располагаться этот интерфейс должен в Dialog, кмк - если сохранять преемственность, поскольку там сейчас чтение параметров комстроки.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 12 Март, 2020 07:04 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3111
Теперь надо вот так запускать 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"`" $* &


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 18 Январь, 2021 07:03 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 232
Откуда: г. Рига, Латвийская ССР
Comdiv писал(а):
2. С переменными окружения возможно неявное проникновение нежелательных параметров


Это для стабильности Оберона крайне важно. В переменных окружения может оказаться что угодно, и прийти оно может откуда угодно.
Поэтому, если, скажем, какое-то приложение объявило, что считывает такие-то переменные окружения, люди стали им пользоваться и вписывать в скрипты, а потом произошло обновление, в результате которого приложение стало считывать ещё какие-то переменные окружения, то уже нельзя сказать, будут ли эти скрипты продолжать работать корректно. Хотя тот, кто скрипт писал, никаких дополнительных параметров явно не передавал, а только те, из первого набора.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 24 Январь, 2021 22:04 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1301
Откуда: Киев
kekc_leader писал(а):
В переменных окружения может оказаться что угодно, и прийти оно может откуда угодно.
Поэтому, если, скажем, какое-то приложение объявило, что считывает такие-то переменные окружения, люди стали им пользоваться и вписывать в скрипты, а потом произошло обновление, в результате которого приложение стало считывать ещё какие-то переменные окружения, то уже нельзя сказать, будут ли эти скрипты продолжать работать корректно. Хотя тот, кто скрипт писал, никаких дополнительных параметров явно не передавал, а только те, из первого набора.

Свежий пример уязвимости на переменных окружения как часть общей картины проблемности этого типа данных:
Цитата:
Уязвимость заключается в том, что flatpak-portal передаёт переменные окружения, специфичные для обращающегося к сервису процесса, в обработчики, не изолированные от основной системы (например, запуская команду "flatpak run"). Вредоносное приложение может выставить переменные окружения, влияющие на работу "flatpak run", и запустить любой код на стороне хост-окружения.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 26 Январь, 2021 04:05 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 232
Откуда: г. Рига, Латвийская ССР
Консольные приложения иногда считаются чем-то маргинальным, а ведь на серверах практически всё консольное.

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

Позволить программам на ББ получать аргументы командной строки в чистом виде через единую (кроссплатформенную) переменную или процедурный вызов.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 26 Январь, 2021 05:23 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3111
С помощью HostEnv cделал, чтобы Dialog.commandLinePars корректно устанавливался на всех платформах. Вместо HostMenus установка происходит в HostDialog, так что в консольной версии эта переменная теперь тоже корректно устанавливается.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 26 Январь, 2021 05:26 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3111
Ещё вопрос возник. HostMenus содержит следующую возможность:
Код:
(* File for specifying command line options *)
cmdLinePath = "System/Rsrc";
cmdLineFile = "CommandLine.txt";

Как вы относитесь к этой функциональности? Сейчас она поддерживается только в Windows версии.
Может быть убрать это из Блэкбокса? Есть ли прецеденты, что кто-то пользовался этим?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 26 Январь, 2021 11:59 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4536
Откуда: Россия, Орёл
Так Env вроде бы работает универсально и с переменными окружения и с параметрами строки. Нет?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 26 Январь, 2021 12:23 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3111
Борис Рюмшин писал(а):
Так Env вроде бы работает универсально и с переменными окружения и с параметрами строки. Нет?

Ну только он HostEnv, а использовать модули подсистемы Host нельзя в проектах. Нужен тогда какой-то интерфейсный модуль Env.
У Артура похоже желание самому как-то парсить командную строку.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 26 Январь, 2021 14:15 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1301
Откуда: Киев
Иван Денисов писал(а):
Может быть убрать это из Блэкбокса? Есть ли прецеденты, что кто-то пользовался этим?
Похоже на костыль, а костыли для того и создают, чтобы пользоваться. Так что увы. Но может быть, что в нём уже давно отпала потребность, и о нём забыли.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 54 ]  На страницу Пред.  1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2021, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB