Na verdade, é possível modificar mount , conforme aprendi com a existência de mount.ntfs-3g . Estou fazendo apenas suposições, mas suspeito que mount -t sometype resulta em uma chamada para mount.sometype $DEV $MOUNTPOINT $OPTIONS , sinta-se à vontade para me corrigir aqui ou citar alguma documentação real. Especialmente a opção -o loop já está sendo tratada, então não há mais necessidade de lopsetup ...
Symlink / crie o script de montagem como /sbin/mount.crypto_LUKS . Remova a parte do dispositivo loop e, em vez disso, use apenas a opção -o loop . Aqui está o meu /sbin/mount.crypto_LUKS :
#!/bin/bash
set -e
if [[ $(mount | grep ${2%%/} | wc -l) -gt 0 ]]; then
echo "Path $2 is already mounted!" >&2
exit 9
else
MAPPER=$(mktemp -up /dev/mapper)
cryptsetup luksOpen $1 $(basename $MAPPER)
shift
mount $MAPPER $* || cryptsetup luksClose $(basename $MAPPER)
fi
Agora só preciso executar mount -o loop ~/container /mnt/decrypted e mount solicitará a senha e, em seguida, montará o contêiner, liberando automaticamente o dispositivo de loop quando o contêiner for fechado. Se o sistema de arquivos descriptografado falhar na montagem, o contêiner será fechado novamente, mas você pode modificar isso, é claro. Ou implemente alguma análise de opção em vez de passar tudo para mount .
Eu esperava que o mesmo pudesse ser alcançado via /sbin/umount.luks , mas umount /mnt/decrypted (mesmo com -t crypto_LUKS ) ainda faz a desmontagem normal, deixando o contêiner aberto. Se você encontrar uma maneira de ter umount chamando meu script dm.umount , avise-me ... No momento, chamar diretamente umount é desencorajado, pois você terá que descobrir o nome /dev/mapper para manualmente %código%. Pelo menos o dispositivo de loop será liberado automaticamente se cryptsetup luksClose $MAPPER foi usado antes ...