I’m not a Linux expert. Normally I use FreeBSD on my laptops and with FreeBSD during boot you can easily say, I want to boot the old kernel, the one before. Can you do this with Linux? Can you do this with the L5 not showing any boot loader dialog? If not, keep the old kernel elsewhere, not below /boot. If you run out of space in /boot during the update, you can end up with a not booting device. You are warned
You can with GRUB. I can’t speak on the L5 though.
That is a very good point. I have not actually figured out how to do this. I am sure it must be possible, but seems it is probably not entirely straightforward. Not having a way to boot the old kernels does make my hoarding of them a bit pointless.
If you boot Jumpdrive on the Librem 5 and you then telnet
in to the Librem 5 and you really know your way around /boot
then it is probably possible to select the kernel to boot manually.
I would try to keep just two kernel versions - the one most recently installed and one known working version.
On desktops / laptops it has saved my bacon a few times - although maybe not so much recently i.e. software is becoming more reliable?
Please describe the required other hardware and steps. Thanks.
A 64-bit x86 computer (running Linux).
Steps for building Jumpdrive: https://source.puri.sm/Librem5/community-wiki/-/wikis/Building-uuu-and-Jumpdrive (written up by me - so you know where to direct any complaints ) Obviously that’s a one-off process.
Steps for booting it: Not sure that it ever got written up. On the Librem 5 side, just the normal magic pressing of buttons process for flashing (i.e. for boot via USB) e.g. https://developer.puri.sm/Librem5/Development_Environment/Phone/Troubleshooting/Reflashing_the_Phone.html#flash-the-image but the script that you run on the x86 computer is not as given there and is instead boot-purism-librem5.sh
that will be there in the Jumpdrive area from your build.
Thanks. I followed the steps on an Ubuntu 20.04.3 LTS (Focal Fossa) to build uuu
. They fail with:
guru@Yoyo:~/L5/librem5-devkit-tools$ ./scripts/build_uuu.sh -i
Cloning into 'mfgtools'...
warning: redirecting to https://source.puri.sm/Librem5/mfgtools.git/
remote: Enumerating objects: 2991, done.
remote: Total 2991 (delta 0), reused 0 (delta 0), pack-reused 2991
Receiving objects: 100% (2991/2991), 3.30 MiB | 266.00 KiB/s, done.
Resolving deltas: 100% (2084/2084), done.
CMake Warning (dev) in CMakeLists.txt:
No project() command is present. The top-level CMakeLists.txt file must
contain a literal, direct call to the project() command. Add a line of
code such as
project(ProjectName)
near the top of the file, but after cmake_minimum_required().
CMake is pretending there is a "project(Project)" command on the first
line.
This warning is for project developers. Use -Wno-dev to suppress it.
-- The C compiler identification is GNU 9.3.0
-- The CXX compiler identification is unknown
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
CMake Error in CMakeLists.txt:
No CMAKE_CXX_COMPILER could be found.
Tell CMake where to find the compiler by setting either the environment
variable "CXX" or the CMake cache entry CMAKE_CXX_COMPILER to the full path
to the compiler, or to the compiler name if it is in the PATH.
-- Configuring incomplete, errors occurred!
I guess start with
which c++
Also
grep CMAKE_CXX_COMPILER: ~/git/librem5-devkit-tools/build/mfgtools/CMakeCache.txt
which for me gives
CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/c++
Sorry, I see that you used a slightly different directory structure. Replace ~/git
with ~/L5
in the above grep
guru@Yoyo:~/L5$ which c++
guru@Yoyo:~/L5$ grep CMAKE_CXX_COMPILER: ~/L5/librem5-devkit-tools/build/mfgtools/CMakeCache.txt
CMAKE_CXX_COMPILER:FILEPATH=CMAKE_CXX_COMPILER-NOTFOUND
i.e. perhaps I do not have any C++ compiler installed. Please expand your guide which C++ should be installed;
(the grep is relatively pointless because no C++ was found )
That’s strange because my notes are pretty good and I have no record of installing c++ in order to do that build. Also, another computer that is definitely running Focal (and is not a crash test dummy like the one where I built uuu
), it too has c++ installed.
If noone jumps in, let me get back to you as to which package gave me c++
Looks like the needed package is g++
Yes, this helped me already meanwhile. The laptop in question (of my son) came preinstalled with this Ubuntu. I’m not in the position to judge if it should have been installed.
Thanks! Is this already happening with the linux-image-5.16.0-1-librem5
? It looks like to me that third apt upgrade
to this particular Linux Kernel is already available (without leaving traces of the previously installed one):
Just for the record, building jumpdrive
ended fine with#
...
cp src/boot-purism-librem5.sh boot-purism-librem5.sh
cp src/purism-librem5.txt purism-librem5.lst
All done! Switch your phone into flashing mode and run Jumpdrive with `./boot-purism-librem5.sh`
...
Now let’s wait for a situation where we do need it. hopefully never
Great that you got through the build. I’ll update the wiki regarding the c++ issue in a day or so.
My advice: don’t wait. Don’t make it that the first time you are testing whether you have a working, bootable Jumpdrive is … when you need it !
I have used Jumpdrive to make a backup of the entire eMMC drive of my Librem 5. Everybody needs to do backup, right?
If I run the above script, what will happen between the laptop and the L5 and what can I do then, i.e. how could I telnet
into the L5 and how could I get/put files from/to the L5? Is there some guide?
When you run jumpdrive
the Librem 5 storage unit is mounted on the laptop via USB as an external storage unit. You can access /
the same way you would access an encrypted external hard drive. And the /boot
partition will also show as a separate partition.
From that point on you can follow the instructions on Can't use L5 after update! to regain space in /boot
for the device to boot again.
The Librem 5 will boot Jumpdrive. (It will be running a fairly complete Linux kernel that has been loaded over USB from the x86 host computer.)
- The eMMC drive (and the uSD drive if applicable) will be exposed as USB disks that you can mount on the x86 host computer.
- You can
telnet
in from the x86 host computer to the Librem 5.
Warning: Be careful if doing both. You don’t want to mount a Librem 5 disk on both the x86 host computer and on the Librem 5. In terms of mounting, one or the other but not both.
For clarity: The Librem 5 is exposing itself to the x86 host computer as a ‘composite’ USB device with one or two disks and a network connection.
The easiest way is probably to mount the Librem 5 disk on the x86 host computer, copy files from/to, then umount
.
However other ways might be possible:
- sneakernet using the uSD card (should work but would be a hassle)
- transfer via some network protocol (but I am not sure what is included in the Jumpdrive kernel and what is not)
If you just want to rm
and mv
and the like then telnet
may be easier. However I see that the other topic related to this still suggests mounting on the x86 host and carrying the commands out on the x86 host, which is fine too.
As @joao.azevedo perhaps implies … any option will need to take into account whether the root partition is encrypted if you need to access the root partition. (The other topic related to this is accessing the boot
partition and hence does not need to be concerned with encryption.)
This forum? No, I don’t think so.
Removing files manually from /boot
as described here: Can't use L5 after update! does not require dealing with LUKS partitions, as /boot
is not encrypted.
However if someone wants to explore other options, then maybe you need to deal with LUKS