Какие возможности Linux мне нужны для записи в / proc / sys / vm / drop_caches?

::respawn:-/bin/sh

Используя BR2_ROOTFS_OVERLAY, сделайте гостевой /etc/inittab содержащим:

::respawn:-/bin/sh

вместо стандартной строки вида:

console::respawn:/sbin/getty -L console 0 vt100

Вы можете скопировать стандартный inittab из output/target/etc/inittab после сборки.

Я нашел это, изучая examples/inittab в Busybox 1_28_3, нашел это, попробовал, и это сработало, так что это лучшее решение, которое я нашел до сих пор.

Не забывайте о ведущем тире -, иначе действия по управлению заданиями, такие как Ctrl + C, не будут работать, как указано ниже.

Ведущее тире - волшебным образом разбирается BusyBox' init: https://github.com/mirror/busybox/blob/1_28_3/init/init.c#L439 и устанавливает TTY для следующей команды.

BusyBox также добавляет - к началу или arg[0], что /bin/sh интерпретирует как указание оболочки входа в систему, что заставляет его использовать некоторые файлы init, такие как /etc/profile. См. также: https://stackoverflow.com/a/42291142/895245

Следующее эквивалентно, поскольку console является значением по умолчанию:

console::respawn:-/bin/sh

Чтобы войти в систему под другим пользователем по умолчанию, вы можете использовать вместо этого:

::respawn:-/bin/login -f user0

Вот пример настройки.

Предыдущий ответ: getty -l

Спустя почти два года я нашел это! :-)

Используя BR2_ROOTFS_OVERLAY, переопределите / создайте следующие файлы:

/etc/inittab: начните с https://github.com/buildroot/buildroot/blob/2018.02/package/busybox/inittab и отредактируйте строку консоли так:

console::respawn:/sbin/getty -n -L -l /loginroot.sh console 0 vt100

/loginroot.sh:

#!/bin/sh
exec /bin/login root

/bin/login - это исполняемый файл по умолчанию, если не указано -l. Мы создали исполняемый файл, который вызывает /bin/login с уже указанным пользователем root.

Это заставляет init пытаться войти в систему как пользователь root по умолчанию, а затем, поскольку пароль по умолчанию пуст (BR2_TARGET_GENERIC_ROOT_PASSWD), он автоматически входит в систему.

Эта техника в основном реализует опцию -a , присутствующую в getty Ubuntu 14.04, которой нет в реализации BusyBox.

Затем, чтобы войти в систему под другим пользователем, просто выполните:

/bin/login

Вот пример установки.

Предыдущий ответ: console::respawn:/bin/sh

Я спрашивал в списке рассылки, и Томас Петаццони ответил, что:

/etc/inittab

должно содержать:

console::respawn:/bin/sh

вместо:

console::respawn:/sbin/getty -n -L  console 0 vt100 # GENERIC_SERIAL

С qemu_x86_defconfig, inittab используется системой init Busybox, из-за BR2_INIT_BUSYBOX=y.

Однако у этого метода есть и обратная сторона: сразу после входа в систему появляется сообщение:

/bin/sh can't access tty; job control turned off

и, как и было заявлено, такие вещи, как Ctrl+C не будут иметь никакого эффекта.

5
13.06.2015, 01:18
1 ответ

Я только что проверил следующее:

docker run -ti --rm -v /proc:/writable_proc rhel bash
echo 3 > /writable_proc/sys/vm/drop_caches

И это не удалось:

bash: /writable_proc/sys/vm/drop_caches: Permission denied

Я запускаю его с привилегиями:

docker run -ti --rm --privileged -v /proc:/writable_proc rhel bash
echo 3 > /writable_proc/sys/vm/drop_caches

И все работало, поэтому я почти уверен, что каким-то образом все сработало для Жиля, потому что его демон или cli настроен на использование привилегированных, не зная об этом:

1
27.01.2020, 20:36

Теги

Похожие вопросы