A modern, delicious implementation of the Nix package manager, focused on correctness, usability, and growth — and committed to doing right by its community
Find a file
jade 19e0ce2c03 main: log stack traces for std::terminate
These stack traces kind of suck for the reasons mentioned on the
CppTrace page here (no symbols for inline functions is a major one):
https://github.com/jeremy-rifkin/cpptrace

I would consider using CppTrace if it were packaged, but to be honest, I
think that the more reasonable option is actually to move entirely to
out-of-process crash handling and symbolization.

The reason for this is that if you want to generate anything of
substance on SIGSEGV or really any deadly signal, you are stuck in
async-signal-safe land, which is not a place to be trying to run a
symbolizer. LLVM does it anyway, probably carefully, and chromium *can*
do it on debug builds but in general uses crashpad:
https://source.chromium.org/chromium/chromium/src/+/main:base/debug/stack_trace_posix.cc;l=974;drc=82dff63dbf9db05e9274e11d9128af7b9f51ceaa;bpv=1;bpt=1

However, some stack traces are better than *no* stack traces when we get
mystery exceptions falling out the bottom of the program. I've also
promoted the path for "mystery exceptions falling out the bottom of the
program" to hard crash and generate a core dump because although there's
been some months since the last one of these, these are nonetheless
always *atrociously* diagnosed.

We can't improve the crash handling further until either we use Crashpad
(which involves more C++ deps, no thanks) or we put in the ostensibly
work in progress Rust minidump infrastructure, in which case we need to
finish full support for Rust in libutil first.

Sample report:

Lix crashed. This is a bug. We would appreciate if you report it at https://git.lix.systems/lix-project/lix/issues with the following information included:

Exception: std::runtime_error: lol
Stack trace:
 0# nix::printStackTrace() in /home/jade/lix/lix3/build/src/nix/../libutil/liblixutil.so
 1# 0x000073C9862331F2 in /home/jade/lix/lix3/build/src/nix/../libmain/liblixmain.so
 2# 0x000073C985F2E21A in /nix/store/p44qan69linp3ii0xrviypsw2j4qdcp2-gcc-13.2.0-lib/lib/libstdc++.so.6
 3# 0x000073C985F2E285 in /nix/store/p44qan69linp3ii0xrviypsw2j4qdcp2-gcc-13.2.0-lib/lib/libstdc++.so.6
 4# nix::handleExceptions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::function<void ()>) in /home/jade/lix/lix3/build/src/nix/../libmain/liblixmain.so
 5# 0x00005CF65B6B048B in /home/jade/lix/lix3/build/src/nix/nix
 6# 0x000073C985C8810E in /nix/store/dbcw19dshdwnxdv5q2g6wldj6syyvq7l-glibc-2.39-52/lib/libc.so.6
 7# __libc_start_main in /nix/store/dbcw19dshdwnxdv5q2g6wldj6syyvq7l-glibc-2.39-52/lib/libc.so.6
 8# 0x00005CF65B610335 in /home/jade/lix/lix3/build/src/nix/nix

Change-Id: I1a9f6d349b617fd7145a37159b78ecb9382cb4e9
2024-09-25 14:03:45 -07:00
.github fix: docs issue template was busted 2024-09-14 19:28:46 +00:00
bench Add benchmarking scripts 2024-04-08 19:50:24 -07:00
contrib
doc main: log stack traces for std::terminate 2024-09-25 14:03:45 -07:00
maintainers rl-next: fix incorrect CL list syntax 2024-08-09 19:03:08 -07:00
meson clang-tidy: fix the fact that we are not linting headers properly 2024-08-28 09:52:08 -07:00
misc fish-completion: leave the shell prompt intact 2024-09-11 19:03:11 +02:00
nix-support editline: Vendor cl/1883 patch to recognize Alt+Left/Alt+Right 2024-09-11 09:35:00 -07:00
perl Merge changes Ib7c80826,I636f8a71,I67669b98 into main 2024-08-09 19:24:29 +00:00
releng releng: fix the git push 2024-08-07 21:46:44 -07:00
scripts remove the autoconf+Make buildsystem 2024-05-07 17:04:30 -06:00
src main: log stack traces for std::terminate 2024-09-25 14:03:45 -07:00
subprojects rowan: 0.15.15 -> 0.15.16 2024-08-26 11:34:43 -07:00
tests main: log stack traces for std::terminate 2024-09-25 14:03:45 -07:00
.clang-format Add pre-commit checks 2024-03-29 22:57:40 -07:00
.clang-tidy clang-tidy: write a lint for charptr_cast 2024-08-08 14:53:17 -07:00
.dir-locals.el .dir-locals.el: Set c-block-comment-prefix 2020-07-10 11:21:06 +02:00
.editorconfig add editorconfig for markdown 2024-05-24 02:22:44 +00:00
.envrc .envrc: remove MAKEFLAGS and use clang environment by default 2024-06-25 12:36:18 -06:00
.gitignore build: move to a Cargo workspace 2024-08-21 17:09:10 +00:00
.this-is-lix devShell: guard against running from another directory 2024-06-24 13:41:38 -07:00
Cargo.lock rowan: 0.15.15 -> 0.15.16 2024-08-26 11:34:43 -07:00
Cargo.toml build: move to a Cargo workspace 2024-08-21 17:09:10 +00:00
CONTRIBUTING.md chore: re-work the contribution guide 2024-05-07 01:28:35 +00:00
COPYING Add pre-commit checks 2024-03-29 22:57:40 -07:00
default.nix Format Nix code with nixfmt 2024-04-08 13:00:00 -07:00
docker.nix releng: support multiarch docker images 2024-06-09 20:33:24 -07:00
flake.lock update flake.lock 2024-07-26 11:22:34 +04:00
flake.nix forbid gcc for compilation, only allow clang 2024-09-09 01:48:20 +00:00
justfile build: implement clang-tidy using our plugin 2024-08-04 20:41:19 -07:00
meson.build forbid gcc for compilation, only allow clang 2024-09-09 01:48:20 +00:00
meson.options build: implement clang-tidy using our plugin 2024-08-04 20:41:19 -07:00
package.nix package.nix: fix cross for editline 2024-09-17 20:43:21 -07:00
README.md README: clarify license to match documentation 2024-08-10 16:11:58 -07:00
shell.nix shell.nix: conform to documentation 2024-05-27 16:47:40 +02:00
treefmt.toml Format Nix code with nixfmt 2024-04-08 13:00:00 -07:00
version.json Update version to 2.92 2024-08-12 18:06:08 -07:00

Lix

Lix is an implementation of Nix, a powerful package management system for Linux and other Unix systems that makes package management reliable and reproducible.

Read more about us at https://lix.systems.

Installation

On Linux and macOS the easiest way to install Lix is to run the following shell command (as a user other than root):

$ curl -sSf -L https://install.lix.systems/lix | sh -s -- install

For systems that already have a Nix implementation installed, such as NixOS systems, read our install page

Building And Developing

See our Hacking guide in our manual for instruction on how to to set up a development environment and build Lix from source.

Additional Resources

License

Lix is released under LGPL-2.1-or-later.