LukeShortCloud / rootpages

Root Pages is a collection of easy-to-reference tutorials and guides primarily for Linux and other UNIX-like systems.
Other
56 stars 6 forks source link

[administration][chromebook] How to re-enable updates #339

Open LukeShortCloud opened 3 years ago

LukeShortCloud commented 3 years ago

When remounting the root file system as rw, Chrome updates stop. [1] This will be an ongoing issue of me trying to clean-room reverse engineer (by trial-and-error mostly) what happens and how to restore updates.

  1. https://chromium.googlesource.com/chromiumos/docs/+/master/developer_mode.md
LukeShortCloud commented 3 years ago

Problem number 1: The update-engine service stops work.

chronos@localhost / $ sudo /usr/sbin/update_engine --foreground --logtostderr
[0303/175659.304979:ERROR:bus.cc(393)] Failed to connect to the bus: Failed to connect to socket /usr/local/var/run/dbus/system_bus_socket: No such file or directory
chronos@localhost / $ sudo update_engine_client --help
[0303/175237.266581:ERROR:bus.cc(393)] Failed to connect to the bus: Failed to connect to socket /usr/local/var/run/dbus/system_bus_socket: No such file or directory
[0303/175237.266676:ERROR:update_engine_client.cc(84)] UpdateEngineService not available.

You can control the service with {start|stop|restart} update-engine.

I found the update-engine.service systemd unit file for it in the Chromium repository. [1] Strangely, it did not exist on my Chromebook (anymore?). The full command for the daemon is /usr/sbin/update_engine --foreground --logtostderr. Running that command shows the same error.

I was able to find a system_bus_socket, symlink it to where it wanted, and then got the update_engine to work!

$ chronos@localhost / $ sudo ln -s /var/run/dbus/system_bus_socket /usr/local/var/run/dbus/system_bus_socket
  1. https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/master/chromeos-base/update_engine/files/update-engine.service
LukeShortCloud commented 3 years ago

Problem number 2: The systemd unit file really is missing and is required.

chronos@localhost / $ sudo update_engine_client --check_for_update
[0303/191853.672558:INFO:update_engine_client.cc(481)] Initiating update check.
[0303/191853.673519:ERROR:object_proxy.cc(621)] Failed to call method: org.chromium.UpdateEngineInterface.AttemptUpdateWithFlags: object_path= /org/chromium/UpdateEngine: org.freedesktop.DBus.Error.ServiceUnknown: The name org.chromium.UpdateEngine was not provided by any .service files
[0303/191853.673565:ERROR:dbus_method_invoker.h(112)] CallMethodAndBlockWithTimeout(...): Domain=dbus, Code=org.freedesktop.DBus.Error.ServiceUnknown, Message=The name org.chromium.UpdateEngine was not provided by any .service files
[0303/191853.673586:ERROR:update_engine_client.cc(484)] Error checking for update.
LukeShortCloud commented 3 years ago

CloudReady also supports rootfs verification. [1] I am unsure how 1:1 it is to Chrome OS. It is worth a try to spin up a CloudReady VM and compare the file system on there to that of my Chromebook.

  1. https://cloudreadykb.neverware.com/s/article/Disabling-RootFS-Verification
LukeShortCloud commented 3 years ago

Updates starting working again. I did not change anything further. I will keep this open so that I can capture notes of relevant things learned (ex., how to start/stop/restart the update service).