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

979 lines
30 KiB
Bash
Raw Normal View History

#!/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()
{
2019-10-01 22:01:26 +02:00
echo -e "\e[1;32m${1}\e[0m"
}
function info()
{
2019-10-01 22:01:26 +02:00
echo -e "\e[36m${1}\e[0m"
}
function warning()
{
2019-10-01 22:01:26 +02:00
echo -e "\e[1;35m${1}\e[0m"
}
function error()
{
2019-10-01 22:01:26 +02:00
echo -e "\e[1;31m${1}\e[0m"
}
2019-10-01 22:01:26 +02:00
info ${0}
2019-09-29 06:50:44 +02:00
2019-10-01 22:01:26 +02:00
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
2019-10-01 22:01:26 +02:00
# 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()
{
2019-10-01 22:01:26 +02:00
echo -e "${CMDNAME} [option] [size of image in Go]"
echo -e "Options:"
echo -e "--all create ready to burn image of Mageia ${MAGEIA_VERSION}"
echo -e "--clean Clean all (suppress all) to make a new image"
echo -e "--size size of image default: 7Go"
echo -e "--build-path Path to the build directory of the image of Mageia ${MAGEIA_VERSION}"
echo -e "--target target system (for now rpi, odroid)"
echo -e "--target-version version of the target (0, 1, 2, 3 for rpi, 3 or 4 for odroid)"
echo -e "--config Path to config files"
echo -e "--bootfs filesystem of boot partition (ext4 or vfat) default: ext4"
echo -e "--nonfree activate nonfree repos"
echo -e "--tainted activate tainted repos"
echo -e "\nBuild levels:"
echo -e "--create-chroot Create the chroot directory"
echo -e "--addmedia add mirrors"
echo -e "--update-mirror update urpmi database"
echo -e "--install-basesystem install base system"
echo -e "--chroot chroot to arm directory and launch packages installation"
echo -e "--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)"
}
2018-12-07 20:38:32 +01:00
# cleaning build space
function clean()
{
2019-10-01 22:01:26 +02:00
# Unmounting /dev /proc /sys in chroot
title "Cleaning"
if ! [ -z "$(mountpoint -qd "${BUILD_PATH}/dev")" ]; then # mountpoint - see if a directory or file is a mountpoint ; -d Show the major/minor numbers of the device that is mounted on the given directory.
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}" # Tell the kernel about the presence and numbering of partitions.
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()
{
2019-10-01 22:01:26 +02:00
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 [ ${?} -ne 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
2019-03-29 22:50:46 +01:00
}
2018-12-07 20:38:32 +01:00
# adding Mageia repositories
function addmedia()
{
2019-10-01 22:01:26 +02:00
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()
{
2019-10-01 22:01:26 +02:00
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()
{
2019-10-01 22:01:26 +02:00
# Create Build path
if ! [ -d "${BUILD_PATH}" ]; then
warning "Build path ( ${BUILD_PATH} ) does not exist, do you want to 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
2019-03-29 22:50:46 +01:00
2019-10-01 22:01:26 +02:00
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()
{
2019-10-01 22:01:26 +02:00
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
2019-10-01 22:01:26 +02:00
/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
"bananaPro")
#TODO Complete here for Banana Pro.
;;
"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()
{
2019-10-01 22:01:26 +02:00
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}+1))
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}+1))
fi
/bin/umount -lf "${BUILD_PATH}/sys"
if [ ${?} -ne 0 ]; then
warning "line ${LINENO} Warning : error unmounting ${BUILD_PATH}/sys, continuing anyway"
ERRORN=$((${ERRORN}+1))
fi
/bin/umount -lf "${BUILD_PATH}/proc"
if [ ${?} -ne 0 ]; then
warning "line ${LINENO} Warning : error unmounting ${BUILD_PATH}/proc, continuing anyway"
ERRORN=$((${ERRORN}+1))
fi
}
function verify_disk_space()
{
2019-10-01 22:01:26 +02:00
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()
{
2019-10-01 22:01:26 +02:00
title "Creating Odroid XU3-XU4 image"
createimage
if [ -z "${BOOTFS}" ]; then
BOOTFS="ext4"
fi
formatpartitions "${BOOTFS}" ext4
copyingsystem
}
2018-12-21 22:27:43 +01:00
2019-10-01 22:01:26 +02:00
function createbproimage()
{
#TODO
# title "Creating Banana Pro image"
# createimage
# if [ -z "${BOOTFS}" ]; then
# BOOTFS="ext4"
# fi
# formatpartitions "${BOOTFS}" ext4
# copyingsystem
}
2018-12-21 22:27:43 +01:00
function createrpiimage()
{
2019-10-01 22:01:26 +02:00
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
2018-12-21 22:27:43 +01:00
}
2018-12-21 22:27:43 +01:00
createimage()
{
2019-10-01 22:01:26 +02:00
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
2018-07-21 09:17:52 +02:00
+128M
t
c
n
p
2
2018-12-21 22:27:43 +01:00
a
1
a
2
w
EOF
2018-12-21 22:27:43 +01:00
2019-10-01 22:01:26 +02:00
# 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()
{
2019-10-01 22:01:26 +02:00
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()
{
2019-10-01 22:01:26 +02:00
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 -e "proc /proc proc defaults 0 0\nUUID=${BOOT_UUID} /mnt/arm_boot vfat defaults 0 0\nUUID=${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 -e "vchiq\nsnd_bcm2835\nvc4\nbrcmfmac" >> "${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
"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"
;;
"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"
;;
"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}/"
;;
"bananaPro")
#TODO
;;
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}+1))
# 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"
}
2018-07-22 14:20:42 +02:00
# Copying files common to all systems
copyingcommon()
{
2019-10-01 22:01:26 +02:00
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/"
2018-07-22 14:20:42 +02:00
}
2019-10-01 22:01:26 +02:00
if [ ${#} == 0 ]; then
help
exit
fi
# parsing commandline
2019-10-01 22:01:26 +02:00
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}"
2019-10-01 22:01:26 +02:00
echo "${TEMP}"
# Note the quotes around `$TEMP': they are essential! Or not, $( ) do the same as ` `
while true;
do
2019-10-01 22:01:26 +02:00
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
;;
--tainted)
TAINTED_P=1
;;
--)
shift
break;;
2019-10-01 22:01:26 +02:00
*)
error "Parameter ${1} does not exists "
exit 1;;
esac
done
2018-06-09 16:15:50 +02:00
# path of config file
2019-10-01 22:01:26 +02:00
if ! [ -d "${CONFIG_PATH}" ]; then
info " Config path does not exists, defaulting to ./platforms/${TARGET}"
CONFIG_PATH="${PLATFORMS_PATH}/${TARGET}"
2019-09-29 06:50:44 +02:00
warning "Do you want i make it and copy the template file in? [Y|n] "
read yn
2019-10-01 22:01:26 +02:00
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"
2019-09-29 06:50:44 +02:00
exit 2
else
error( "Error: Can't continue without config file, exiting" )
exit 3
fi
fi
2019-10-01 22:01:26 +02:00
if [ -e "${CONFIG_PATH}/mageia4arm.cfg" ]; then
info "using ${CONFIG_PATH}/mageia4arm.cfg as config"
source "${CONFIG_PATH}/mageia4arm.cfg" #NOTE1 : Here is sourced a file with variables.
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
else # What are this "else fi" related to ?
fi
2018-07-17 11:18:06 +02:00
2019-10-01 22:01:26 +02:00
if ! [ -z "${IMAGE_SIZE_P}" ]; then
IMAGE_SIZE=${IMAGE_SIZE_P}
2019-01-05 20:58:18 +01:00
fi
2019-10-01 22:01:26 +02:00
if ! [ -z "${INSTALL_PATH_P}" ]; then
INSTALL_PATH=${INSTALL_PATH_P}
2019-01-05 20:58:18 +01:00
fi
2019-10-01 22:01:26 +02:00
if ! [ -z "${TARGET_P}" ]; then
TARGET=${TARGET_P}
2019-01-05 20:58:18 +01:00
fi
2019-10-01 22:01:26 +02:00
if ! [ -z "${TARGET_VERSION_P}" ]; then
TARGET_VERSION=${TARGET_VERSION_P}
2019-01-05 20:58:18 +01:00
fi
2019-10-01 22:01:26 +02:00
if ! [ -z "${BOOTFS_P}" ]; then
BOOTFS=${BOOTFS_P}
2019-01-05 20:58:18 +01:00
fi
2019-10-01 22:01:26 +02:00
if ! [ -z "${NONFREE_P}" ]; then
NONFREE=${NONFREE_P}
fi
2019-10-01 22:01:26 +02:00
if ! [ -z "${TAINTED_P}" ]; then
TAINTED=${TAINTED_P}
fi
2019-10-01 22:01:26 +02:00
info "Option: "${OPT}
2019-01-05 20:58:18 +01:00
2019-10-01 22:01:26 +02:00
IMAGE="Mageia-${MAGEIA_VERSION}-${TARGET}${TARGET_VERSION}.img"
2019-01-05 20:58:18 +01:00
BOOT="/mnt/boot"
ROOT="/mnt/root"
2019-10-01 22:01:26 +02:00
BUILD_PATH="${INSTALL_PATH}/build"
2019-01-05 20:58:18 +01:00
ARM_VERSION="armv7hl"
# assign function for building image of TARGET ( rpi, odroid )
2019-10-01 22:01:26 +02:00
case ${TARGET} in #NOTE2 : Why isn't it inside the sourced file ? Inside the .cfg ? It will make the code more flexible.
"bananaPro")
CREATEIMG="createbproimage"
;;
"odroid")
CREATEIMG="createxu3image"
;;
"rpi")
CREATEIMG="createrpiimage"
;;
*)
error "No Target : ${TARGET}"
exit 1
;;
2018-07-17 11:18:06 +02:00
esac
2019-10-01 22:01:26 +02:00
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}"
2018-06-09 16:15:50 +02:00
2018-12-07 20:38:32 +01:00
# Defining default image size to 7 go
2019-10-01 22:01:26 +02:00
if [[ "${IMAGE_SIZE}" -lt 7 ]] || [[ "${IMAGE_SIZE}" -gt 128 ]]; then
IMAGE_SIZE=7
fi
2018-12-07 20:38:32 +01:00
# change dir to install path and create it if not existing
2019-10-01 22:01:26 +02:00
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
2018-12-07 20:38:32 +01:00
#if no parameters then display help message
2019-10-01 22:01:26 +02:00
if [ -z ${OPT} ]; then
OPT="--help"
fi
2019-10-01 22:01:26 +02:00
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
2018-12-07 20:38:32 +01:00
2019-10-01 22:01:26 +02:00
if ! [ -z ${ERRORN} ]; then
warning "Some errors occurs : ${ERRORN} errors"
2018-08-04 00:14:36 +02:00
fi