1
0
This repository has been archived on 2023-11-30. You can view files and clone it, but cannot push or open issues or pull requests.
dtux__mageia4arm/create_arm_img_urpmi.sh
2019-10-20 20:06:09 +02:00

961 lines
24 KiB
Bash
Executable File

#!/bin/bash
# Copyright (C) 2017-2018 Daniel Tartavel-jeannot <contact@librepc.com>
#
# 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 <http://www.gnu.org/licenses/>.
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"
}
info $0
SOURCE_PATH="$(/bin/dirname "$(readlink -f "$0")")"
INSTALL_PATH="$SOURCE_PATH/arm"
FILES_PATH="$SOURCE_PATH/files"
PLATFORMS_PATH="$SOURCE_PATH/platforms"
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 (rpi1 rpi2 rpi3 rpi3+ xu4)"
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 $CONFIG_PATH/second_stage_install.sh $BUILD_PATH/"
cp --preserve=mode "$CONFIG_PATH/second_stage_install.sh" "$BUILD_PATH/second_stage_install.sh"
if [ $? -ne 0 ];then
error "line $LINENO error copying $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 $CONFIG_PATH/kernel-odroid-4.14.y-1.armv7hl.rpm $BUILD_PATH/root/"
/usr/bin/cp --preserve=mode "$CONFIG_PATH/kernel-odroid-4.14.y-1.armv7hl.rpm" "$BUILD_PATH/root/"
echo "/bin/cp $CONFIG_PATH/u-boot-20180507-3.mga7.armv7hl.rpm $BUILD_PATH/root/"
/usr/bin/cp --preserve=mode "$CONFIG_PATH/u-boot-20180507-3.mga7.armv7hl.rpm" "$BUILD_PATH/root/"
if [ $? -ne 0 ];then
error "line $LINENO error copying $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 "$CONFIG_PATH/sd_fuse"
if [ $? -ne 0 ];then
error "line $LINENO error directory $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/\<UUID\>/$ROOT_UUID/g $CONFIG_PATH/extlinux.conf >"$BUILD_PATH/boot/extlinux/extlinux.conf"
KERNEL_ID=`basename $BUILD_PATH/usr/lib/linux-*`
sed -i -e s/\<FDTDIR\>/$KERNEL_ID/g "$BUILD_PATH/boot/extlinux/extlinux.conf"
fi
case $TARGET in
rpi)
info "copying 10-vchiq-permissions.rules"
cp --preserve=mode "$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 "$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 "$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 -rlptogDH --exclude "$ARM_BOOT/" --exclude "qemu-arm-static*" "$BUILD_PATH/" "$ROOT/"
/bin/rsync -rlptogDH "$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 -rlptogDH --exclude "$ODROID_BOOT/" --exclude "qemu-arm-static*" "$BUILD_PATH/" "$ROOT/"
/bin/rsync -rlptogDH "$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="$PLATFORMS_PATH/$2"
shift 2
;;
--bootfs)
BOOTFS_P=$2
shift 2
;;
--nonfree)
NONFREE_P=1
shift
;;
--tainted)
TAINTED_P=1
shift
;;
--)
shift
break;;
*)
error "Parameter $1 does not exists "
exit 1;;
esac
done
# path of config file
if ! [ -d "$CONFIG_PATH" ];then
info " Config path does not exists, defaulting to ./platforms/$TARGET"
CONFIG_PATH="$PLATFORMS_PATH/$TARGET"
warning "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 "$CONFIG_PATH/"
/usr/bin/cp --preserve=mode "$SOURCE_PATH/config.template" "$CONFIG_PATH/mageia4arm.cfg"
warning "You need now to modify the config file ($CONFIG_PATH/mageia4arm.cfg) and relaunch the script"
exit 2
else
error "Error: Can't continue without config file, exiting"
exit 3
fi
fi
if [ -e "$CONFIG_PATH/mageia4arm.cfg" ];then
info "using $CONFIG_PATH/mageia4arm.cfg as config"
. "$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" "$CONFIG_PATH/mageia4arm.cfg"
warning "You need now to modify the config file ($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