Commit Graph

34 Commits

Author SHA1 Message Date
2dd96e15cb kdump-load.sh: Attempt creating initrd before kdump load, if we don't have one
There might be a (rare) case of missing initrd when loading a kdump.
It's rare mainly for 2 reasons:

(a) Pstore is the default log collection mechanism, kdump should only
be used as a fallback;

(b) When the package is installed, initrd is created for the
running kernel.

But imagine the user installs a new kernel with no Deck image upgrade;
this would cause the issue of a missing initrd if/when kdump is loaded.

We hereby fix it by attempting to create the initrd before kdump load,
in case it doesn't exist.

Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
2023-03-31 15:34:42 -03:00
5c1cc98502 kdump-steamos: Move configuration file out of /etc
This patch main goal is to "un-Debianize" the configuration file
for kdump-steamos - thanks Emil (@xexaxo) for the discussions; it
is with a bit of a heavy heart I do that, but let's comply with the
modern distros ;-)

We hereby put the config file in a more standard path: /usr/share.
Usually users could override that with /etc/ file, but not in this
case, or at least, not for now. Kdump/pstore is expected to work
quietly, with no users' interference. Advanced users might want to
play with the configs though; and those can just go ahead and edit
the /usr/share/kdump/kdump.conf - it's all documented in the README.

In the future we can improve that by having the override mechanism
with the /etc file, let's see if we have a demand for that.

Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
2023-03-31 15:34:42 -03:00
6ae626f17c kdump-steamos: Fix remaining shellcheck complaints
Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
2023-03-31 15:34:42 -03:00
d279ea84aa kdump.etc, submit-report.sh: Enhance Steam ID/Account obtaining
Currently we hardcode the account-related VDF file path in kdump,
and expose it in "/etc/default/kdump" - this is unnecessary since
this path is not expected to change nor users to mess with it; thanks
Emil (@xexaxo) for this suggestion.

So, this patch improves things in some ways:

(a) Do not expose VDF path or Valve's server URL in user configurable
file - no reasons for users to mess with that.

(b) Generate "/home" mount point based on DEVNODE, also determine
the username based on "getent'ing" the passwd database. See CAVEAT
below.

(c) Move the VDF parsing to a separate function to clean up the
submit log path on submit-report.sh .

No functional change is expected after this commit.

CAVEAT: Notice that "getent passwd" is *VERY* slow, and if we follow
a generic approach of doing it for UID_MIN..UID_MAX, it takes quite
some time. So, instead we simplify and just query the user 1000; this
might be a bit incomplete, but it's still better than hardcoding a
username as it's done until now.

Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
2023-03-31 15:34:42 -03:00
f6897255a2 kdump-steamos: Strengthen /etc/default/kdump checks
Instead of just checking the file existence, check if it's not
zero-sized.

Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
2023-03-31 15:34:42 -03:00
725d6d7149 kdump: Refactor devnode setting / derivation
Thanks to Emil (@xexaxo) suggestion, we hereby implement a less fragile
way of obtaining the "/home" mount point. Emil suggested that instead of
using device name directly, we could use the generic link, as in:
"/dev/disk/by-partsets/shared/home".

In principle the change would be simple, but it proved to be a bit tricky
due to the early boot stage kdump executes - in such point we don't have
this link available, so we need to rely in the full device name directly
on kdump collection. We achieve that by saving this information in the
kdump initrd - this is not completely safe, see the CAVEAT below.

Also, we improved kdump loading script by using "findmnt", a less
fragile / more elegant way of getting the "/home" mount point.

CAVEAT: NVMe multipathing introduced a "randomness" level to device
naming on Linux, so "nvme0n1" could be "nvme1n1" in some boots, if we
have more than one device. There is a kernel parameter to avoid that
("nvme_core.multipath=0"), see [0] for more information.
Due to this reason, we could in theory have different NVMe device
names between regular kernel boot and the kdump one, hence causing a
failure in kdump collection.
But this is pretty much safe since we don't have multiple NVMe
devices, also we could disable multipath in kernel config
(CONFIG_NVME_MULTIPATH) or use the above cmdline.

