Kod: Zaznacz cały
#!/bin/bash
if [ $(whoami) != root ]; then echo "ten skrypt musi być uruchomiony przez root."; exit 1; fi
ISODIR=$(pwd) # Bierzący katalog, który utworzy obraz
MOUNTDIR=/mnt/cdrom # Katalog do montowania płyt CD/DVD
MAXSIZE=$(( 4700 *2 ))k # Ilość 512 bloków
ISO=/tmp/image.iso # ścieżka gdzie powstanie obraz
CRYPT="-y -c aes-cbc-essiv:sha256 -h 256" # Opcje szyfrowania cryptsetup
MAPPER="cryptocd"
a=$(du -kcs $ISODIR|head -n1|cut -d/ -f1) # Sprawdza rozmiar plików i katalogów które szyfrujemy directory
b=4587450 # Bezpieczny maksymalny rozmiar dla DVD 4.4G
if [ -a $ISO ]; then rm -v $ISO; fi # Usuwa stary obraz ISO jeżeli jest
if (( a > b ))
then
echo "przekroczono maksymany rozmiar dla płyty DVD ${b}k"
exit
elif [ $(find $ISODIR -type d -name 'VIDEO_TS') ]
then
echo "wykryto dvd-video"
MKISOFS="-dvd-video"
else
MKISOFS="-input-charset iso8859-2 -joliet-long -iso-level 3 -l -J -r" # Opcje dla systemu plików iso9660
fi
for i in $(seq 0 7); do losetup /dev/loop$i >/dev/null 2>&1
if [ $? -eq 1 ]; then LOOP=/dev/loop$i; break; fi
done
if [ -z "$LOOP" ]; then echo "brak wolnego urządenia loop" >&2; exit; fi
dd if=/dev/urandom of=$ISO bs=512 count=2048
dd if=/dev/urandom of=$ISO bs=512 count=1 seek=$MAXSIZE
losetup $LOOP $ISO
cryptsetup $CRYPT luksFormat $LOOP
cryptsetup luksOpen $LOOP $MAPPER
SIZE=$(mkisofs $MKISOFS $ISODIR | dd of=/dev/mapper/$MAPPER bs=512 2>&1 | grep "zapisanych recordów" | cut -f1 -d+)
SIZE_VOL1=$(blockdev --getsize /dev/mapper/$MAPPER)
SIZE_LOOP=$(blockdev --getsize $LOOP)
cryptsetup luksClose $MAPPER
losetup -d $LOOP
SIZE=$(( $SIZE + ($SIZE_LOOP - $SIZE_VOL1) ))
dd if=$ISO of=$ISO bs=512 count=0 skip=$SIZE seek=$SIZE
echo "testowanie obrazu ISO..."
losetup $LOOP $ISO
losetup -d $LOOP
# Opcjonalnie można zamontować sobie obraz
# echo "Podaj hasło"
# cryptsetup luksOpen $LOOP $MAPPER
#
# echo "Montowanie zaszyfrowanego nośnika"
# mount -t iso9660 /dev/mapper/$MAPPER $MOUNTDIR
echo "Zakończono szyfrownie DVD/CD."