From a32b66700f399f5701a44957eca9bfedd7a076d5 Mon Sep 17 00:00:00 2001 From: Alexander Petrov Date: Thu, 30 Jul 2026 22:01:39 +0300 Subject: [PATCH] =?UTF-8?q?toolchain:=20make=5Fhdd.sh=20=E2=80=94=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=BA=D1=80=D1=8B=D0=B2=D0=B0=D1=82=D1=8C=20mtools=20?= =?UTF-8?q?=D0=9E=D0=91=D0=90=20=D0=BA=D0=B0=D0=BD=D0=B0=D0=BB=D0=B0=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BF=D1=80=D0=BE=D1=81=D0=B0,=20=D0=BD=D0=B5=20?= =?UTF-8?q?=D0=BE=D0=B4=D0=B8=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Прошлая правка убрала только управляющий терминал (os.setsid), и mmd переключился на stdin: lsof показал fd 0 = /dev/ttys002, процесс снова спал, теперь уже после отметки «копирование файлов». Каналов, откуда mtools может ждать ответ, два — /dev/tty и stdin — и закрывать надо оба. Обёртка mt() теперь и создаёт новую сессию, и подаёт stdin из /dev/null. Проверено: с stdin=/dev/null mmd на свежем образе отрабатывает с кодом 0, а на уже существующем каталоге честно возвращает 1 и ничего не спрашивает. Co-Authored-By: Claude Opus 5 --- toolchain/make_hdd.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/toolchain/make_hdd.sh b/toolchain/make_hdd.sh index 5b2b5f2..072b0fd 100755 --- a/toolchain/make_hdd.sh +++ b/toolchain/make_hdd.sh @@ -47,8 +47,14 @@ export MTOOLSRC="$MTC" MTOOLS_SKIP_CHECK=1 # тогда открыть /dev/tty нечего и mtools идёт неинтерактивным путём. # # setsid(1) в macOS нет, поэтому делаем то же самое питоном. +# Каналов, откуда mtools может ждать ответ, ДВА, и закрывать надо оба: +# /dev/tty — убирается новой сессией (os.setsid); +# stdin — убирается перенаправлением из /dev/null. +# Закрыть только один недостаточно: с одним лишь setsid mmd переключался на +# stdin и вис уже на нём (lsof: fd 0 = /dev/ttys002). mt() { - python3 -c 'import os,sys; os.setsid(); os.execvp(sys.argv[1], sys.argv[1:])' "$@" + python3 -c 'import os,sys; os.setsid(); os.execvp(sys.argv[1], sys.argv[1:])' \ + "$@" < /dev/null } # MBR + раздел 1 на весь диск (тип FAT16), затем формат FAT16.