Редактирование rc.local для Ядра Ubuntu

Я пытаюсь создать сценарий запуска на Ядре Ubuntu для включения usb_modeswitch изменить режим одного из устройств, подключенных к устройству. Я выполняю Ядро Ubuntu на Dragonboard410c.

Как в классических рабочих столах Ubuntu, я пытался редактировать /etc/rc.local

Однако даже при том, что я делаю sudo vi /etc/rc.local Я не могу отредактировать rc.local поскольку это жалуется, что это - только файл только для чтения.

Я пытался редактировать файл непосредственно от SD-карты (Это работает на конфигурационные файлы на netplan), но так или иначе rc.local не видимо в SD-карте.

Как Вы, как предполагается, используете способные пакеты стиля на начальной загрузке на Ядре Ubuntu. Я должен создать отдельный снимок для этого?

Заранее спасибо

2
задан 9 May 2019 в 16:19

2 ответа

Проверьте, смонтирована ли Ваша корневая файловая система с полномочиями чтения-записи (через /etc/mountab или /etc/fstab ). Файловая система только для чтения не позволит редактировать файлы на нем, т.е. это не может быть сама проблема файла.

Если это только для чтения, использовать sudo mount -o remount,rw / команда. Обратите внимание, что мгновенное ядро, iirc, предназначено, чтобы быть файловой системой только для чтения из соображений безопасности

1
ответ дан 2 December 2019 в 03:33

Причина, которую Вы не можете записать в/etc/rc.local, найдена в mount вывод команды (усеченный здесь).

/dev/mmcblk0p4 on /writable type ext4 (rw,relatime,data=ordered)
/dev/loop0 on / type squashfs (ro,relatime)

Ядро Ubuntu монтирует корневую файловую систему как squashfs, который только для чтения. Части файловой системы смонтированы как rw, как Вы будете видеть в неусеченном выводе mount команда, однако rc.local не живет на одном из них.

КАК ОБОЙТИ ПРОБЛЕМУ:

Во-первых, rc.local является наследием sysvinit файл, который был вытеснен SystemD, который является теперь значением по умолчанию в Ubuntu и любом дистрибутиве.

Таким образом, Вы не можете выполнить сценарий путем вызова его от rc.local, потому что это - ro. Лучшее - и больше детализированного способа повысить сервисы на начальную загрузку - должно использовать Таймер SystemD. Это имеет преимущество повышения сервисов относительно других сервисов. Это - скальпель по сравнению с rc.local мачете sysvinit.

Для выполнения сценария в точной точке в начальной загрузке используют Таймер SystemD. Экземпляр сценария показывают ниже; настройте к своему определенному примеру использования

#!/bin/bash

cat <<EOF> /etc/systemd/system/myscript.service
[Unit]
Description=Customise Networking
Requires=network-online.target
After=snap.wifi-ap.management-service.service

[Service]
User=root
Group=root
Type=oneshot
ExecStart=/home/myuser/scripts/myscript.sh

[Install]
WantedBy=multi-user.target

EOF

chmod 644 /etc/systemd/system/myscript.service

systemctl enable myscript.service

Это было протестировано и доказано повысить службу поддержки, которую я создал в желаемой точке в начальной загрузке и переживаю перезагрузку. HTH-

1
ответ дан 2 December 2019 в 03:33

Другие вопросы по тегам:

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