我正在尝试在 Ubuntu Core 上创建启动脚本,以便能够usb_modeswitch
更改连接到该设备的其中一个设备的模式。我在 Dragonboard410c 上运行 Ubuntu Core。
和经典的 Ubuntu 桌面一样,我尝试编辑/etc/rc.local
但是,即使我这样做了,sudo vi /etc/rc.local
我也无法编辑,rc.local
因为它抱怨说它只是一个只读文件。
我尝试直接从 SD 卡编辑文件(这适用于 netplan 上的配置文件),但不知何故rc.local
在 SD 卡中不可见。
如何在 Ubuntu Core 上启动时使用 apt 样式的软件包?我需要为此创建单独的 snap 吗?
先感谢您
答案1
检查您的根文件系统是否以读写权限挂载(通过/etc/mountab
或/etc/fstab
)。只读文件系统不允许编辑其上的文件,即它可能不是文件本身的问题。
如果是只读的,请使用sudo mount -o remount,rw /
命令。请注意,出于安全原因,snappy core(如果我没记错的话)应该是只读文件系统
答案2
你不能写信的原因/etc/rc.local在命令的输出中找到mount
(此处截断)。
/dev/mmcblk0p4 on /writable type ext4 (rw,relatime,data=ordered)
/dev/loop0 on / type squashfs (ro,relatime)
Ubuntu Core 将根文件系统挂载为壁球它是只读的。 部分文件系统被挂载为读写mount
然而,正如您在命令的非截断输出中看到的那样rc.本地不住在其中之一。
如何解决这个问题:
首先,rc.本地是一种遗产系统初始化该文件已被取代系统D它现在是 Ubuntu 和其他所有发行版的默认设置。
因此你不能通过调用来执行脚本rc.本地因为它是反渗透。在启动时提升服务的更好、更精细的方法是使用 SystemD 计时器。这具有相对于其他服务提升服务的优势。这是一个解剖刀与 sysvinit 的 rc.local 相比弯刀。
要在启动过程中的精确时间点执行脚本,请使用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-