170 lines
4.3 KiB
Bash
Executable file
170 lines
4.3 KiB
Bash
Executable file
#!/bin/bash
|
||
#
|
||
# Script de creation d'un media bootable Debian
|
||
# Pour l'ACAQB
|
||
#
|
||
# Dépend : syslinux,wget
|
||
#
|
||
OPTIND=1
|
||
DEBIAN_VERSION="8.6.0"
|
||
DEBIAN_ARCH="amd64"
|
||
BOOT_TYPE="efi64"
|
||
SYSLINUX_EXE=`witch syslinux`
|
||
SYSLINUX_FILES="menu.c32 vesamenu.c32 libutil.c32 libcom32.c32"
|
||
SYSLINUX_BIOS_FILES=""
|
||
SYSLINUX_EFI_FILES="ldlinux.e64"
|
||
TMP_DIR="tmp"
|
||
MOUNT_DIR="/mnt/usbstick"
|
||
|
||
bootfiles_Debian="http://ftp.debian.org/debian/dists/jessie/main/installer-${DEBIAN_ARCH}/current/images/hd-media"
|
||
iso_url="http://cdimage.debian.org/debian-cd/${DEBIAN_VERSION}/${DEBIAN_ARCH}/iso-cd"
|
||
iso_file="debian-${DEBIAN_VERSION}-${DEBIAN_ARCH}-netinst.iso "
|
||
syslinux_mod="/usr/lib/syslinux"
|
||
current_dir=`pwd`
|
||
|
||
usage() {
|
||
cat << EOF
|
||
USAGE: ${0} [-a architecture] [-b]
|
||
-a amd64 | i386 CPU architecture
|
||
-b bios boot type (default is efi64)
|
||
-d device_block USB key to write
|
||
|
||
${0} initialize an usb key for Debian automatic install with preseed and a partman recipe.
|
||
EOF
|
||
}
|
||
|
||
download (){
|
||
#Download function
|
||
# $1 : filename
|
||
# $2 : url
|
||
# $3 : 1 if abort download if file exist
|
||
echo -ne "Downloading $1 ... "
|
||
if [[ -f $1 && $3 == "1" ]]
|
||
then
|
||
echo file already downloaded.
|
||
return
|
||
fi
|
||
wget ‐‐no-clobber -4 $2/$1 &> /dev/null
|
||
echo "done!"
|
||
}
|
||
|
||
create_dir(){
|
||
# $1 directory to create
|
||
if [ ! -d $1 ]; then mkdir -p $1; fi
|
||
}
|
||
|
||
#Stop script if syslinux is not installed
|
||
if [ ! -f $SYSLINUX_EXE]
|
||
then
|
||
echo "Syslinux not found, script can't continue…"
|
||
exit 1
|
||
fi
|
||
|
||
# Arguments ...
|
||
while getopts "ha:bd:" opt; do
|
||
case "$opt" in
|
||
h)
|
||
usage
|
||
exit 0
|
||
;;
|
||
a)
|
||
if [[ $OPTARG == "amd64" || $OPTARG == "i386" ]]
|
||
then
|
||
DEBIAN_ARCH=$OPTARG
|
||
else
|
||
echo "CPU architecture must be amd64 of i386, bye."
|
||
exit 1
|
||
fi
|
||
;;
|
||
b)
|
||
BOOT_TYPE="bios"
|
||
;;
|
||
d)
|
||
if [ -b $OPTARG ]
|
||
then
|
||
dest=$OPTARG
|
||
else
|
||
echo "Destination is not a block device, bye."
|
||
exit 1
|
||
fi
|
||
;;
|
||
esac
|
||
done
|
||
|
||
# Création du répertoire temporaire
|
||
if [ ! -d $TMP_DIR ]; then mkdir $TMP_DIR; fi
|
||
|
||
if [[ -z $dest ]]
|
||
then
|
||
echo "No destination device specified, USB key will not be created."
|
||
fi
|
||
|
||
# Download Debian files (kernel, initrd and iso)
|
||
echo -e "\nPrepare Debian files\n---"
|
||
cd $TMP_DIR
|
||
for file in "vmlinuz" "initrd.gz"
|
||
do
|
||
download $file $bootfiles_Debian 1
|
||
done
|
||
download $iso_file $iso_url 1
|
||
cd $current_dir
|
||
|
||
# Copy wanted syslinux file from archive
|
||
create_dir ${TMP_DIR}/syslinux 1
|
||
for file in $SYSLINUX_FILES
|
||
do
|
||
echo "copie de $file"
|
||
cp ${syslinux_mod}/${BOOT_TYPE}/${file} ${TMP_DIR}/syslinux/
|
||
done
|
||
|
||
case $BOOT_TYPE in
|
||
efi64)
|
||
for file in $SYSLINUX_EFI_FILES
|
||
do
|
||
echo "copying $file ..."
|
||
cp ${syslinux_mod}/${BOOT_TYPE}/${file} ${TMP_DIR}/syslinux/
|
||
done
|
||
create_dir "${TMP_DIR}/EFI/boot"
|
||
cp -T ${syslinux_mod}/${BOOT_TYPE}/syslinux.efi ${TMP_DIR}/EFI/boot/bootx64.efi
|
||
;;
|
||
bios)
|
||
for file in $SYSLINUX_BIOS_FILES
|
||
do
|
||
echo "copying $file ..."
|
||
cp ${syslinux_mod}/${BOOT_TYPE}/${file} ${TMP_DIR}/syslinux/
|
||
done
|
||
;;
|
||
esac
|
||
echo Copying configuration file
|
||
cp -R syslinux $TMP_DIR &> /dev/null
|
||
|
||
if [[ -n $dest ]]
|
||
then
|
||
read -p "[WARNING] Disk $dest will be erased continue [Y/N]? " -n 1 -r
|
||
if [[ ! $REPLY =~ ^[Yy]$ ]]
|
||
then
|
||
exit 1
|
||
fi
|
||
#dd if=/dev/zero of=${dest} bs=512 count=1 conv=notrunc &> /dev/null
|
||
echo -e "\nCreating partition"
|
||
parted -s ${dest} mklabel msdos mkpart primary fat32 1MiB 100% set 1 boot on
|
||
mkfs.vfat ${dest}1 -n debian &> /dev/null
|
||
|
||
# mount and copy
|
||
create_dir $MOUNT_DIR
|
||
mount ${dest}1 $MOUNT_DIR
|
||
echo "copying all file to USB drive"
|
||
cp -R ${TMP_DIR}/* $MOUNT_DIR &> /dev/null
|
||
umount $MOUNT_DIR
|
||
echo Unmounting key, please wait ...
|
||
sleep 5
|
||
# Make key bootable if bios.
|
||
if [[ $BOOT_TYPE == "bios" ]]
|
||
then
|
||
# In this mode, we need to write syslinux MBR.
|
||
echo "Writing syslinux mbr.ini fo $dest"
|
||
dd bs=440 count=1 conv=notrunc if=${syslinux_mod}/${BOOT_TYPE}/mbr.bin of=${dest}
|
||
syslinux --directory syslinux --install ${dest}1
|
||
fi
|
||
exit 0
|
||
fi
|