[0] https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1792660/

Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
2023-03-31 15:34:42 -03:00
e77d43c08f README: Do not mention the binary package anymore
Since it was removed from the repo...

Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
2023-03-31 15:34:42 -03:00
4d3a810bab kdump-steamos: swap underscore for hyphen in filenames
Currently half of the files are hyphenated, while the rest use
underscore. Just move everything to hyphens.

Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
2023-03-31 15:34:42 -03:00
f2df3c6365 kdump-steamos: add makefile with install target
People should not need to know the nitty gritty details - make install
should just work (tm).

Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
2023-03-31 15:34:42 -03:00
c8a3458d25 kdump-steamos: drop executable bit from scripts
The executable bit should be (and is) set during installation.

Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
2023-03-31 15:34:42 -03:00
f37987b570 kdump-steamos: drop PKGBUILD and binary package
These two have no place in the repo.

Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
2023-03-31 15:34:42 -03:00
5c8f9ec715 Bump version and add new binary package (v0.6)
Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
2023-03-31 15:34:42 -03:00
1cde924b40 submit_report.sh, kdump.etc: Add setting to disable log submission
Users may want to not submit logs to Valve servers, either for debug
purposes or just due to their preference. This patch adds a setting
for that, exposed in /etc/default/kdump . Information about this
tuning was added to README as well.

Finally, this commit also improves journal output when we bail-out
without submitting the logs to Valve servers, showing a friendly
message pointing to the locally saved file.

Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
2023-03-31 15:34:42 -03:00
304c45ed84 Improve README...
...by removing numbered list (buckets are better for clearing ToDos)
and a tentative "emoji"

Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
2023-03-31 15:34:42 -03:00
ea5f104c70 kdump_load.sh, kdump.etc: Introduce GRUB auto-setting support
With this addition, kdump-steamos is now capable of editing grub.cfg
to automatically add the required kdump parameters, in case kdump
is used. If Pstore ends-up being used and the grub.cfg was mofified
by kdump-steamos automatically, we're also able to undo the change
and save users from memory waste.

Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
2023-03-31 15:34:42 -03:00
0dd74fc114 Bump version and add new binary package (v0.5)
Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
2023-03-31 15:34:42 -03:00
571625336c kdump_load.sh: Improve logging and fix some shellcheck errors
Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
2023-03-31 15:34:42 -03:00
fae5982a50 submit_report.sh, kdump.etc: Add log submission mechanism
Finally we have a functional mechanism to upload the crash logs
to Valve servers (special thanks to TonyP for the API help).
Documentation is present in the README.MD as usual.

NOTE: worth to reinforce here what was alread mentioned in the
README: kdump-steamos doesn't perform any significant validation
against malicious usage of the log submission mechanism, like DDoS,
submitting a malicious ZIP binary, a very huge file, etc.
All of this is expected to be handled by the server side.

Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
2023-03-31 15:34:42 -03:00
b1e183e1dc submit_report.sh: Improve error logging consistency
Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
2023-03-31 15:34:42 -03:00
fb6bb6f06a submit_report.sh: Fix some small shellcheck warnings
Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
2023-03-31 15:34:42 -03:00
2cdc6ccfb0 submit_report.sh: Remove unreachable line
Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
2023-03-31 15:34:42 -03:00
7ecbbe8a58 Bump version and add new binary package (v0.4)
Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
2023-03-31 15:34:42 -03:00
3f2e57a8a9 Improve documentation
...specially the HOW-TO section for new users.

Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
2023-03-31 15:34:42 -03:00
2fd2372605 Change dump compression to ZIP
In order to make the dump "tarball" easy for consumption in both
Windows and Linux (and maybe more OS styles), we changed here the
compression format to ZIP; also, we're not creating a tarball anymore,
just a simple ZIP file with all the logs collected, no directory
structure.

Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
2023-03-31 15:34:42 -03:00
89e674264d Collect more system information after a panic event
...like DMI data, os-release build information, running kernel
version - in the future, we should also collect Steam application /
Proton / Games logs.

Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
2023-03-31 15:34:42 -03:00
0c45a7f988 Make submitter_load.sh executable
Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
2023-03-31 15:34:42 -03:00
10719e664e Keep track of panic sysctls in the kdump-steamos package
Before this patch, the sysctl parameters for panic on oops, lockups, etc
were tracked in the "image-recipes/jupiter" gitlab repositories. After
MR [0] this changed and now we must keep track of the sysctls inside
the kdump-steamos package.

