我试图在Ubuntu上创建一个启动脚本,以使usb_modeswitch能够更改连接到该设备的设备之一的模式。我正在Dragonboard410c上运行Ubuntu。
和经典的Ubuntu桌面一样,我尝试过编辑/etc/rc.local
然而,即使我做了sudo vi /etc/rc.local,我也不能编辑rc.local,因为它抱怨它只是一个只读文件。
我试着直接从SD卡编辑文件(这适用于netplan上的配置文件),但是在SD卡中看不到rc.local。
您应该如何在Ubuntu的引导上使用apt风格的包。我需要为这个创建一个单独的快照吗?
提前谢谢你
发布于 2018-04-18 04:48:33
检查根文件系统是否具有读写权限(通过/etc/mountab或/etc/fstab )。只读文件系统不允许在其上编辑文件,也就是说,它本身可能不是文件问题。
如果它是只读的,请使用sudo mount -o remount,rw /命令.注意,snappy core ( iirc )出于安全考虑,它是一个只读文件系统。
发布于 2019-05-09 07:16:34
不能写入/etc/rc.local的原因是在mount命令的输出中找到的(此处截断)。
/dev/mmcblk0p4 on /writable type ext4 (rw,relatime,data=ordered)
/dev/loop0 on / type squashfs (ro,relatime)Ubuntu将根文件系统挂载为squashfs,这是只读的。正如您在mount命令的非截断输出中看到的那样,文件系统的部分被挂载为rw,但是rc.local并不存在于其中之一。
首先,rc.local是一个遗留的sysvinit文件,它已经被SystemD所取代,它现在是Ubuntu和其他发行版中的默认版本。
所以您不能通过从rc.local调用脚本来执行它,因为它是ro。在引导时使用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-
https://askubuntu.com/questions/1023666
复制相似问题