Zum Inhalt

rephlex.de Posts

How to hibernate and resume from swap file in Ubuntu 20.04 using full disk encryption

On my laptop, I am running full disk encryption (LUKS with a single encrypted ext4 partition), and a single, large swap file as large as my system RAM (16GB).

Here's how to make it work:

Make your swapfile have at least the size of your systems RAM:

sudo swapoff /swapfile
sudo dd if=/dev/zero of=/swapfile bs=$(cat /proc/meminfo | grep MemTotal | grep -oh '[0-9]*') count=1024 conv=notrunc
sudo mkswap /swapfile
sudo swapon /swapfile

Note the UUID of the partiton containing your swapfile:

$ sudo findmnt -no SOURCE,UUID -T /swapfile
/dev/nvme0n1p5 20562a02-cfa6-42e0-bb9f-5e936ea763d0

Reconfigure the package uswsusp correctly:

sudo apt -y install uswsusp
sudo dpkg-reconfigure -pmedium uswsusp
# Answer "Yes" to continue without swap space
# Select "/dev/disk/by-uuid/20562a02-cfa6-42e0-bb9f-5e936ea763d0" replace the UUID with the result from the previous findmnt command
# Encrypt: "No"

Edit the SystemD hibernate service using sudo systemctl edit systemd-hibernate.service and fill it with the following content:

ExecStartPre=-/bin/run-parts -v -a pre /lib/systemd/system-sleep
ExecStartPost=-/bin/run-parts -v --reverse -a post /lib/systemd/system-sleep

Note the offset of your swapfile relative to the partition start:

$ sudo swap-offset /swapfile
resume offset = 34818

Tell grub to resume by editiing your etc/default/grub


GRUB_CMDLINE_LINUX_DEFAULT="resume=UUID=20562a02-cfa6-42e0-bb9f-5e936ea763d0 resume_offset=34818 quiet splash"

Update grub:

sudo update-grub

Create /etc/initramfs-tools/conf.d/resume

RESUME=UUID=20562a02-cfa6-42e0-bb9e-5e936ea763d0 resume_offset=34816
# Resume from /swapfile

Update initramfs:

sudo update-initramfs -u -k all

Now you can just hibernate your system with

sudo systemctl hibernate

Clean default sources.list file for Ubuntu 20.04 focal

deb http://de.archive.ubuntu.com/ubuntu/ focal main restricted universe multiverse
deb http://de.archive.ubuntu.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://de.archive.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse
deb http://de.archive.ubuntu.com/ubuntu/ focal-backports main restricted universe multiverse

deb-src http://de.archive.ubuntu.com/ubuntu/ focal main restricted universe multiverse
deb-src http://de.archive.ubuntu.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://de.archive.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://de.archive.ubuntu.com/ubuntu/ focal-backports main restricted universe multiverse

deb http://archive.canonical.com/ubuntu focal partner
deb-src http://archive.canonical.com/ubuntu focal partner
1 Comment

Saving battery life on linux using powertop

Most distributions come with a handy tool called powertop, that is able to automatically set kernel parameters to save energy.

sudo powertop --auto-tune

Settings are not permanent, to you can use the following snippet to create and load a systemd unit file to load the settings after rebooting your machine:

cat << EOF | sudo tee /etc/systemd/system/powertop.service
Description=PowerTOP auto tune

ExecStart=/usr/sbin/powertop --auto-tune


systemctl daemon-reload
systemctl enable powertop.service
systemctl start powertop.service

1 Comment

Xiaomi Robot Vacuum 4S2P DIY Battery Pack Repair

My Xiaomi Robot (V1) just sporadically shut down after around 20 Minutes of cleaning, stating "Error 14". I looked it up, and Error 14 stands for battery malfunction.

Since i own a lot of 18650 battery packs I'm able to build my own battery from old laptop battery 18650s, so I decided to upload the pinout of the Xiaomi Charging Pad

Solder your 4S cells here and you're good to go!


gentoo/octane – A modern GNU/Linux system for the SGI Octane Workstation

It took about 6 months of work, and it's done: gentoo/octane 1.0 has been released.