Hence, this commit adds the sysctl config file into "/usr/lib/sysctl.d",
also introducing the "panic_print" sysctl, to enable dumping more info
on panic events.

[0] https://gitlab.steamos.cloud/jupiter/jupiter/-/merge_requests/1

Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
2023-03-31 15:34:42 -03:00
e9407c3132 Add a new/updated binary package (v0.3)
Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
2023-03-31 15:34:42 -03:00
3638dc8264 Multiple fixes and improvements
OK, likely I should have split this commit in many more, to ease
reviews and improve bisectability. But since I didn't, I'll at least
try to summarize here what was changed by this big commit, starting
with the more complex additions to the trivial ones:

- Added a log submission system; for now, it doesn't submit logs
to anywhere since we don't have such API well-defined. But it saves
the logs locally in a tar.zst, using timestamps to define the moment
of log collection and clears the old files. The naming of the log
compressed tarball makes use of the Deck serial number and Steam
most recent logged account (thanks @TonyP for that idea).

- Still on the log submission topic: we try first pstore logs, and
if we have none of them, we check kdump logs. In case we have a
vmcore, we save it locally (after renaming), but for now we consider
that this kind of file won't be submitted.

- Since we now have makedumpfile in Holo (thanks @xexaxo), I've
removed this binary from here and made this package dependent on
makedumpfile. Also, adjusted the respective scripts.

- Added some error messages through logger, in case we fail to
load pstore/kdump or fail in the log submission script.

- Changed systemd service to just do the pstore/kdump loading
and call the submit_report.sh script, which is then "disowned"
in order we finish as fast as possible the systemd service; boot
delays due to this service wouldn't be nice.

- Increased the "crashkernel" memory recommended in the documentation,
since I've noticed the most recent version of the kernel requires
a bit more - let's play safe!

- Changed timestamps to use UTC tz - this is due kdump collection
happening so early, that timezone is not set, so let's stick with
UTC in all cases.

- Checked scripts with shellcheck[0] and improved the README.

[0] Accepted most suggestions, but some are polemic, and may introduce
issues, so the scripts are not fully passing shellcheck and I don't
expect them to be in the future, it's just a minor style improvement
and failsafe for multiple shells.

Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
2023-03-31 15:34:42 -03:00
2ab4eae53e Add a new/updated binary package (v0.2)
Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
2023-03-31 15:34:42 -03:00
a1f89d341f Add pstore-RAM support and fix comments indentation
Check README.MD and /etc/default/kdump for instructions on
pstore usage - should be simple, it's automatically configured.

Notice that we expect all units to have the same e820 memory
map, hence to have the RAM buffer available. This point should
be better clarified by the team working with firmware.

Also, the package now enables the kdump systemd service
automatically, in a post-installer hook.

Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
2023-03-31 15:34:42 -03:00
69dfe03e44 Add a first binary package (v0.1)
Hopefully there's a way to throw this in some area on the repo
other than intermixed with code - I'll check.

Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
2023-03-31 15:34:42 -03:00
7ba6751284 README.md: Added backticks to allow plain/text output
Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
2023-03-31 15:34:42 -03:00
b75c91c98c Initial version of SteamOS kdump
Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
2023-03-31 15:34:26 -03:00