diff --git a/create_arm_img_urpmi.sh b/create_arm_img_urpmi.sh index 6d08993..5bc6ebe 100644 --- a/create_arm_img_urpmi.sh +++ b/create_arm_img_urpmi.sh @@ -309,17 +309,101 @@ function createImageWrap() BOOTFS="ext4" fi formatpartitions ${BOOTFS} ext4 - copyingsystem + return 0 +} + + +function 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 ${ERR_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 ${ERR_1} + fi + + loopingImage + + bunrningBootloader + if [ ${?} -ne 0 ]; then + error "line ${LINENO} error in the process ${CONFIG_PATH}/specialFunctions.sh ." + exit ${ERR_1} + fi + + info "making partitions" + echo -e "${FDISK_SCRIPT}" | /sbin/fdisk ${DEVICE} + + # Activate loop device + info "device to detach ${DEVICE}" + /sbin/losetup -d "${DEVICE}" + DEVICE=$(/sbin/partx -va "${INSTALL_PATH}/${IMAGE}" | /bin/grep -m 1 -E -o '/dev/loop.?') + info "New attached device ${DEVICE}" + info "partitions list:" + info "$(/sbin/partx -v "${INSTALL_PATH}/${IMAGE}")" + if [ 1 -eq ${SEPARATE_BOOT_PARTITION} ]; then + BOOTP="${DEVICE}p1" + ROOTP="${DEVICE}p2" + else + ROOTP="${DEVICE}p1" + fi + return 0 +} + + +function loopingImage() +{ + title "Looping image ..." + + # Mettre en place et contrôler des périphériques boucle. + # -f, --find trouver le premier périphérique inutilisé + # --show afficher le nom du périphérique après configuration (avec -f) + DEVICE=$(/sbin/losetup -f --show "${INSTALL_PATH}/${IMAGE}") + + return 0 +} + + +function formatpartitions() +{ + info "Formatting partitions" + if [ 1 -eq ${SEPARATE_BOOT_PARTITION} ]; then + 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 ${ERR_1} + fi + BOOT_UUID=$(blkid -s UUID -o value UUID "${BOOTP}") + info "Boot UUID: ${BOOT_UUID}" + 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 ${ERR_1} + fi + ROOT_UUID=$(blkid -s UUID -o value UUID "${ROOTP}") + info "Root UUID: ${ROOT_UUID}" + return 0 } function copyingsystem() { - mountImage - - mkfstab - info "Generate extlinux if extlinux.conf exists." if [ -e "${CONFIG_PATH}/extlinux.conf" ]; then info "\tFound extlinux.conf" @@ -361,38 +445,13 @@ function copyingsystem() fi copyingcommon - # Syncing devices before unmounting - /usr/bin/sync - - if [ 1 -eq ${SEPARATE_BOOT_PARTITION} ]; then - /usr/bin/umount "${BOOT}" - if [ ${?} -eq 0 ]; then - /bin/rmdir "${BOOT}" - else - error "line ${LINENO} error unmounting ${BOOT}: exiting" - exit ${ERR_1} - fi - fi - /usr/bin/umount "${ROOT}" - if [ ${?} -eq 0 ]; then - /bin/rmdir "${ROOT}" - else - error "line ${LINENO} error unmounting ${ROOT}: exiting" - exit ${ERR_1} - fi - /usr/sbin/partx -d "${DEVICE}" - if [ ${?} -ne 0 ]; then - error "line ${LINENO} warning : error unmounting ${DEVICE} " - exit ${ERR_1} - fi - warning "You can now burn the image ( ${INSTALL_PATH}/${IMAGE} ) on SD card" return 0 } -function mountImage(){ +function mountPartitions(){ info "mounting partitions, making mountpoint if necessary" if [ 1 -eq ${SEPARATE_BOOT_PARTITION} ]; then @@ -425,6 +484,72 @@ function mountImage(){ } +function unmountingPartitions() +{ + title "Unmounting partitions..." + + # Syncing devices before unmounting + /usr/bin/sync + + if [ 1 -eq ${SEPARATE_BOOT_PARTITION} ]; then + /usr/bin/umount "${BOOT}" + if [ ${?} -eq 0 ]; then + /bin/rmdir "${BOOT}" + else + error "line ${LINENO} error unmounting ${BOOT}: exiting" + exit ${ERR_1} + fi + fi + + /usr/bin/umount "${ROOT}" + if [ ${?} -eq 0 ]; then + /bin/rmdir "${ROOT}" + else + error "line ${LINENO} error unmounting ${ROOT}: exiting" +# exit ${ERR_1} + fi + + return 0 +} + + +function unloopingImage(){ + title "Unlooping image..." + # Syncing devices before unmounting + /usr/bin/sync + + if [ 1 -eq ${SEPARATE_BOOT_PARTITION} ]; then + /usr/sbin/partx -d "${BOOTP}" + if [ ${?} -ne 0 ]; then + error "line ${LINENO} warning : error unmounting ${BOOTP} " + # exit ${ERR_1} + fi + /usr/sbin/partx -d "${ROOTP}" + if [ ${?} -ne 0 ]; then + error "line ${LINENO} warning : error unmounting ${ROOTP} " + # exit ${ERR_1} + fi + else + /usr/sbin/partx -d "${ROOTP}" + if [ ${?} -ne 0 ]; then + error "line ${LINENO} warning : error unmounting ${ROOTP} " + # exit ${ERR_1} + fi + fi + + # [root@jabztop mageia4arm (master)]# losetup -l -O NAME,BACK-FILE -n + # /dev/loop0 /home/jibz/workspaces/mageia4arm/build/Mageia-7-bananaPro1.img (deleted) + info "Looped devices to unmount : $(losetup -l -O NAME,BACK-FILE -n | grep "${IMAGE}" | cut -d ' ' -f 1 ) " + + for LOOP in $(losetup -l -O NAME,BACK-FILE -n | grep "${IMAGE}" | cut -d ' ' -f 1 ) ; do + info "removing ${LOOP}" + losetup -d "${LOOP}" + done + + return 0 +} + + # Copying files common to all systems function copyingcommon() { @@ -436,35 +561,6 @@ function copyingcommon() } -function formatpartitions() -{ - info "Formatting partitions" - if [ 1 -eq ${SEPARATE_BOOT_PARTITION} ]; then - 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 ${ERR_1} - fi - BOOT_UUID=$(blkid -s UUID -o value UUID "${BOOTP}") - info "Boot UUID: ${BOOT_UUID}" - 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 ${ERR_1} - fi - ROOT_UUID=$(blkid -s UUID -o value UUID "${ROOTP}") - info "Root UUID: ${ROOT_UUID}" - - return 0 -} - - function mkfstab() { title "making /etc/fstab" @@ -480,101 +576,13 @@ function mkfstab() } -function 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 ${ERR_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 ${ERR_1} - fi - DEVICE=$(/sbin/losetup -f --show "${INSTALL_PATH}/${IMAGE}") - - bunrningBootloader - if [ ${?} -ne 0 ]; then - error "line ${LINENO} error in the process ${CONFIG_PATH}/specialFunctions.sh ." - exit ${ERR_1} - fi - - info "making partitions" - echo -e "${FDISK_SCRIPT}" | /sbin/fdisk ${DEVICE} - - # Activate loop device - info "device to detach ${DEVICE}" - /sbin/losetup -d "${DEVICE}" - DEVICE=$(/sbin/partx -va "${INSTALL_PATH}/${IMAGE}" | /bin/grep -m 1 -E -o '/dev/loop.?') - info "New attached device ${DEVICE}" - info "partitions list:" - info "$(/sbin/partx -v "${INSTALL_PATH}/${IMAGE}")" - if [ 1 -eq ${SEPARATE_BOOT_PARTITION} ]; then - BOOTP="${DEVICE}p1" - ROOTP="${DEVICE}p2" - else - ROOTP="${DEVICE}p1" - fi - return 0 -} - - -function unmounting() -{ - title "Unmounting..." - - # Unmounting /dev /proc /sys in chroot - 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 ${ERR_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 ${ERR_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 ${ERR_1} - fi - fi - - # [root@jabztop mageia4arm (master)]# losetup -l -O NAME,BACK-FILE -n - # /dev/loop0 /home/jibz/workspaces/mageia4arm/build/Mageia-7-bananaPro1.img (deleted) - info "Looped devices to unmount : $(losetup -l -O NAME,BACK-FILE -n | grep "${IMAGE}" | cut -d ' ' -f 1 ) " - - for LOOP in $(losetup -l -O NAME,BACK-FILE -n | grep "${IMAGE}" | cut -d ' ' -f 1 ) ; do - info "removing ${LOOP}" - losetup -d "${LOOP}" - done - - return 0 -} - - # cleaning build space function clean() { title "Cleaning" - unmounting + unmountingPartitions + unloopingImage # Removing old Build directory if [ -d "${BUILD_PATH}" ]; then @@ -898,15 +906,18 @@ case ${OPT} in exit ${ERR_NO_SPACE} fi fi - createchroot + createImageWrap #Create the empty .img + createchroot #Check qemu and activate it addmedia updatemirror - installbasesystem - mkfstab + installbasesystem #Generate the rootfs, rootfiles, ... + mkfstab preparechroot jumpchroot - createImageWrap - unmounting + mountPartitions + copyingsystem + unmountingPartitions + unloopingImage ;; "createchroot") createchroot