In preseed:
d-i preseed/early_command string wget http://URL/autopart -P /tmp ; chmod 755 /tmp/autopart ; echo /tmp/autopart installer >> /var/lib/dpkg/info/download-installer.postinst
Contents of URL/autopart:
set -ex
case "$1" in
installer)
anna-install lvm2-udeb
sed -i 's/partman/\/tmp\/autopart partman/' \
/var/lib/dpkg/info/partman-base.postinst
logger -t autopart modified partman-base.postinst
;;
partman)
. /usr/share/debconf/confmodule
logger -t autopart Partition configuration starting
modprobe dm_mod
/sbin/vgchange -aln --ignorelockingfailure
for vg in $(vgdisplay |grep 'VG Name' |sed 's/.*VG Name *//'); do
echo y | vgremove $vg
done
size_sda=`sed -n 's/.* \([0-9]*\) sda$/\1/p' /proc/partitions`
size_sdb=`sed -n 's/.* \([0-9]*\) sdb$/\1/p' /proc/partitions`
size_hda=`sed -n 's/.* \([0-9]*\) hda$/\1/p' /proc/partitions`
size_hdb=`sed -n 's/.* \([0-9]*\) hdb$/\1/p' /proc/partitions`
if [ -n "$size_sda" ]; then
boot_device=sda
db_get debian-installer/add-kernel-opts
kopt="${RET:+$RET } rootdelay=5"
db_set debian-installer/add-kernel-opts "$kopt"
else
boot_device=hda
fi
logger -t autopart Boot device is $boot_device
if [ -n "$size_sda" ]; then
devices="${devices:+$devices }sda"
fi
if [ -n "$size_sdb" ]; then
devices="${devices:+$devices }sdb"
fi
if [ -n "$size_hda" ]; then
devices="${devices:+$devices }hda"
fi
if [ -n "$size_hdb" ]; then
devices="${devices:+$devices }hdb"
fi
for device in $devices; do
logger -t autopart Wiping /dev/$device
dd if=/dev/zero of=/dev/$device bs=512 count=1
if [ $device = $boot_device ]; then
cyl=$(sfdisk -g /dev/$device | cut -d\ -f2)
eval dev_size=\$size_$device
cyl_size=$(($dev_size/$cyl))
sfdisk="${sfdisk:+$sfdisk },$(((128*1024)/$cyl_size)),L,*"
pv=/dev/${device}2
else
pv=/dev/${device}1
fi
logger -t autopart Partitioning /dev/$device
sfdisk="${sfdisk:+$sfdisk },,8e"
for line in $sfdisk; do
echo "$line"
done | sfdisk /dev/$device
unset sfdisk
logger -t autopart Creating PV $pv
pvcreate $pv
lvm="${lvm:+$lvm }$pv"
dev_count=$((${dev_count:-0}+1))
done
logger -t autopart Creating VG
vgcreate vgsys $lvm
# Create and activate swap first. One for each PV.
if [ $dev_count -gt 4 ]; then
swapsize=128M
elif [ $dev_count -gt 2 ]; then
swapsize=256M
else
swapsize=512M
fi
for device in $lvm; do
swap=$((${swap:--1}+1))
logger -t autopart Creating swap sw$swap on $device
lvcreate -L $swapsize -n sw$swap -C y vgsys $device
mkswap /dev/vgsys/sw$swap
swapon /dev/vgsys/sw$swap
done
unset swap
# Then create other core filesystems
logger -t autopart Creating LVs
lvcreate -L 384M -n root vgsys
lvcreate -L 256M -n tmp vgsys
lvcreate -L 3G -n usr vgsys
lvcreate -L 1.5G -n var vgsys
# And format them
logger -t autopart Formatting
mke2fs -L boot /dev/${boot_device}1
mke2fs -j -L root /dev/vgsys/root
mke2fs -L tmp /dev/vgsys/tmp
mke2fs -j -L usr /dev/vgsys/usr
mke2fs -j -L var /dev/vgsys/var
# Create directory structure
logger -t autopart Mounting
mkdir -p /target
mount -t ext3 /dev/vgsys/root /target
mkdir -p /target/boot
mount -t ext2 /dev/${boot_device}1 /target/boot
for mountpoint in tmp usr var; do
mkdir -p /target/$mountpoint
mount /dev/vgsys/$mountpoint /target/$mountpoint
done
db_get debian-installer/add-kernel-opts
# 'twould be nice to detect exist rootflags and append
kopt="${RET:+$RET } rootflags=data=journal"
db_set debian-installer/add-kernel-opts "$kopt"
# Create fstab
logger -t autopart Creating fstab
mkdir -p /target/etc
(
echo \# /etc/fstab: static file system information.
echo \#
echo
echo proc /proc proc defaults 0 0
echo
for device in $lvm; do
swap=$((${swap:--1}+1))
echo /dev/vgsys/sw$swap none swap sw,pri=0 0 0
done
unset swap
echo
echo /dev/vgsys/root / ext3 \
defaults,noatime,sync,data=journal,errors=remount-ro 0 1
echo /dev/${boot_device}1 /boot ext2 \
defaults,ro,noatime,nodev,nosuid,sync 0 2
echo /dev/vgsys/tmp /tmp ext2 \
defaults,noatime,nodev,nosuid,errors=continue 0 2
echo /dev/vgsys/usr /usr ext3 \
defaults,ro,noatime,nodev,errors=remount-ro 0 2
echo /dev/vgsys/var /var ext3 \
defaults,noatime,nodev,nosuid,errors=remount-ro 0 2
) > /target/etc/fstab
;;
*)
echo $0: This script is destructive and should only be run as
echo part of the debian-installer process
;;
esac