#!/bin/bash # Copyright (C) 2017-2018 Daniel Tartavel-jeannot # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . function title() { echo -e "\e[1;32m$1\e[0m" } function info() { echo -e "\e[36m$1\e[0m" } function warning() { echo -e "\e[1;35m$1\e[0m" } function error() { echo -e "\e[1;31m$1\e[0m" } SOURCE_PATH="$(/bin/dirname "$(readlink -f "$0")")" INSTALL_PATH="$SOURCE_PATH/arm" FILES_PATH="$SOURCE_PATH/files" info $0 CMDNAME=$(/bin/basename "$0") #while read -r;do # for MAGEIA_VERSION in $REPLY # do # if [ $MAGEIA_VERSION <= 5 ];then # echo 'Mageia version >= 6 is needed' # exit # fi # break # done #done < /etc/version function help() { echo "$CMDNAME [option] [size of image in Go]" echo "Options:" echo "--all create ready to burn image of Mageia $MAGEIA_VERSION" echo "--clean Clean all (suppress all) to make a new image" echo "--size size of image default: 7Go" echo "--build-path Path to the build directory of the image of Mageia $MAGEIA_VERSION" echo "--target target system (for now rpi, odroid)" echo "--target-version version of the target (0, 1, 2, 3 for rpi, 3 or 4 for odroid)" echo "--config Path to config files" echo "--bootfs filesystem of boot partition (ext4 or vfat) default: ext4" echo "--nonfree activate nonfree repos" echo "--tainted activate tainted repos" echo "\nBuild levels:" echo "--create-chroot Create the chroot directory" echo "--addmedia add mirrors" echo "--update-mirror update urpmi database" echo "--install-basesystem install base system" echo "--chroot chroot to arm directory and launch packages installation" echo "--create-image Create the image of Mageia $MAGEIA_VERSION" echo -e "\nFor image size, make sure it fit on physical support. (Default size is 7 Go)" } # cleaning build space function clean() { # Unmounting /dev /proc /sys in chroot title "Cleaning" if ! [ -z "$(mountpoint -qd "$BUILD_PATH/dev")" ];then info "Unmounting $BUILD_PATH/dev" umount "$BUILD_PATH/dev" if ! [ $? -ne 0 ];then error "line $LINENO can't unmount $BUILD_PATH/dev : exiting" #exit 1 fi fi if ! [ -z "$(mountpoint -qd "$BUILD_PATH/sys")" ];then info "Unmounting $BUILD_PATH/sys" umount "$BUILD_PATH/sys" if ! [ $? -ne 0 ];then error "line $LINENO can't unmount $BUILD_PATH/sys : exiting" #exit 1 fi fi if ! [ -z "$(mountpoint -qd "$BUILD_PATH/proc")" ];then info "Unmounting $BUILD_PATH/proc" umount "$BUILD_PATH/proc" if ! [ $? -ne 0 ];then error "line $LINENO can't unmount $BUILD_PATH/proc : exiting" #exit 1 fi fi # Removing old Build directory if [ -d "$BUILD_PATH" ];then info "Removing $BUILD_PATH" /bin/rm -Rf "$BUILD_PATH" else warning "$BUILD_PATH does not exists" fi # removing old image if [ -e "$IMAGE" ];then info "Removing $IMAGE" /bin/rm -f "$INSTALL_PATH/$IMAGE" else warning "$IMAGE does not exists" fi # removing loop devices for LOOP in $(ls /dev/loop*[0-9]p1) do X=${LOOP:0:10} if [ -e "$X" ];then info "removing $X" partx -d "$X" fi done # Removing boot and root directory if [ -d "$BOOT" ];then info "Removing $BOOT" /bin/rmdir "$BOOT" else warning "$BOOT does not exists" fi if [ -d "$ROOT" ];then info "Removing $ROOT" /bin/rmdir "$ROOT" else warning "$ROOT does not exists" fi exit 0 } # creation of install path and copy of qemu ( installing it if not yet installed ) function createchroot() { title "Making chroot" if ! [ -f /bin/qemu-arm-static ]; then title "Qemu package not present : installing qemu packages" /sbin/urpmi --auto --no-recommends qemu-user-static if ! [ $? -eq 0 ];then error "line $LINENO can't install qemu-user-static : exiting" exit 1 fi fi # Starting qemu service if not started /bin/systemctl is-active systemd-binfmt.service if [ $? -ne 0 ]; then title "Starting systemd-binfmt.service" /bin/systemctl start systemd-binfmt.service if ! [ $? -ne 0 ];then error "line $LINENO can't start qemu-user-static : exiting" exit 1 fi fi } # adding Mageia repositories function addmedia() { title "Creating media $MIRROR" /sbin/urpmi.addmedia --urpmi-root "$BUILD_PATH" --distrib "$MIRROR" err=$? if [ $err -ne 0 ];then error "line $LINENO error $err - can't add medias from $MIRROR : exiting" exit 1 fi if [ $NONFREE -eq 1 ];then title "activating non-free repos" /sbin/urpmi.update --urpmi-root "$BUILD_PATH" --no-ignore Nonfree\ Release Nonfree\ Updates err=$? if [ $err -ne 0 ];then error "line $LINENO error $err - can't activate medias nonfree : exiting" exit 1 fi fi if [ $TAINTED -eq 1 ];then title "activating tainted repos" /sbin/urpmi.update --urpmi-root "$BUILD_PATH" --no-ignore Tainted\ Release Tainted\ Updates err=$? if [ $err -ne 0 ];then error "line $LINENO error $err - can't activate medias tainted : exiting" exit 1 fi fi } function updatemirror() { title "updating mirror" /sbin/urpmi.update -a --urpmi-root "$BUILD_PATH" if [ $? -ne 0 ];then error "line $LINENO can't update mirrors : exiting" exit 1 fi } function installbasesystem() { # Create Build path if ! [ -d "$BUILD_PATH" ];then warning "Build path ( $BUILD_PATH ) does not exists, do you want i create it ? [Y|n] " read yn if [ -z $yn ] || [ $yn = "Y" ] || [ $yn = "y" ];then title "Creating $BUILD_PATH" /bin/mkdir -p "$BUILD_PATH/usr/bin" "$BUILD_PATH/usr/lib/binfmt.d" if [ $? -ne 0 ];then error "line $LINENO can't create $BUILD_PATH : exiting" exit 1 fi else exit 1 fi else info "Build path exists" fi title "installing basesystem" /sbin/urpmi --urpmi-root "$BUILD_PATH" --ignorearch --no-verify-rpm --auto --split-level 200 --split-length 200 shadow-utils basesystem-minimal if [ $? -ne 0 ];then error "line $LINENO error installing shadow-utils or basesystem-minimal : exiting" exit 1 fi #/sbin/urpmi --urpmi-root "$BUILD_PATH" --ignorearch --no-verify-rpm --auto --split-level 200 --split-length 200 basesystem-minimal #if [ $? -ne 0 ];then # error "line $LINENO error installing basesystem-minimal : exiting" # exit 1 #fi /sbin/urpmi --urpmi-root "$BUILD_PATH" --ignorearch --no-verify-rpm --auto --split-level 200 --split-length 200 urpmi locales-fr systemd u-boot if [ $? -ne 0 ];then error "line $LINENO error installing urpmi or locales.fr : exiting" exit 1 fi } function preparechroot() { title "Preparing chrooting in $BUILD_PATH" #Copying qemu /bin/cp /bin/qemu-arm-static "$BUILD_PATH/usr/bin/" if [ $? -ne 0 ];then error "line $LINENO can't copy /bin/qemu-user-static to $BUILD_PATH/usr/bin/ : exiting" exit 1 fi /bin/cp /usr/lib/binfmt.d/qemu-arm-static.conf "$BUILD_PATH/usr/lib/binfmt.d" if [ $? -ne 0 ];then error "line $LINENO can't copy /usr/lib/binfmt.d/qemu-arm-static.conf to $BUILD_PATH/usr/lib/binfmt.d : exiting" exit 1 fi info "making /etc/hostname" echo "$HOSTNAME" > "$BUILD_PATH/etc/hostname" info "copying second stage script in $BUILD_PATH" echo "/bin/cp $SOURCE_PATH/$CONFIG_PATH/second_stage_install.sh $BUILD_PATH/" cp --preserve=mode "$SOURCE_PATH/$CONFIG_PATH/second_stage_install.sh" "$BUILD_PATH/second_stage_install.sh" if [ $? -ne 0 ];then error "line $LINENO error copying $SOURCE_PATH/$CONFIG_PATH/second_stage_install.sh : exiting" exit 1 fi info "creation of user account" echo "/bin/passwd << EOF $ROOT_PWD $ROOT_PWD EOF /sbin/useradd $ID_USER /bin/passwd $ID_USER << EOF $PASSWORD $PASSWORD EOF" >>"$BUILD_PATH/second_stage_install.sh" info "Copying skel in root directory" /bin/rsync -rlptH /etc/skel/ "$BUILD_PATH/root/" case $TARGET in odroid) #TEMPORARY CODE #copying kernel odroid not existing in mageia repos info "copying kernel-odroid and u-boot rpms in $BUILD_PATH/root" echo "/bin/cp $SOURCE_PATH/$CONFIG_PATH/kernel-odroid-4.14.y-1.armv7hl.rpm $BUILD_PATH/root/" /usr/bin/cp --preserve=mode "$SOURCE_PATH/$CONFIG_PATH/kernel-odroid-4.14.y-1.armv7hl.rpm" "$BUILD_PATH/root/" echo "/bin/cp $SOURCE_PATH/$CONFIG_PATH/u-boot-20180507-3.mga7.armv7hl.rpm $BUILD_PATH/root/" /usr/bin/cp --preserve=mode "$SOURCE_PATH/$CONFIG_PATH/u-boot-20180507-3.mga7.armv7hl.rpm" "$BUILD_PATH/root/" if [ $? -ne 0 ];then error "line $LINENO error copying $SOURCE_PATH/$CONFIG_PATH/kernel-odroid-4.14.y-1.armv7hl.rpm : exiting" exit 1 fi ;; rpi) ;; esac } function jumpchroot() { title "chrooting to $BUILD_PATH" info "mounting dev, sys, proc directories in chroot" /bin/mount -B /dev "$BUILD_PATH/dev" if [ $? -ne 0 ];then error "line $LINENO error mounting $BUILD_PATH/dev : exiting" exit 1 fi /bin/mount -B /sys "$BUILD_PATH/sys" if [ $? -ne 0 ];then error "line $LINENO error mounting $BUILD_PATH/sys : exiting" exit 1 fi /bin/mount -B /proc "$BUILD_PATH/proc" if [ $? -ne 0 ];then error "line $LINENO error mounting $BUILD_PATH/proc : exiting" exit 1 fi info "Copying resolv.conf" /bin/cp -v --preserve=mode /etc/resolv.conf "$BUILD_PATH/etc/" if [ $? -ne 0 ];then error "line $LINENO error copying $BUILD_PATH/etc/resolv.conf : exiting" exit 1 fi if [ "$OPT" = "chroot" ];then /sbin/chroot "$BUILD_PATH" else /sbin/chroot --userspec root:root "$BUILD_PATH" /bin/bash -v -c 'sh /second_stage_install.sh' fi RET=$? if [ $RET -ne 0 ];then error "line $LINENO Warning : chrooting to $BUILD_PATH retrurn an error $RET" ERRORN=$((ERRORN++)) fi info "unmounting dev, sys, proc" /bin/umount -lf "$BUILD_PATH/dev" if [ $? -ne 0 ];then warning "line $LINENO Warning : error unmounting $BUILD_PATH/dev, continuing anyway" ERRORN=$((ERRORN++)) fi /bin/umount -lf "$BUILD_PATH/sys" if [ $? -ne 0 ];then warning "line $LINENO Warning : error unmounting $BUILD_PATH/sys, continuing anyway" ERRORN=$((ERRORN++)) fi /bin/umount -lf "$BUILD_PATH/proc" if [ $? -ne 0 ];then warning "line $LINENO Warning : error unmounting $BUILD_PATH/proc, continuing anyway" ERRORN=$((ERRORN++)) fi } function verify_disk_space() { title "Verifying if there is enough space on disk to make the image" DISK_SPACE=$(/usr/bin/df -BG --output=avail "$INSTALL_PATH" | sed '1d;s/[^0-9]//g') info "Free disk space: ${DISK_SPACE}G" if [ $DISK_SPACE -lt $IMAGE_SIZE ];then warning "image size is greater than disk space" info "correct the problem and relaunch the script with parameter --create-rpi-image" info "$0 --size $IMAGE_SIZE --create-rpi-image" return 1 fi return 0 } function createxu3image() { title "Creating Odroid XU3-XU4 image" createimage if [ -z "$BOOTFS" ];then BOOTFS="ext4" fi formatpartitions "$BOOTFS" ext4 copyingsystem } function createrpiimage() { title "Creating Pi image" if ! [ -d "$FIRMWARE_PATH/$FIRMWARE_DIR" ];then # the firmware directory does not exists echo "$(ls *.zip| wc -l)" if [ "$(ls *.zip| wc -l)" -eq 0 ];then # the firmware archive does not exists warning "The raspberry pi firmware need to be downloaded" info "Downloading FIRMWARE_FILENAME" wget $FIRMWARE_DOWNLOAD_URL if [ $? -ne 0 ];then error "line $LINENO error downloading raspberry firmware at $FIRMWARE_DOWNLOAD_URL :exiting" exit 1 fi fi info "extracting firmware" unzip -d "$FIRMWARE_PATH" *.zip if [ $? -ne 0 ];then error "line $LINENO error unzipping $FIRMWARE_PATH : exiting" exit 1 fi fi title "Making raspberry pi image" createimage if [ -z $BOOTFS ];then BOOTFS="vfat" fi formatpartitions $BOOTFS ext4 copyingsystem } createimage() { title " in $IMAGE" if [ -f "$INSTALL_PATH/$IMAGE" ];then warning "Deleting previous image" /bin/rm -f "$INSTALL_PATH/$IMAGE" if [ $? -ne 0 ];then error "line $LINENO error can't remove previous image at $INSTALL_PATH/$IMAGE : exiting" exit 1 fi fi warning "please wait until end of image creation" /bin/dd if=/dev/zero of="$INSTALL_PATH/$IMAGE" bs=1MB count=$(( $IMAGE_SIZE * 1024 )) if [ $? -ne 0 ];then error "line $LINENO can't make image at $INSTALL_PATH/$IMAGE : exiting" exit 1 fi DEVICE=$(/sbin/losetup -f --show "$INSTALL_PATH/$IMAGE") if [ $TARGET = "odroid" ];then info "installing blobs" pushd "$SOURCE_PATH/$CONFIG_PATH/sd_fuse" if [ $? -ne 0 ];then error "line $LINENO error directory $SOURCE_PATH/$CONFIG_PATH/sd_fuse does not exists : exiting" exit 1 else ./sd_fusing.sh "$DEVICE" fi pushd fi info "making partitions" /sbin/fdisk "$DEVICE" << EOF n p 1 +128M t c n p 2 a 1 a 2 w EOF # Activate loop device /sbin/losetup -d "$DEVICE" DEVICE=$(/sbin/partx -va "$INSTALL_PATH/$IMAGE" | /bin/grep -m 1 -E -o '/dev/loop.?') info "device $DEVICE" info "partitions list:" info "$(/sbin/partx -v "$INSTALL_PATH/$IMAGE")" BOOTP="${DEVICE}p1" ROOTP="${DEVICE}p2" } formatpartitions() { info "Formatting partitions" info "Boot : $BOOTP as $1" "/sbin/mkfs.$1" "$BOOTP" if [ $? -ne 0 ];then error "line $LINENO error formating $BOOTP : exiting" /sbin/losetup -d "$DEVICE" exit 1 fi info "Root : $ROOTP as $2" "/sbin/mkfs.$2" "$ROOTP" if [ $? -ne 0 ];then error "line $LINENO error formating $ROOTP : exiting" /sbin/losetup -d "$DEVICE" exit 1 fi BOOT_UUID=$(blkid -s UUID -o value UUID "$BOOTP") info "Boot UUID: $BOOT_UUID" ROOT_UUID=$(blkid -s UUID -o value UUID "$ROOTP") info "Root UUID: $ROOT_UUID" } copyingsystem() { info "mounting partitions, making mountpoint if necessary" if ! [ -d "$BOOT" ];then /bin/mkdir "$BOOT" if [ $? -ne 0 ];then error "line $LINENO error making directory $BOOT : exiting" exit 1 fi fi if ! [ -d "$ROOT" ];then /bin/mkdir "$ROOT" if [ $? -ne 0 ];then error "line $LINENO error making directory $ROOT : exiting" exit 1 fi fi /bin/mount "$BOOTP" "$BOOT" if [ $? -ne 0 ];then error "line $LINENO error mounting $BOOTP : exiting" exit 1 fi /bin/mount "$ROOTP" "$ROOT" if [ $? -ne 0 ];then error "line $LINENO error mounting $ROOTP : exiting" exit 1 fi info "making /etc/fstab" echo "proc /proc proc defaults 0 0 UUID=$BOOT_UUID /mnt/arm_boot vfat defaults 0 0 UUID=$ROOT_UUID / ext4 defaults 0 0" > "$BUILD_PATH"/etc/fstab if [ ! -d "$BUILD_PATH/boot/extlinux" ];then info "making /boot/extlinux/extlinux.conf" mkdir -p "$BUILD_PATH/boot/extlinux" fi if [ ! -f "$BUILD_PATH/boot/extlinux/extlinux.conf" ];then sed -e s/\/$ROOT_UUID/g $SOURCE_PATH/$CONFIG_PATH/extlinux.conf >"$BUILD_PATH/boot/extlinux/extlinux.conf" KERNEL_ID=`basename $BUILD_PATH/usr/lib/linux-*` sed -i -e s/\/$KERNEL_ID/g "$BUILD_PATH/boot/extlinux/extlinux.conf" fi case $TARGET in rpi) info "copying 10-vchiq-permissions.rules" cp --preserve=mode "$SOURCE_PATH/$CONFIG_PATH/10-vchiq-permissions.rules" "$BUILD_PATH/etc/udev/rules.d/" info "Making /etc/modules" echo "vchiq snd_bcm2835 vc4 brcmfmac" >> "$BUILD_PATH"/etc/modules ARM_BOOT="$BUILD_PATH/mnt/arm_boot" if ! [ -d "$ARM_BOOT" ];then mkdir -p "$ARM_BOOT" fi info "copying modprobe.conf" /usr/bin/cp -v --preserve=mode "$SOURCE_PATH/$CONFIG_PATH/modprobe.conf" "$BUILD_PATH/etc/" chown root:root "$BUILD_PATH/etc/modprobe.conf" info "copying firmware, overlays in rpi boot partition" # cp -v --preserve=mode "$BUILD_PATH/usr/lib/linux-"* "$BOOT/dtb" cp -v --preserve=mode "$FIRMWARE_PATH/$FIRMWARE_DIR/boot/start"* "$ARM_BOOT/" cp -v --preserve=mode "$FIRMWARE_PATH/$FIRMWARE_DIR/boot/fixup"* "$ARM_BOOT/" cp -v --preserve=mode "$FIRMWARE_PATH/$FIRMWARE_DIR/boot/bootcode.bin"* "$ARM_BOOT/" cp -vR --preserve=mode "$FIRMWARE_PATH/$FIRMWARE_DIR/boot/overlays" "$ARM_BOOT/" info "copying u-boot binary to $ARM_BOOT" case $TARGET_VERSION in 2) info "copying u-boot for $TARGET 2" cp --preserve=mode "$BUILD_PATH/usr/lib/u-boot/rpi_2/u-boot.bin" "$ARM_BOOT/kernel.img" ;; 0) info "copying u-boot for $TARGET 0" cp --preserve=mode "$BUILD_PATH/usr/lib/u-boot/rpi_0_w/u-boot.bin" "$ARM_BOOT/kernel.img" ;; 1) info "copying u-boot for $TARGET 1" cp --preserve=mode "$BUILD_PATH/usr/lib/u-boot/rpi/u-boot.bin" "$ARM_BOOT/kernel.img" ;; 3_32) info "copying u-boot for $TARGET 3 32 bits" cp --preserve=mode "$BUILD_PATH/usr/lib/u-boot/rpi_3_32b/u-boot.bin" "$ARM_BOOT/kernel.img" ;; 3+) info "copying u-boot for $TARGET 3b+ 32 bits" cp --preserve=mode "$BUILD_PATH/usr/lib/u-boot/rpi_3_32b/u-boot.bin" "$ARM_BOOT/kernel.img" ;; esac # info "copying raspberry optionals files in opt" # /bin/rsync -rlptDH "$FIRMWARE_PATH/$FIRMWARE_DIR/opt/" "$BUILD_PATH/opt/" info "copying wifi firmware file missing in kernel-firmware-nonfree" if ! [ -d "$ROOT/usr/lib/firmware/brcm/" ];then /bin/mkdir -p "$ROOT/usr/lib/firmware/brcm/" fi if ! [ -f "$ROOT/usr/lib/firmware/brcm/brcmfmac434"* ];then /bin/cp --preserve=mode "$SOURCE_PATH/$CONFIG_PATH/brcmfmac434"* "$ROOT/usr/lib/firmware/brcm/" if [ $? -ne 0 ];then error "line $LINENO error copying wifi firmware in $ROOTP/usr/lib/firmware/brcm/ : exiting" exit 1 fi fi info "copying Mageia image to root partition" /bin/rsync -rlptDH --exclude "$ARM_BOOT/" --exclude "qemu-arm-static*" "$BUILD_PATH/" "$ROOT/" /bin/rsync -rlptDH "$ARM_BOOT/" "$BOOT/" ;; odroid) ODROID_BOOT="$BUILD_PATH/mnt/odroid_boot" if ! [ -d "$ODROID_BOOT" ];then mkdir -p "$ODROID_BOOT" fi case $TARGET_VERSION in xu4) info "copying u-boot for $TARGET $TARGET_VERSION" cp --preserve=mode "$BUILD_PATH/usr/lib/u-boot/$TARGET-$TARGET_VERSION/u-boot.bin" "$ARM_BOOT/" ;; esac # temporary code waiting inclusion of xu4 in Mageia kernel and u-boot info "Copying extlinux.conf on $ODROID_BOOT" cp --preserve=mode -R "$BUILD_PATH/boot/extlinux" "$ODROID_BOOT/" info "copying Mageia image to root partition" /bin/rsync -rlptDH --exclude "$ODROID_BOOT/" --exclude "qemu-arm-static*" "$BUILD_PATH/" "$ROOT/" /bin/rsync -rlptDH "$ODROID_BOOT/" "$BOOT/" ;; esac # info "copying tools in /usr/local/bin/" # /bin/cp -v --preserve=mode "$SOURCE_PATH/tools/" "$BUILD_PATH/usr/local/bin/" # if ! [ $? -eq 0 ];then # error "line $LINENO error copying tools" # ERRORN=$((ERRORN++)) # fi # /bin/mkdir "$ROOT/boot" copyingcommon # Syncing devices before unmounting /usr/bin/sync /usr/bin/umount "$BOOT" "$ROOT" if [ $? -eq 0 ];then /bin/rmdir "$BOOT" "$ROOT" else error "line $LINENO error unmounting $ROOT or $BOOT : exiting" exit 1 fi /usr/sbin/partx -d "$DEVICE" if [ $? -ne 0 ];then error "line $LINENO warning : error unmounting $DEVICE " exit 1 fi warning "You can now burn the image ( $INSTALL_PATH/$IMAGE ) on SD card" } # Copying files common to all systems copyingcommon() { title "Copying common files and configuration" rsync -rlptDH "$SOURCE_PATH/common/" "$ROOT/" rsync -rlptDH "$SOURCE_PATH/tools/"*.sh "$ROOT/usr/local/bin/" chown root:root "$ROOT/usr/local/bin/" } if [ $# == 0 ];then help exit fi # parsing commandline TEMP=$(getopt -o h,a --long all,help,clean,create-chroot,addmedia,create-image,,config:,target:,target-version:,chroot,bootfs:,install-basesystem,update-mirror,build-path:,size:,nonfree,tainted -n $CMDNAME -- "$@") if [ $? -ne 0 ] ; then error "line $LINENO Failed parsing options." >&2 ; exit 1 ; fi eval set -- "$TEMP" echo "$TEMP" # Note the quotes around `$TEMP': they are essential! while true; do case "$1" in -h|--help) help exit 0 ;; -a|--all) OPT="all" shift 1 ;; --clean) OPT="clean" shift ;; --size) IMAGE_SIZE_P=$2 shift 2 ;; --build-path) INSTALL_PATH_P="$2" shift 2 ;; --chroot) if [ -z $OPT ];then OPT="chroot" fi shift ;; --create-chroot) if [ -z $OPT ];then OPT="createchroot" fi shift ;; --addmedia) if [ -z $OPT ];then OPT="addmedia" fi shift ;; --update-mirror) if [ -z $OPT ];then OPT="updatemirror" fi shift ;; --install-basesystem) if [ -z $OPT ];then OPT="installbasesystem" fi shift ;; --create-image) if [ -z $OPT ];then CREATEIMAGE=true OPT="createimage" fi shift ;; --target) TARGET_P=$2 shift 2 ;; --target-version) TARGET_VERSION_P=$2 shift 2 ;; --config) CONFIG_PATH="$2" shift 2 ;; --bootfs) BOOTFS_P=$2 shift 2 ;; --nonfree) NONFREE_P=1 ;; --tainted) TAINTED_P=1 ;; --) shift break;; *) error "Parameter $1 does not exists " exit 1;; esac done # path of config file if ! [ -d "$SOURCE_PATH/$CONFIG_PATH" ];then info " Config path does not exists, defaulting to ./$TARGET" CONFIG_PATH="$TARGET" fi if [ -d "$SOURCE_PATH/$CONFIG_PATH" ];then if [ -e "$SOURCE_PATH/$CONFIG_PATH/mageia4arm.cfg" ];then info "using $SOURCE_PATH/$CONFIG_PATH/mageia4arm.cfg as config" . "$SOURCE_PATH/$CONFIG_PATH/mageia4arm.cfg" else warning "Config file does not exists, do you want i copy template ? [Y|n] " read yn if [ -z $yn ] || [ $yn = "Y" ] || [ $yn = "y" ];then /usr/bin/cp --preserve=mode "$SOURCE_PATH/mageia4arm.cfg.template" "$SOURCE_PATH/$CONFIG_PATH/mageia4arm.cfg" warning "You need now to modify the config file ($SOURCE_PATH/$CONFIG_PATH/mageia4arm.cfg) and relaunch the script" exit 2 fi fi else warning "Config directory does not exists, do you want i make it and copy the template file in? [Y|n] " read yn if [ -z $yn ] || [ $yn = "Y" ] || [ $yn = "y" ];then /usr/bin/mkdir "$SOURCE_PATH/$CONFIG_PATH/" /usr/bin/cp --preserve=mode "$SOURCE_PATH/config.template" "$SOURCE_PATH/$CONFIG_PATH/mageia4arm.cfg" warning "You need now to modify the config file ($SOURCE_PATH/$CONFIG_PATH/mageia4arm.cfg) and relaunch the script" exit 2 fi fi if ! [ -z "$IMAGE_SIZE_P" ];then IMAGE_SIZE=$IMAGE_SIZE_P fi if ! [ -z "$INSTALL_PATH_P" ];then INSTALL_PATH=$INSTALL_PATH_P fi if ! [ -z "$TARGET_P" ];then TARGET=$TARGET_P fi if ! [ -z "$TARGET_VERSION_P" ];then TARGET_VERSION=$TARGET_VERSION_P fi if ! [ -z "$BOOTFS_P" ];then BOOTFS=$BOOTFS_P fi if ! [ -z "$NONFREE_P" ];then NONFREE=$NONFREE_P fi if ! [ -z "$TAINTED_P" ];then TAINTED=$TAINTED_P fi info "Option: "$OPT IMAGE="Mageia-${MAGEIA_VERSION}-$TARGET$TARGET_VERSION.img" BOOT="/mnt/boot" ROOT="/mnt/root" BUILD_PATH="$INSTALL_PATH/build" ARM_VERSION="armv7hl" # assign function for building image of TARGET ( rpi, odroid ) case $TARGET in odroid) CREATEIMG="createxu3image" ;; rpi) CREATEIMG="createrpiimage" ;; *) error "No Target : $TARGET" exit 1 ;; esac info "target : $TARGET" info "target_version : $TARGET_VERSION" info "source path: $SOURCE_PATH" info "Install path: $INSTALL_PATH" info "Build path: $BUILD_PATH" info "Commande : $CMDNAME" info "Firmware path : $FIRMWARE_PATH" info "Firmware dir : $FIRMWARE_DIR" # Defining default image size to 7 go if [[ "$IMAGE_SIZE" -lt 7 ]] || [[ "$IMAGE_SIZE" -gt 128 ]];then IMAGE_SIZE=7 fi # change dir to install path and create it if not existing if [ "$OPT" != "clean" ];then info "cd $INSTALL_PATH" if ! [ -e "$INSTALL_PATH" ];then /bin/mkdir -p "$INSTALL_PATH" if [ -z $? ];then error "line $LINENO can't make directory $INSTALL_PATH , exiting" exit 1 fi fi cd "$INSTALL_PATH" if [ -z $? ];then error "line $LINENO can't change to directory $INSTALL_PATH , exiting" exit 1 fi fi #if no parameters then display help message if [ -z $OPT ];then OPT="--help" fi info "Image size is: $IMAGE_SIZE Go" case $OPT in clean) clean ;; all) verify_disk_space if [ $? -eq 1 ];then echo -e "Not enough space on disk\nDo you want to continue anyway ? [Y,n]" read yn if [ $yn = "n" ];then exit 6 fi fi createchroot addmedia updatemirror installbasesystem preparechroot jumpchroot $CREATEIMG ;; createchroot) createchroot ;; chroot) jumpchroot ;; addmedia) addmedia ;; updatemirror) updatemirror ;; createimage) verify_disk_space if [ $? -eq 1 ];then warning "Not enough space on disk" exit 6 fi $CREATEIMG ;; installbasesystem) installbasesystem ;; esac if ! [ -z $ERRORN ];then warning "Some errors occurs : $ERRORN errors" fi