This repository has been archived on 2024-09-06. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
debian-usbcreator/init.sh

170 lines
4.3 KiB
Bash
Executable file
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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=`which 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"
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
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"
# 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