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

165 lines
4.5 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_VERSION="6.03"
SYSLINUX_FILES="com32/menu/menu.c32 com32/menu/vesamenu.c32 com32/libutil/libutil.c32 com32/lib/libcom32.c32"
SYSLINUX_BIOS_FILES=""
SYSLINUX_EFI_FILES="com32/elflink/ldlinux/ldlinux.e64"
TMP_DIR="tmp"
MOUNT_DIR="/mnt/usbstick"
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
}
# 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
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_url="https://www.kernel.org/pub/linux/utils/boot/syslinux/"
syslinux_archive="syslinux-${SYSLINUX_VERSION}.tar.gz"
current_dir=`pwd`
# Download Debian files (kernel, initrd and iso)
echo -e "\nPrepare Debian files\n---"
for file in "vmlinuz" "initrd.gz"
do
download $file $bootfiles_Debian 1
done
download $iso_file $iso_url 1
# Get Syslinux archive
echo -e "\nPrepare syslinux files\n---"
if [ ! -d "/tmp/syslinux-${SYSLINUX_VERSION}" ]
then
cd $TMP_DIR
if [ ! -f $syslinux_archive ]; then download $syslinux_archive $syslinux_url 1; fi
tar -xf $syslinux_archive
cd $current_dir
fi
# Copy wanted syslinux file from archive
for file in $SYSLINUX_FILES
do
echo "copie de $file"
cp ${TMP_DIR}/syslinux-${SYSLINUX_VERSION}/${BOOT_TYPE}/${file} ./syslinux/
done
case $BOOT_TYPE in
efi64)
for file in $SYSLINUX_EFI_FILES
do
echo "copying $file ..."
cp ${TMP_DIR}/syslinux-${SYSLINUX_VERSION}/${BOOT_TYPE}/${file} ./syslinux/
done
create_dir "EFI/syslinux"
cp ${TMP_DIR}/syslinux-${SYSLINUX_VERSION}/${BOOT_TYPE}/efi/syslinux.efi ./EFI/boot/bootx64.efi
;;
bios)
for file in $SYSLINUX_BIOS_FILES
do
echo "copying $file ..."
cp ${TMP_DIR}/syslinux-${SYSLINUX_VERSION}/${BOOT_TYPE}/${file} ./syslinux/
done
;;
esac
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
if [[ $BOOT_TYPE == "bios" ]]
then
# In bis mode, we need to write syslinux MBR.
echo "Writing syslinux mbr.ini fo $dest"
dd bs=440 count=1 conv=notrunc if=${TMP_DIR}/syslinux-${SYSLINUX_VERSION}/bios/mbr/mbr.bin of=${dest}
./tmp/syslinux-6.03/bios/linux/syslinux -i -d syslinux ${dest}1
fi
create_dir $MOUNT_DIR
mount ${dest}1 $MOUNT_DIR
echo "copying all file to USB drive"
cp * $MOUNT_DIR &> /dev/null
cp -R syslinux $MOUNT_DIR &> /dev/null
if [[ $BOOT_TYPE == "efi64" ]];then cp -R EFI $MOUNT_DIR &> /dev/null; fi
umount $MOUNT_DIR
exit 0
fi