+1
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
// https://docs.docker.com/engine/api/v1.24/#create-a-container
POST /v1.24/containers/create HTTP/1.1
Content-Type: application/json
Content-Length: 12345
{
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": true,
"AttachStderr": true,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"FOO=bar",
"BAZ=quux"
],
...
}
Ядро предоставляет сисколл execve. Execve принимает переменные окружения в виде массива строк A=B -
не знаю конкретных причин, почему так сделано, но скорее всего просто потому что писать хэшмапу под
это дело, которая еще и будет выкинута из памяти через относительно небольшое время - дело дорогое и
ненужное, плюс наверняка какой-нибудь лишний пердолинг со стеком.
https://man7.org/linux/man-pages/man2/execve.2.html
Го, "человеческий язык" с поддержкой обычных мап из коробки, ничтоже сумляшеся не замечает никакой
проблемы и заставляет пользователя передавать переменные окружения в том же формате, потому что у
языка не только синтаксис должен быть таким же тупым, как программист на нём и вообще мы же тут
делаем вид, что мы C, только лучше.
https://golang.org/pkg/os/exec/#example_Command_environment
Докер, "человеческий сервис" с HTTP API, использующим формат JSON с поддержкой обычных мап из коробки,
ничтоже сумляшеся не замечает никакой проблемы и заставляет пользователя передавать переменные
окружения в том же формате, потому что на программист на языке должен быть тупым, как этот язык.
https://docs.docker.com/engine/api/v1.24/#create-a-container
В результате мы имеем пачку долбоебов, из-за которых оперирующие (мапами / объектами / словарями / как угодно назовите)
нормальные люди должны вести себя как типичные гошники.
Запостил: Fike,
17 Февраля 2021
bormand 17.02.2021 20:27 # +1
MAPTbIwKA 17.02.2021 20:31 # 0
кстати, пинда тоже блок переменных строкой принимает
bormand 17.02.2021 20:32 # 0
MAPTbIwKA 17.02.2021 20:33 # 0
bormand 17.02.2021 20:36 # 0
MAPTbIwKA 17.02.2021 20:46 # 0
у винды это где-то в PEBе лежит вроде, у прыща не знаю как называется, PCB небось?. Но видно тут
bormand 17.02.2021 21:03 # 0
MAPTbIwKA 17.02.2021 21:07 # 0
bormand 17.02.2021 21:08 # 0
MAPTbIwKA 17.02.2021 21:11 # 0
ты имел ввиду, что остальные странички ведут себя как корова, а именно этот блок честно копируется?
bormand 17.02.2021 21:21 # 0
Большинство старых страничек тупо дропается. Мы же про exec, а не про fork.
MAPTbIwKA 17.02.2021 21:23 # 0
а дескрипторы он не наследует разве? А терминал?
наследует же
Вообще обычно же делают fork, а потом exec, иначе ты сам себя заместишь, не завезли же NTшный CreateProcess
bormand 17.02.2021 21:25 # 0
Это же просто циферки... Я так понимаю, в юзермодной части о них вообще ничего нет.
> терминал
Обычный дескриптор, не?
MAPTbIwKA 17.02.2021 21:31 # 0
Есть некоторая память, связанная с процессом.
Ну да, эта память скорее всего ядерная, юзермоду не доступная.
Но она же тоже копируется (точнее, не удаляется)
stdout (циферка) указывает же на тот же самый tty, например
MAPTbIwKA 17.02.2021 21:38 # 0
execve замещает процесс with newly initialized stack, heap, and (initialized and uninitialized) data segments.
но!
By default, file descriptors remain open across an execve().
но !
File descriptors that are marked close-on-exec are closed;
так что файл может и закрыться, смотря как откроешь
ps: вектор (строку) с переменными можно явно передать, а если не передать, то онаскоприуется из переменной "environ" (глобальная позикс переменная с окружением)
Desktop 17.02.2021 21:38 # 0
MAPTbIwKA 17.02.2021 21:41 # 0
bormand 17.02.2021 21:27 # 0
А есть, кстати, проги которые это абузят для горячего апдейта. Скидываешь данные в шаред мемори, обновляешь код exec'ом, а все сокеты да пайпы у тебя остаются унаследованы и связь с клиентами не прерывается.
bormand 17.02.2021 20:38 # 0
MAPTbIwKA 17.02.2021 20:41 # 0
bormand 17.02.2021 20:44 # 0
> getenv("SH")
Найди 10 отличий? Не понял твой вопрос.
guest6 17.02.2021 20:45 # 0
bormand 17.02.2021 20:46 # 0
MAPTbIwKA 17.02.2021 20:48 # 0
я опечатался
bormand 17.02.2021 20:48 # 0
MAPTbIwKA 17.02.2021 20:58 # 0
Fike 17.02.2021 20:44 # 0
Fike 17.02.2021 21:08 # 0
MAPTbIwKA 17.02.2021 21:14 # 0
збс.
итого, в линуксе есть /etc/profile, /etc/bash.bashrc (для интерактивных логинов) и блядь /etc/enviroment какой-то
Fike 17.02.2021 21:16 # 0
Fike 17.02.2021 21:16 # 0
походу да, лол.
Desktop 17.02.2021 20:39 # 0
3_dar 17.02.2021 21:39 # 0
MAPTbIwKA 17.02.2021 21:46 # 0
Desktop 17.02.2021 21:49 # 0
bugs be bad
me bugs fixed
me guhd
MAPTbIwKA 17.02.2021 21:52 # 0
Fike 17.02.2021 22:02 # 0
guest6 17.02.2021 22:10 # 0
обии
Fike 18.02.2021 00:21 # 0
MAPTbIwKA 18.02.2021 01:04 # 0
Fike 18.02.2021 01:09 # 0
Desktop 18.02.2021 01:01 # 0