first commit

This commit is contained in:
Yorick Barbanneau 2016-07-06 00:24:26 +02:00
commit 14867d5900
5 changed files with 261 additions and 0 deletions

164
init.sh Executable file
View file

@ -0,0 +1,164 @@
#!/bin/bash
#
# Script de creation d'un media bootable Debian
# Pour l'ACAQB
#
# Dépend : syslinux,wget
#
OPTIND=1
DEBIAN_VERSION="8.5.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="core/ldlinux.sys com32/elflink/ldlinux/ldlinux.c32"
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 fot 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 "Destinatioj 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_Debian="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 file (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_Debian} $iso_file 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}
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
cp -R EFI $MOUNT_DIR &> /dev/null
umount $MOUNT_DIR
exit 0
fi