Simple solution using Linux Unified Key Setup.
Create key with random 4096 bytes and store it in /root/hdkey file:
$ sudo dd iflag=fullblock if=/dev/random of=/root/hdkey bs=4096 count=1
Initialize LUKS partition (/dev/sdaZ in this example) and set key:
$ sudo cryptsetup luksFormat /dev/sdaZ -d /root/hdkey -q
Open LUKS partition and map it as homefs (in this example):
$ sudo cryptsetup luksOpen /dev/sdaZ homefs -d /root/hdkey
Format encrypted homefs and close it:
$ sudo mkfs.ext4 /dev/mapper/homefs
$ sudo cryptsetup luksClose homefs
Edit /etc/crypttab configuration file and add similar line:
homefs /dev/sdaZ /root/hdkey luks
Edit /etc/fstab file if you want to mount it at boot:
/dev/mapper/homefs /home ext4 defaults 0 2
To check changes without reboot issue command:
root@milosz-live:/mnt# /etc/init.d/cryptdisks restart
* Stopping remaining crypto disks...
* cryptswap1 (busy)...
* tempfs (busy)...
* homefs (stopped)... [ OK ]
* Starting remaining crypto disks...
* cryptswap1 (running)...
* tempfs (running)...
* homefs (starting)..
* homefs (started)...
Don’t forget to secure key.
Update – 18.05.2015
Updated Google code – cryptsetup link to new location at GitLab – cryptsetup.