# Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: c1.ubuntu@niftybox.net-20090915070233-l4k1efv1ndrjct1d # target_branch: http://bazaar.launchpad.net/~ecryptfs/ecryptfs\ # /ecryptfs-utils/ # testament_sha1: f58c0fb69b2e0bdd2187948d931efd8580474038 # timestamp: 2009-09-15 00:06:38 -0700 # base_revision_id: kirkland@canonical.com-20090817165915-\ # 0yc4im44p01b2r9k # # Begin patch === added file 'src/utils/ecryptfs-setup-swap-with-key' --- src/utils/ecryptfs-setup-swap-with-key 1970-01-01 00:00:00 +0000 +++ src/utils/ecryptfs-setup-swap-with-key 2009-09-15 07:02:33 +0000 @@ -0,0 +1,174 @@ +#!/bin/sh -e +# ecryptfs-setup-swap +# Copyright (C) 2008 Canonical Ltd. +# +# Authors: Dustin Kirkland +# Miron Cuperman +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +TEXTDOMAIN="ecryptfs-utils" + +error() { + echo `gettext "ERROR:"` "$*" 1>&2 + exit 1 +} + +info() { + echo `gettext "INFO:"` "$*" +} + +warn() { + echo `gettext "WARNING:"` "$*" 1>&2 +} + +usage() { + echo + echo `gettext "Usage:"` + echo " $0 [-f|--force]" + echo + exit 1 +} + +# Handle command line options +FORCE=0 +while [ ! -z "$1" ]; do + case "$1" in + -f|--force) + FORCE=1 + shift 1 + ;; + *) + usage + ;; + esac +done + +# Ensure that cryptsetup is available +[ -x /sbin/cryptsetup ] || error `gettext "Please install"` "'cryptsetup'" + +# Ensure that we're running with root privileges +[ -w /etc/passwd ] || error `gettext "This program must be run with 'sudo', or as root"` + +# Count swap spaces available +if [ $(grep -c "^/" /proc/swaps) -eq 0 ]; then + mem=$(grep "^MemTotal:" /proc/meminfo | awk '{print $2}') + swapsize=$((4*$mem)) + info "You do not currently have any swap space defined." + echo + echo `gettext "You can create a swap file by doing:"` + echo " $ sudo dd if=/dev/zero of=/swapfile count=$swapsize" + echo " $ sudo mkswap /swapfile" + echo " $ sudo swapon /swapfile" + echo + echo `gettext "And then re-run"` "$0" + echo + exit 0 +fi + +swaps=$(grep "^/" /proc/swaps | awk '{print $1}') + +filtered_swaps=$( +for swap in $swaps; do + # Make sure this is swap space + if ! blkid "$swap" | grep -qs "TYPE=.*swap"; then + warn "[$swap]" `gettext "does not appear to be swap space, skipping."` + continue + fi + + # Check if this swap space is already setup for encryption + if /sbin/dmsetup table "$swap" | grep -qs " crypt " 2>/dev/null; then + warn "[$swap]" `gettext "already appears to be encrypted, skipping."` + continue + fi + + base=$(basename "$swap") + # check for the swap existing both as a crypt target and source + if grep -qs "^$base.*luks" /etc/crypttab 2>/dev/null; then + warn "[$swap]" `gettext "already has an entry in /etc/crypttab, skipping."` + continue + fi + if grep -qs "$swap.*luks" /etc/crypttab 2>/dev/null; then + warn "[$swap]" `gettext "already has an entry in /etc/crypttab, skipping."` + continue + fi + if grep -qs "$swap" /etc/initramfs-tools/conf.d/cryptroot 2>/dev/null; then + warn "[$swap]" `gettext "already has an entry in /etc/initramfs-tools/conf.d/cryptroot, skipping."` + continue + fi + + echo $swap +done +) +swaps="$filtered_swaps" +if [ -z "$swaps" ]; then + warn "There were no usable swap devices to be encrypted. Exiting." + exit 0 +fi + +########################################################################## + +info `gettext "Found swaps:"` $swaps +echo -n `gettext "Please enter a swap password"` ": " +# Input might not be a tty, protect against failure +stty_orig=`stty -g || true` +stty -echo || true +PASSWORD=`head -n1` +stty $stty_orig || true + +if [ -z "$PASSWORD" ]; then + echo + info `gettext "Aborting."` + echo + exit 0 +fi + +i=0 +for swap in $swaps; do + info `gettext "Setting up swap:"` $swap + uuid=$(blkid -o value -s UUID $swap) + for target in "UUID=$uuid" $swap; do + if [ -n "$target" ] && grep -qs "^$target " /etc/fstab; then + sed -i "s:^$target :\#$target :" /etc/fstab + warn "Commented out your unencrypted swap from /etc/fstab" + fi + done + + while :; do + i=$((i+1)) + [ -e "/dev/mapper/cryptswap$i" ] || break + done + + # Format swap device + swapoff $swap + echo $PASSWORD | cryptsetup luksFormat -q "$swap" + echo $PASSWORD | cryptsetup luksOpen "$swap" "cryptswap$i" + mkswap "/dev/mapper/cryptswap$i" + + # Turn swap on + swapon "/dev/mapper/cryptswap$i" + + # Add crypttab entry + echo "cryptswap$i $swap none luks" >> /etc/crypttab + + # Update the resume device. Assume only one swap device if this computer is to be hibernated. + echo "RESUME=/dev/mapper/cryptswap$i" > /etc/initramfs-tools/conf.d/resume + + # Add fstab entry + echo "/dev/mapper/cryptswap$i none swap sw 0 0" >> /etc/fstab +done + +info `gettext "updating boot configuration"` +update-initramfs -k all -u + +info `gettext "Successfully setup encrypted swap!"` # Begin bundle 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