Depois de várias noites trabalhando nisso, finalmente encontrei uma sequência confiável de comandos para criar e destruir volumes Truecrypt formatados em ext4.
Cheguei a este ponto depois de várias tentativas de usar o Tomb e o Truecrypt propriamente dito antes de finalmente mudar para o bifurcado versão do Truecrypt chamada tc-play
Por que eu abandonei esses outros dois utilitários? Túmulo, eu tive problemas de confiabilidade. Periodicamente, após uma operação de redimensionamento da tumba, a ferramenta recusava-se a aceitar a senha que associei às minhas chaves de túmulo. Eu poderia ter consertado isso eventualmente, mas quem quer depurar scripts do ksh o dia todo? :) Eu realmente gosto do projeto Tomb e espero que continue a ter sucesso no futuro.
Truecrypt adequado? Eu não gostava de ter que confiar nos binários fornecidos, especialmente porque havia muitos relatórios online de pessoas incapazes de reproduzir os mesmos binários com a mesma fonte. Fico feliz por haver uma auditoria com financiamento público desse código em andamento. Eu também não estava disposto a confiar em minha própria compilação personalizada da fonte. Estou construindo um sistema de backup aqui e não queria correr o risco de que daqui a 5 anos eu precisasse fazer uma recompilação por algum motivo e queimar um final de semana inteiro apenas fazendo com que ele compilasse com os compiladores atualizados do dia .
Por que vale a pena, o tc-play está incluído no repositório apt no Ubuntu 13 (e presumivelmente a maioria das outras distribuições / versões). Este código presume que os comandos estão sendo executados como uma conta de usuário normal, com comandos selecionados sendo colocados na lista de permissões por meio de sudoers.
Nota final: Eu queria que tudo isso fosse roteirizado, apesar do fato de que o tc-play deseja entrada de teclado interativa para coletar senhas. Eu conheço incorporando senhas em scripts é uma forma ruim geralmente, mas todo o meu sistema depende de ter meu servidor de backup bloqueado de qualquer maneira. Se alguém conseguir acessar a senha no script, tenho problemas maiores para se preocupar.
Então, com todo esse preâmbulo fora do caminho, aqui estão meus comandos. Sinta-se à vontade para copiar / colar e temperar a gosto. Feedback bem-vindo e apreciado, se você encontrar algum problema ou tiver alguma sugestão:
export ARCHIVE=foo.tc
export SIZE_M=20
export PASSWORDBASE=superdupertopsecret
export CLOUD_DIR=/mnt/cloud/r3cgm/
# create archive
dd if=/dev/zero of=$CLOUD_DIR$ARCHIVE bs=1 count=0 seek=${SIZE_M}M
# find free loopback device
LOOPBACK_DEV=$(sudo losetup -f)
# associate loopback device with archive
sudo losetup $LOOPBACK_DEV $CLOUD_DIR$ARCHIVE
# to enable Expect debugging, add this:
# exp_internal 1
# encrypt loopback device
expect -c "spawn sudo tcplay -c -d $LOOPBACK_DEV -a whirlpool -b AES-256-XTS
set timeout 2
expect Passphrase
send $PASSWORDBASE$ARCHIVE\r
expect Repeat
send $PASSWORDBASE$ARCHIVE\r
expect proceed
send y\r
interact
"
# map loopback device with file container
# DEBUG: sometimes this needs to be run twice / fails the first time, why?
expect -c "spawn sudo tcplay -m $ARCHIVE -d $LOOPBACK_DEV
set timeout 1
expect Passphrase
send $PASSWORDBASE$ARCHIVE\r
expect eof
"
# format archive with ext4
sudo mkfs.ext4 /dev/mapper/$ARCHIVE
[[ -d "/mnt/$ARCHIVE" ]] || sudo mkdir /mnt/$ARCHIVE
# mount archive
sudo mount /dev/mapper/$ARCHIVE /mnt/$ARCHIVE
# UNDO
# unmount archive
sudo umount /mnt/$ARCHIVE
# remove volume
sudo dmsetup remove $ARCHIVE
# delete loopback device
sudo losetup -d $LOOPBACK_DEV
# remove the archive
# rm $CLOUD_DIR$ARCHIVE