#yocto #systemd #readonly
#yocto #systemd #только для чтения
Вопрос:
Я пытаюсь изменить часовой пояс во встроенном Linux (Yocto poky warrior) для Raspberry-pi Cm3. Но я не могу этого сделать. Я получаю сообщение об ошибке, в котором говорится
root@raspberrypi-cm3:~# timedatectl set-timezone "America/New_York"
Failed to set time zone: Failed to set time zone: Read-only file system
Это работало до изменения корневых файлов на доступные только для чтения.
Как я могу изменить часовой пояс в корневых файлах, доступных только для чтения?
Комментарии:
1. Если весь ваш корневой файл доступен только для чтения, вы не сможете ничего настроить во время выполнения. Если вы хотите частичную конфигурируемость, вам необходимо, чтобы части файловой системы были доступны для записи (варианты включают отдельную точку монтирования для / etc или создание символических ссылок для определенных файлов в / etc во время сборки, которые указывают на другое местоположение файловой системы, доступное для записи)
2. @JussiKukkonen Я действительно это сделал. Я переместился
/etc/localtime
и/etc/timzone
в доступную для записи часть файловой системы. Но я думаю, проблема в том, чтоtimedated.c
файл ищет/etc/localtime
, который, я думаю, мне нужно изменить. Но я не встраиваемый разработчик. И у меня возникли некоторые проблемы с пониманием кода. Могу ли я добавить эти вопросы на эту страницу?3. Смотрите: github.com/systemd/systemd/pull/8277 . TL; DR: на самом деле это невозможно «из коробки», вам нужно либо выбрать (и поддерживать) предлагаемый там патч, либо использовать overlayfs или другие способы обхода. По сути, /etc/localtime воссоздается (эквивалентом
ln -fs
) с помощью timedated при необходимости … что, очевидно, невозможно сделать, потому что это на RO FS.4. @qschulz ты послан богом. Я люблю тебя. Не могли бы вы, пожалуйста, оставить этот комментарий в качестве ответа.
Ответ №1:
/etc/localtime воссоздается (эквивалентом ln -fs
) с помощью timedated при необходимости … что, очевидно, невозможно сделать, потому что оно находится в RO FS.
На самом деле это невозможно из коробки, вам нужно либо выбрать (и поддерживать) следующий патч, либо использовать overlayfs или другие способы обхода.
Смотрите это для полного объяснения.
Комментарии:
1. Как вы используете
TIMEDATEDIR
?2. Как только я это сделаю. Я действительно вижу несоответствие между
date
иtimedatectl
.3. Я больше не работаю в компании, которая использует этот трюк, поэтому не могу ответить (с тех пор прошло 2 с половиной года ;)). В моем собственном посте вам нужно создать символическую ссылку между
/etc/localtime
и/path/rw/localtime
, чтобы инструменты, не привязанные ко времени, все еще могли получить к ней доступ. Если по символическим ссылкам не следуют, вам, вероятно, потребуется исправить любой инструмент, который читает/etc/localtime
напрямую, вместо того, чтобы следовать по символическим ссылкам.