Open Eeems opened 3 weeks ago
More files of interest:
/usr/bin/fakeupdateengine_service
/lib/systemd/system/update-engine.service.d/override.conf
[Unit]
PartOf=swupdate.service
/etc/systemd/system/multi-user.target.wants/update-engine.service
symlink to /etc/systemd/system/update-engine.service
/etc/systemd/system/update-engine.service
[Unit]
Description=Fake Update Engine
After=dbus.service swupdate.service
Requires=dbus.service swupdate.service
[Service]
Type=dbus
BusName=no.remarkable.update1
ExecStart=/usr/bin/fakeupdateengine_service
User=root
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
I've been trying to track down what handles getting the update to the device, and from there what the server it's pulling it from is. I believe this is used somehow: https://docs.memfault.com/docs/linux/reference-memfaultd-configuration/
/etc/memfaultd.conf
{
"persist_dir": "/home/root/.memfault/",
"upload_interval_seconds": 1200,
"heartbeat_interval_seconds": 1200,
"enable_data_collection": true,
"software_version": "3.11.2.5",
"software_type": "device",
"project_key": "JLPsMk3iNn9rmBptmhVq2NYtO4RaiFM7",
"base_url": "https://device.cloud.remarkable.com",
"swupdate": {
"input_file": "/etc/swupdate.cfg",
"output_file": "/tmp/swupdate.cfg"
},
"http_server": {
"bind_address": "127.0.0.1:8787"
},
"coredump": {
"coredump_max_size_kib": 96000,
"rate_limit_count": 5,
"rate_limit_duration_seconds": 3600,
"storage_min_headroom_kib": 10240,
"storage_max_usage_kib": 96000
}
}
/lib/systemd/system/memfaultd.service
[Unit]
Description=memfaultd daemon
After=\
local-fs.target \
network.target \
dbus.service \
Before=\
swupdate.service \
collectd.service \
[Service]
Type=forking
PIDFile=/run/memfaultd.pid
ExecStart=/usr/bin/memfaultd --daemonize
# Wait for the PID file to be populated before returning
ExecStartPost=/bin/sh -c "while [ $(cat /run/memfaultd.pid 2>/dev/null | wc -c) -eq 0 ]; do sleep 0.1; done"
Restart=on-failure
[Install]
WantedBy=multi-user.target
/lib/systemd/system/memfaultd.service.d/override.conf
[Unit]
After=home.mount
[Service]
# Default if no override key is found
Environment=CONF_FILE=/etc/memfaultd.conf
EnvironmentFile=-/tmp/.memfault.env
# Generates .memfault.env if override key exists
ExecStartPre=/usr/libexec/project-key-override-checker.sh
ExecStart=
ExecStart=/usr/bin/memfaultd --daemonize --config-file "${CONF_FILE}"
/usr/libexec/project-key-override-checker.sh
#!/usr/bin/env bash
set -u
override_key_path="/home/root/.config/remarkable/memfault_project_key.conf"
conf="/etc/memfaultd.conf"
custom_override_conf="/tmp/.memfaultd-override.conf"
env_file="/tmp/.memfault.env"
rm -f "${env_file}"
rm -f "${custom_override_conf}"
if [ ! -e "${override_key_path}" ]; then
exit 0
fi
# Key is expected to be 32 characters of alnum ([A-Za-z0-9])
override_key="$(head -n 1 "${override_key_path}" | grep -Eo '^[[:alnum:]_-]+$')"
if [ ! -z "${override_key}" ]; then
sed "s/^\([[:blank:]]*\"project_key\"[[:blank:]]*:[[:blank:]]*\)\"[[:alnum:]]\+\"[[:blank:]]*,$/\1\"${override_key}\",/" "${conf}" > "${custom_override_conf}"
echo "CONF_FILE=\"${custom_override_conf}\"" > "${env_file}"
fi
/tmp/swupdate.cfg
globals :
{
verbose = false;
loglevel = 2;
syslog = true;
};
download :
{
retries = 3;
timeout = 1800;
};
suricatta :
{
confirm = 0;
polldelay = 300;
retry = 4;
retrywait = 200;
loglevel = 10;
userid = 0;
groupid = 0;
max_artifacts = 1;
url = "https://device.cloud.remarkable.com/api/v0/hawkbit";
id = "...";
tenant = "default";
gatewaytoken = "...";
};
identify = (
{
name = "memfault__current_version";
value = "3.11.2.5";
},
{
name = "memfault__hardware_version";
value = "reMarkable1";
},
{
name = "memfault__software_type";
value = "device";
} );
I've snipped two things, as I don't know if they are generated on device or not.
https://github.com/sbabic/swupdate/blob/master/suricatta/server_hawkbit.c This appears to be what consumes the settings to communicate with the server.
All swupdate related files I was able to find in a rM1 update image:
Some files of interest:
/usr/lib/swupdate/conf.d/09-swupdate-args
I would be interested to know what is in
/tmp/swupdate.cfg
when it exists./lib/systemd/system/swupdate.service.d/swupdate-service-override.conf
/lib/systemd/system/swupdate.socket.d/swupdate-socket-override.conf
/lib/systemd/system/swupdate.service
/lib/systemd/system/swupdate.socket