Grab your copy here: gentoo-octane-v1.0-by-rephlex.tar.xz

It's basically a complete tarball of the system. So:

  • attach scsi disk to any machine or netboot the octane using root=/dev/nfs nfsroot=a.b.c.d/path/to/filesystem (if you're a tough guy)
  • prepare the octanes local disks
  • add tarball
  • set envvars (included)
  • profit

What works:

  • everything that would work in any random gentoo that is up-to-date as of April 2019 😉
  • Kernel 4.12 with audio, and all the funny devices inside the octane including impact graphics.

What doesn't work yet:

  • xf86-video-impact xorg module ;/ – see /etc/motd for how to achieve running xorg. It's ALMOST DONE!
  • Kernel newer than 4.12. The patches need to be tested and maybe adjusted, that's it.


If you want to donate money, my paypal is rephlex@rephlex.de 😉

Awesome quickstart writeup by Alex Ernst:

root@SomeLinuxMachine:~# fdisk /dev/sdc

Command (m for help): p
Disk /dev/sdc: 136.8 GiB, 146815737856 bytes, 286749488 sectors
Disk model: BD1468A4C5
Geometry: 255 heads, 63 sectors/track, 17849 cylinders
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: sgi

Device         Start       End   Sectors   Size Id Type       Attrs
/dev/sdc1    2097153 278921217 276824065   132G  a SGI xfs     boot
/dev/sdc2  278921218 286744184   7822967   3.7G 82 Linux swap  swap
/dev/sdc9          0   2097152   2097153     1G  0 SGI volhdr
/dev/sdc11         0 286744184 286744185 136.7G  6 SGI volume

root@SomeLinuxMachine:~# mount /dev/sdc1 -t ext4 /mnt
root@SomeLinuxMachine:~# cd /mnt

root@SomeLinuxMachine:/mnt# ln -s boot/linux linux
root@SomeLinuxMachine:/mnt# ln -s boot/linux vmlinux

root@SomeLinuxMachine:/mnt# cat /mnt/boot/arc.cf
linux {
 image system /linux;
 append "root=/dev/sdc1";
 append "rw";
 append "init=/sbin/init";
 append "console=/dev/ttyS0";

root@SomeLinuxMachine:/mnt# dvhtool -d /dev/sdc --unix-to-vh /mnt/usr/lib/arcload/sash64 sash64
root@SomeLinuxMachine:/mnt# dvhtool -d /dev/sdc --unix-to-vh /mnt/boot/linux linux
root@SomeLinuxMachine:/mnt# dvhtool -d /dev/sdc --unix-to-vh /mnt/boot/arc.cf arc.cf

root@SomeLinuxMachine:/mnt# dvhtool -d /dev/sdc --print-all
----- partitions -----
Part#  0, start 2097153, blks 276824065, type XFS
Part#  1, start 278921218, blks 7822967, type Linux Swap
Part#  8, start 0, blks 2097153, type Volume Header
Part# 10, start 0, blks 286744185, type Volume
----- bootinfo -----
Root partition: 0
Swap partition: 1
Bootfile: "/unix"
----- directory entries -----
Entry #0, name "sash64", start 4, bytes 141392
Entry #1, name "linux", start 281, bytes 11429200
Entry #2, name "arc.cf", start 22604, bytes 130

root@SomeLinuxMachine:~# cd
root@SomeLinuxMachine:~# umount /mnt
root@SomeLinuxMachine:~# sync

Command Monitor.  Type "exit" to return to the menu.

>> setenv SystemPartition xio(0)pci(15)scsi(0)disk(3)rdisk(0)partition(8)
>> setenv OSLoadPartition xio(0)pci(15)scsi(0)disk(3)rdisk(0)partition(8)
>> setenv OSLoadFilename linux
>> setenv OSLoader sash64

>> boot
1216+51120+768+4256+592 entry: 0xa80000005fff0000
ARCLoad version 0.5 (c) 2004-5 Stanislaw Skowronek
Loading configuration for 'linux'...
GRUB Filesystem Error FILE_NOT_FOUND: 'ArcOpen failed'
Loading xio(0)pci(15)scsi(0)disk(3)rdisk(0)partition(8)/linux...
Reading 9488032 bytes... OK.
Entering kernel.

login as: root
Welcome to gentoo/octane 1.0!


Preferred settings for Macs Fan Control on older iMacs that run hot and make funny noises

Yesterday I encountered a customers iMac which ran crazy hot on the backside. Macs Fan Control indicated that the PSU was running on 70°C and more, and something made a buzzing sound (like a wire dangling inside a fan, which was not the case).

So I decided to set up the fans manually, the Mac now runs much cooler and still it's not too loud.

Here's my settings:

Set everything to manual
ODD Fan is controlled by GPU Diode. 40°C – 75°C (this controls the right hand side of the iMac)
The HDD fan is controlled by the HDD temperature. We set it to 45°C – 55°C. If your disk runs hotter, you'll shorten its lifetime and jeopardize your data. This stuff is sitting in the middle of the iMac case.
OK, and this one here is most important. Set the CPU fan to be controlled by the PSU Primary temperature.

I learned that Apple did decide to "cool" the PSU by blowing the CPUs hot air onto it. Duh. So since we need to make sure the PSU does not overheat and melt your display panels LED strips on the right side, we set the CPU fan speed in relation to the PSU temperature. We want the PSU to be 40°C – 53°C. The CPU temperature will also stay in this healthy temperature range.

Download Macs Fan Control on the dev's website, on github, or from my local mirror (v4.1.12).


Fix IcedTea "cannot grant permissions to unsigned JARs" error

In case you are a Linux user unsuccessfully trying to connect to your IPMI/LOM Console using IcedTea / OpenJDK 8 or newer, you will likely run into this error.

You know, because if you're a major hardware vendor selling expensive enterprise class servers, you don't care about your IPMI hardware once you sold it.

Here's how to fix the issue on the client side:

Find the java.security file. In my case it is located in /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/java.security

Then find the row

jdk.jar.disabledAlgorithms=MD2, MD5, RSA keySize < 1024

Comment it out, copy it, delete the word "MD5".

jdk.jar.disabledAlgorithms=MD2, MD5, RSA keySize < 1024
jdk.jar.disabledAlgorithms=MD2, RSA keySize < 1024

1 Comment

Workaround of the month: Fix broken n32 o32 virtalenv on Gentoo mips when emerging spidermonkey-52.9.1pre1

Virtualenv ist utterly broken when you run Gentoo on MIPS using n32.

This will lead to spidermonkey-52.9.1pre1 failing to emerge, because of "ImportError: No module named pkgutil" or the like. Here's how to fix it:

Step 1: as root, create a user patch directory and download my patch for virtualenv into it, so emerge applies it to the source as soon as you re-emerge the package

mkdir -p /etc/portage/patches/dev-python/virtualenv-16.0.0
wget -O /etc/portage/patches/dev-python/virtualenv-16.0.0/virtualenv-16.0.0-multilib.patch https://rephlex.de/blog/wp-content/uploads/2019/01/virtualenv-16.0.0-multilib.patch.txt

Step 2: and download multiarch.patch into the directory we just created

Step 3: as root, test if the patch executes:

cd /usr/portage/dev-python/virtualenv
ebuild virtualenc-16.0.0.ebuild clean prepare

Step 4: re-emerge dev-lang/python-exec and dev-python/virtualenv

emerge dev-lang/python-exec dev-python/virtualenv

Step 5: Create a necessary symlink

ln -s /usr/lib32/python2.7 /usr/lib/python2.7

You're done!

Leave a Comment

Fix errors when compiling Linux Kernel 4.12 with GCC 8


In file included from arch/mips/kernel/syscall.c:17:
./include/linux/syscalls.h:196:18: Fehler: »sys_mips_mmap« Alias zwischen unverträglichen Funktionstypen »long int(long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, off_t)« {alias »long int(long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long int)«} und »long int(long int, long int, long int, long int, long int, long int)« [-Werror=attribute-alias]


echo "KBUILD_CFLAGS += -Wno-error=attribute-alias" >> Makefile

Leave a Comment