All: Some Tails users (such as journalists in certain countries) will want to 
use a persistent volume, yet there's no simple GUI to back up the persistent 
volume. That's a problem; all media fails eventually. Many users are not 
comfortable using a command line (the current solution).

Below are 2 short files that add a simple GUI to back up the persistent volume. 
It's a trivial shell script to do the backup, along with a .desktop file to 
kick off the shell script. They should require no future maintenance (unless 
you radically change how persistent volumes work). They're short & should be 
easy to review.

A few notes:
* The .desktop file runs GNOME terminal, which then runs the shell script that 
does all the work. I thought it'd be helpful for users to see what's getting 
backed up while it's happening. Running the program via GNOME terminal was a 
simple way to do that. You can just run the backup program directly if this 
monitoring is not desired. Change /home/amnesia/Persistent/tails-backup to the 
script's "real" absolute location.
* The shell script is defensively written (e.g., $VARIABLEs are quoted). It can 
be directly started from the command line. It uses zenity to show GUI 
interactions, and it's internationalized using gettext. It calls sync 3 times 
and THEN tells the user it's done, to make sure the backup is actually written 
out.
* I've tested this backup script mostly by running it directly. I've tested the 
backup shell script more than the .desktop file, as it's challenging to test 
.desktop files without a Tails development environment, but both work for me.
* The user has to use the separate "Files" application to decrypt & later eject 
the backup volume. I think that's fine, as that's the normal GUI application 
for doing this. In addition, the script helps the user do that.
* As is currently true, the user must unlock persistent storage & set an admin 
password.

I'm not sure copyright is even claimable with such trivial code. However, to be 
clear, I disclaim all copyright on the file contents below using the Creative 
Commons CC0 license. Use it any way you wish, if you'd like, and I hope you'll 
like it.

I don't have a Tails development environment (it looks like it'd take effort to 
set up), which is why I'm  posting this as an email instead of as a commit.

I'll be happy to answer questions. Let me know if this is or isn't acceptable.

--- David A. Wheeler

==== tails-backup.desktop ====
[Desktop Entry]
Type=Application
Name=Backup persistent volume
Comment=Backup the Tails persistent volume to another TailsData volume
Exec=gnome-/usr/bin/gnome-terminal --title 'Log for Backing up Tails persistent 
volume' --hide-menubar -- /home/amnesia/Persistent/tails-backup
Terminal=false
Categories=Utilities
StartupNotify=false
#
# Test with:
# xdg-desktop-menu install tails-backup.desktop


==== tails-backup ====
#!/bin/sh
# tails-backup: Back up Tails' persistent disk into the mounted backup region.
# Persistent storage & backup storage must already be unlocked, and
# there must be an admin password set

set -eu

export TEXTDOMAIN='tails'

SOURCE='/live/persistence/TailsData_unlocked/'
DEST='/media/amnesia/TailsData/'
LOG="$HOME/backup-log.txt"

# Newline
NL="$(printf '\nX')"
NL="${NL%X}"

if [ ! -d "$SOURCE" ]; then
        msg="$(gettext -s 'Encrypted persistent storage must be unlocked first. 
 Please reboot, then unlock encrypted persistent storage and under additional 
settings set an administrative password.')"
        zenity --error --ellipsize --text "$msg"
        exit 1
fi

if [ ! -d "$DEST" ]; then
        msg="$(gettext -s 'Backup storage area must be unlocked first. Please 
run Applications ▸ Accessories ▸ Files, select the backup encrypted volume 
(TailsData), and unlock it with your passphrase.')"
        zenity --error --ellipsize --text "$msg"
        exit 1
fi

title="$(gettext -s 'Alert')"
msg="$(gettext -s 'Would you like to back up your persistent encrypted storage 
to the backup storage area? This will replace all data in the backup storage 
area.'"$NL"'If you agree, you will then need to enter your administrator 
password to actually run the backup.')"
if ! zenity --question --ellipsize --title "$title" --text "$msg"; then
        exit 1
fi

# Run real backup command. This requires privileges.
if pkexec /usr/bin/rsync -PaSHAXv --del "$SOURCE" "$DEST" ; then
        # Ensure RAM buffers are written out
        sync; sync; sync
        sleep 1
        msg="$(gettext -s 'Backup succeeded. Please eject (unmount) the backup 
storage area media.'"$NL"'You can do this by running Applications ▸ Accessories 
▸ Files, selecting the backup encrypted volume (TailsData), and ejecting it.')"
        zenity --info --ellipsize --text "$msg"
        rm -fr "${LOG}"
else
        msg="$(gettext -s "Backup failed. See details in log file ${LOG}")"
        zenity --error --ellipsize --text "$msg"
        exit 1
fi
_______________________________________________
Tails-dev mailing list
Tails-dev@boum.org
https://www.autistici.org/mailman/listinfo/tails-dev
To unsubscribe from this list, send an empty email to 
tails-dev-unsubscr...@boum.org.

Reply via email to