O problema
Não consigo cryptsetup close
nenhum volume LUKS enquanto qualquer aplicativo flatpak está sendo executado em segundo plano. Sim, o aplicativo flatpak só precisa estar rodando em segundo plano, não estou tentando usar o cryptsetup de dentro da sandbox ou algo parecido. Sim, este é um desses problemas.
Passos para reproduzir
mkdir ~/mnt
dd if=/dev/zero of=file.img bs=1MiB count=100
sudo losetup /dev/loop4 file.img
sudo cryptsetup luksFormat /dev/loop4
sudo cryptsetup open /dev/loop4 my_crypt
sudo mkfs.fat /dev/mapper/my_crypt
sudo mount /dev/mapper/my_crypt ~/mnt
echo ayylmao | sudo tee ~/mnt/foobar.txt
sync
# <open a flatpak app, such as flatseal, in the background>
sudo umount ~/mnt
sudo cryptsetup close my_crypt
# output:
# device-mapper: remove ioctl on my_crypt failed: Device or resource busy
# <the above line multiple times>
# Device my_crypt is still in use.
# <now close the flatpak app>
sudo cryptsetup close my_crypt
# Now it runs successfully
sudo losetup -d /dev/loop4
Observe que o mesmo problema acontece com dispositivos LUKS "reais" em oposição aos dispositivos de loop, bem como com tomb s.
Diagnósticos adicionais
Parece que ao iniciar um aplicativo flatpak, ele gera um processo chamado xdg-dbus-proxy
em um novo mnt
namespace, que, por algum motivo, mantém o sistema de arquivos no dispositivo LUKS montado, mesmo depois de ser desmontado no namespace "padrão". Por exemplo, aqui está o resultado de lsns
antes de lançar o flatseal:
NS TYPE NPROCS PID USER COMMAND
4026531834 time 40 1452 renzev -bash
4026531835 cgroup 40 1452 renzev -bash
4026531836 pid 40 1452 renzev -bash
4026531837 user 40 1452 renzev -bash
4026531838 uts 40 1452 renzev -bash
4026531839 ipc 40 1452 renzev -bash
4026531840 net 40 1452 renzev -bash
4026531841 mnt 40 1452 renzev -bash
E aqui está o resultado após o lançamento do flatseal:
NS TYPE NPROCS PID USER COMMAND
4026531834 time 44 1452 renzev -bash
4026531835 cgroup 44 1452 renzev -bash
4026531836 pid 42 1452 renzev -bash
4026531837 user 41 1452 renzev -bash
4026531838 uts 44 1452 renzev -bash
4026531839 ipc 44 1452 renzev -bash
4026531840 net 42 1452 renzev -bash
4026531841 mnt 41 1452 renzev -bash
4026532233 user 1 11485 renzev xdg-dbus-proxy --args=42
4026532254 mnt 1 11485 renzev xdg-dbus-proxy --args=42
4026532256 mnt 2 11488 renzev bwrap --args 40 com.github.tchx84.
4026532257 pid 2 11488 renzev bwrap --args 40 com.github.tchx84.
4026532258 net 2 11488 renzev bwrap --args 40 com.github.tchx84.
4026532391 user 2 11488 renzev bwrap --args 40 com.github.tchx84.
Se entrarmos no namespace e verificarmos os sistemas de arquivos montados, podemos ver que ainda ~/mnt
está montado, mesmo depois de desmontá-lo no namespace "padrão" :
sudo nsenter -t 11485 -m bash
mount | grep mnt
/dev/mapper/my_crypt on /home/renzev/mnt type vfat (ro,nosuid,nodev,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro)
Tentar desmontar manualmente o dispositivo de dentro do namespace leva a uma saída um tanto divertida:
mountpoint /home/renzev/mnt
/home/renzev/mnt is a mountpoint
umount /home/renzev/mnt
umount: /home/renzev/mnt: not mounted.
Detalhes do sistema
Anular Linux. Sinalizadores do cryptsetup 2.6.1: UDEV BLKID KEYRING KERNEL_CAPI. Flatpack 1.15.6. Linux 6.3.13_1.
A questão
Como posso fechar dispositivos LUKS sem precisar fechar todos os aplicativos flatpak?