Radix cross Linux Build System

Cross-platform build system is designed to build distributions of different operating systems for a set of target devices

39 Commits   2 Branches   2 Tags
Index: write-efiboot-image
===================================================================
--- write-efiboot-image	(nonexistent)
+++ write-efiboot-image	(revision 5)
@@ -0,0 +1,770 @@
+#!/bin/bash
+
+CWD=`pwd`
+
+program=`basename $0`
+sbindir=`cd $(dirname ${BASH_SOURCE[0]}) >/dev/null 2>&1 && pwd`
+
+# 13 = permission denied (should be root)
+# 92 = Cannot create '/tmp/...' directory
+EXITSTATUS=0
+
+################################################################
+#
+# TMPDIR & signal handlers:
+#
+if [ -z "${DISTRO_NAME}" ] ; then
+  DISTRO_NAME='radix'
+fi
+
+umask 022
+if [ ! -z "${TMPDIR}" ] ; then
+  export TMPDIR
+elif [ ! -d "${TMPDIR}" -o ! -w "${TMPDIR}" ] ; then
+  if [ -d "${HOME}/tmp" -a -w "${HOME}/tmp" ] ; then
+    export TMPDIR="${HOME}/tmp"
+  elif [ -d "/tmp" -a -w "/tmp" ] ; then
+    export TMPDIR="/tmp"
+  fi
+fi
+TMP=$(mkdir -p ${TMPDIR}/${DISTRO_NAME} && mktemp -d -p ${TMPDIR}/${DISTRO_NAME} $program.XXXXXXXX) || { echo "Cannot create '/tmp/...' directory" ; exit 92; }
+MNT=/mnt
+if [ ! -f /etc/system-installer ] ; then
+  if [ ! -z "${TMPDIR}" ] ; then
+    mkdir -p ${TMPDIR}/${DISTRO_NAME}/mnt
+    MNT=${TMPDIR}/${DISTRO_NAME}/mnt
+  else
+    mkdir -p /tmp/${DISTRO_NAME}/mnt
+    MNT=/tmp/${DISTRO_NAME}/mnt
+  fi
+fi
+
+trap 'for dir in "`find ${MNT} -type d -mindepth 1 -maxdepth 1`" ; do \
+        umount ${dir} 2> /dev/null ; \
+      done ; \
+      rm -rf ${TMP} ; \
+      clear ; \
+      head -c 100 /dev/zero | tr "\0" "\n" ; \
+      echo "ERROR: $program - has been terminated." ; \
+      echo "" ; \
+      exit 1' INT TERM
+
+#
+# Normal exit:
+#
+trap 'for dir in "`find ${MNT} -type d -mindepth 1 -maxdepth 1`" ; do \
+        umount ${dir} 2> /dev/null ; \
+      done ; \
+      rm -rf ${TMP} ; \
+      exit 0' EXIT
+#
+################################################################
+
+
+DIALOG=
+export DIALOGRC=${CWD}/.dialogrc
+DDOUTPUT=${TMP}/dd-output.$$
+
+VERBOSE=no
+
+FDISK=`PATH=/sbin:/usr/sbin:$PATH which fdisk`
+if [ "`basename ${FDISK}`" != "fdisk" ] ; then
+  echo "ERROR: fdisk utility is not found in the system"
+  exit 1
+fi
+
+PARTPROBE=`PATH=/sbin:/usr/sbin:$PATH which partprobe`
+if [ "`basename ${PARTPROBE}`" != "partprobe" ] ; then
+  PARTPROBE=
+fi
+
+usage() {
+  cat <<EOF
+
+Usage: ${program} [options] <DEVICE>
+
+options:
+    -e, --efifs-image <efi32fs-image> - EFI filesystem image;
+    -r, --rootfs-image <ext4fs-image> - ROOT filesystem image;
+    -s, --spase <SIZE>                - SIZE reserved for other partitions,
+                                        for example, home file system.
+                                        Default SIZE=1G;
+    -v, --verbose                     - Enable verbose output;
+    -d, --dialog                      - Enable DIALOG to show progress;
+    -h, --help                        - Display this information.
+
+DEVICE can be a regular file or block device such as /dev/sda, /dev/loop0, etc...
+
+EOF
+}
+
+check_current_user() {
+  msg=$1
+  if [ "$EUID" != "0" ] ; then
+    if [ "x${msg}" != "x" ] ; then
+      echo "ERROR: ${msg}"
+    else
+      echo "ERROR: ${program} - must be run by superuser"
+    fi
+    EXITSTATUS=13
+    exit $EXITSTATUS
+  fi
+}
+
+
+################################################################
+#
+# show_progress() - print progress without DIALOG.
+#
+#   arguments:
+#   ---------
+#     $1 - input stream in following format:
+#
+#     XXX
+#     $PCT
+#     \n\
+#       $line
+#     XXX
+#
+#     where $PCT  - persentage  [0 ... 100],
+#           $line - message printed before progress line.
+#
+show_progress() {
+  local printed=no
+
+  GAUGE_LENGHT=68
+
+  local PCT=
+
+  while read line ; do
+
+    local message=
+    local lines=0
+    local lenght=0
+    local ctx=0
+    local i=0
+
+    if [ "${line}" = "XXX" ] ; then
+      continue
+    fi
+    if [[ "${line}" =~ ^[0-9]*$ ]] ; then
+      PCT=${line}
+      continue
+    fi
+    while [ "${line:0:1}" = "n" ] ; do
+      line=${line:1}
+      message="${message}\n"
+      let 'lines += 1'
+    done
+
+    message="${message}${line}"
+    let 'lines += 1'
+
+    let 'lenght = 3 + GAUGE_LENGHT + 6'
+    let 'lines += 3'
+
+    if [ "${printed}" = "yes" ] ; then
+      while [ ${i} -lt ${lines} ] ; do
+        # Return back and cleaning line by line:
+        printf "\r\033[K\033[1A"
+        let 'i +=1'
+      done
+      i=0
+    fi
+
+    echo -e "${message}"
+    printf "\n  ["
+
+    let 'ctx = GAUGE_LENGHT * PCT / 100'
+
+    while [ $ctx -gt 0 ] ; do
+      printf "\u2588"
+      let 'ctx -= 1'
+      let 'i += 1'
+    done
+
+    while [ $i -lt ${GAUGE_LENGHT} ] ; do
+      printf " "
+      let 'i += 1'
+    done
+
+    printf "] %3d%%\n\n" $PCT
+
+    printed=yes
+
+  done < "${1:-/dev/stdin}"
+}
+
+
+################################################################
+#
+# waitdd() - waiting for DD and display progress.
+#
+#   arguments:
+#   ---------
+#     $1 - PID
+#     $2 - DD output file
+#     $3 - Size of input stream
+#     $4 - Dialog title
+#
+waitdd() {
+
+  local pid=$1
+  local ddout=$2
+  local isize=$3
+  local title=$4
+  local PCT=0
+
+  ( while [ "x`ps -eo pid | grep $pid`" != "x" ] ; do
+      kill -USR1 "$pid" 2>/dev/null
+      line=`tail -n1 $ddout | grep "bytes"`
+      bytes=`echo "$line" | cut -f 1 -d ' '`
+      if [ "x$bytes" != "x" ] ; then
+        let "PCT = bytes * 100 / isize"
+      fi
+      cat << EOF
+XXX
+$PCT
+\n\
+  $line
+XXX
+EOF
+      usleep 300
+    done
+    if [ "x`ps -eo pid | grep $pid`" = "x" ] ; then
+      cat << EOF
+XXX
+100
+\n\
+  Written $isize bytes
+XXX
+EOF
+    fi
+  ) | if [ "x${DIALOG}" = "x" ] ; then
+        show_progress
+      else
+        ${DIALOG} --colors \
+                  --backtitle "\Z7Radix\Zn \Z1cross\Zn\Z7 Linux\Zn" \
+                  --title " \Z0${title}\Zn " --gauge "\n" 8 74 0
+      fi
+}
+
+
+################################################################
+# Disk Geometry:
+#
+bytes=
+sectors=
+unit_size=
+log_sector_size=
+phy_sector_size=
+alignment=4096
+format="512N"
+#
+#   Format | logical sector size | physical sector size
+#  --------+---------------------+----------------------
+#     512N |         512         |          512
+#  --------+---------------------+----------------------
+#     512E |         512         |         4096
+#  --------+---------------------+----------------------
+#    4096N |        4096         |         4096
+#  --------+---------------------+----------------------
+#
+
+disk_size_in_bytes() {
+  disk=$1
+  echo "`LANG=en_US.UTF-8 ${FDISK} -l $disk`" | while read -r line ; do
+    found=`echo "$line" | grep "^Disk $disk"`
+    if [ "$found" != "" ] ; then
+      bytes=`echo $found | sed 's,.* \([0-9]*\) bytes.*,\1,'`
+      echo "$bytes"
+      break
+    fi
+  done
+}
+
+disk_size_in_sectors() {
+  disk=$1
+  echo "`LANG=en_US.UTF-8 ${FDISK} -l $disk`" | while read -r line ; do
+    found=`echo "$line" | grep "^Disk $disk"`
+    if [ "$found" != "" ] ; then
+      sectors=`echo $found | sed 's,.* \([0-9]*\) sectors$,\1,'`
+      echo "$sectors"
+      break
+    fi
+  done
+}
+
+disk_unit_size() {
+  disk=$1
+  echo "`LANG=en_US.UTF-8 ${FDISK} -l $disk`" | while read -r line ; do
+    found=`echo "$line" | grep "^Unit"`
+    if [ "$found" != "" ] ; then
+      unit_size=`echo $found | sed 's,.*= \([0-9]*\) bytes$,\1,'`
+      echo "$unit_size"
+      break
+    fi
+  done
+}
+
+disk_log_sector_size() {
+  disk=$1
+  echo "`LANG=en_US.UTF-8 ${FDISK} -l $disk`" | while read -r line ; do
+    found=`echo "$line" | grep '^Sector size'`
+    if [ "$found" != "" ] ; then
+      log_sector_size=`echo $found | sed 's,.* \([0-9]*\) bytes / \([0-9]*\) bytes$,\1,'`
+      echo "$log_sector_size"
+      break
+    fi
+  done
+}
+
+disk_phy_sector_size() {
+  disk=$1
+  echo "`LANG=en_US.UTF-8 ${FDISK} -l $disk`" | while read -r line ; do
+    found=`echo "$line" | grep '^Sector size'`
+    if [ "$found" != "" ] ; then
+      phy_sector_size=`echo $found | sed 's,.* \([0-9]*\) bytes / \([0-9]*\) bytes$,\2,'`
+      echo "$phy_sector_size"
+      break
+    fi
+  done
+}
+
+disk_geometry() {
+  disk=$1
+
+  bytes=`disk_size_in_bytes $disk`
+  sectors=`disk_size_in_sectors $disk`
+  unit_size=`disk_unit_size $disk`
+  log_sector_size=`disk_log_sector_size $disk`
+  phy_sector_size=`disk_phy_sector_size $disk`
+
+  if [ $unit_size -eq $alignment ] ; then
+    # Copy of GPT at end of disk:
+    let "sectors = sectors - 5"
+  else
+    # Copy of GPT at end of disk:
+    let "sectors = sectors - 33"
+  fi
+
+  if [ $phy_sector_size -eq $alignment ] ; then
+    if [ $log_sector_size -lt $phy_sector_size ] ; then
+      format="512E"
+    else
+      format="4096N"
+    fi
+  else
+    format="512N"
+  fi
+}
+#
+# End of Disk Geometry:
+################################################################
+
+
+DEVICE=
+EFI32FS_IMAGE=
+EXT4FS_IMAGE=
+
+efi32fs_size_in_bytes=
+ext4fs_size_in_bytes=
+
+#
+# Size reserved for home file system:
+#
+space_size="1G"
+space_size_in_bytes=
+
+disk_size_in_bytes=
+
+#
+# Parse options:
+#
+while [ $# -ne 0 ] ; do
+  if [ "$1" = "-h" -o "$1" = "--help" ] ; then
+    usage
+    exit 0
+  elif [ "$1" = "-v" -o "$1" = "--verbose" ] ; then
+    VERBOSE=yes
+    shift 1
+  elif [ "$1" = "-d" -o "$1" = "--dialog" ] ; then
+    DIALOG=dialog
+    shift 1
+  elif [ "$1" = "-e" -o "$1" = "--efifs-image" ] ; then
+    if [ "x$2" = "x" ] ; then
+      echo "ERROR: EFI filesystem image is not specified"
+      exit 1
+    fi
+    EFI32FS_IMAGE="$2"
+    shift 2
+  elif [ "$1" = "-r" -o "$1" = "--rootfs-image" ] ; then
+    if [ "x$2" = "x" ] ; then
+      echo "ERROR: ROOT filesystem image is not specified"
+      exit 1
+    fi
+    EXT4FS_IMAGE="$2"
+    shift 2
+  elif [ "$1" = "-s" -o "$1" = "--space" ] ; then
+    if [ "$2" = "" ] ; then
+      echo "ERROR: Space size for additional partitions is not specified"
+      usage
+      exit 1
+    fi
+    space_size="$2"
+    if [ `echo "${space_size}" | grep '[Mm]'` ] ; then
+      size=`echo "${space_size}" | sed 's/^[ \t]*//;s/[ \t]*$//;s/[a-zA-Z]*//g'`
+      size=`echo "scale=1; $size * 1048576" | bc`
+      prec=`echo "${size}" | cut -f2 -d'.'` 
+      size=`echo "${size}" | cut -f1 -d'.'`
+      if [ $prec -gt 5 ] ; then
+        let "size = size + 1"
+      fi
+      space_size_in_bytes=$size
+    elif [ `echo "${space_size}" | grep '[Gg]'` ] ; then
+      size=`echo "${space_size}" | sed 's/^[ \t]*//;s/[ \t]*$//;s/[a-zA-Z]*//g'`
+      size=`echo "scale=1; $size * 1073741824" | bc`
+      prec=`echo "${size}" | cut -f2 -d'.'` 
+      size=`echo "${size}" | cut -f1 -d'.'`
+      if [ $prec -gt 5 ] ; then
+        let "size = size + 1"
+      fi
+      space_size_in_bytes=$size
+    else
+      space_size_in_bytes=`echo "${space_size}" | sed 's/^[ \t]*//;s/[ \t]*$//;s/[a-zA-Z]*//g'`
+    fi
+    if [ `echo "${space_size_in_bytes}" | grep "[^0-9]"` ] ; then
+      echo "ERROR: Wrong space size for additional partitions"
+      usage
+      exit 1
+    fi
+    shift 2
+  else
+    if [ $# -lt 1 ] ; then
+      echo "ERROR: Target DEVICE is not specified"
+      exit 1
+    fi
+    DEVICE="$1"
+    break
+  fi
+done
+
+
+if [ "x${DEVICE}" = "x" ] ; then
+  echo "ERROR: Target DEVICE is not specified"
+  exit 1
+fi
+
+if [ "x${EFI32FS_IMAGE}" = "x" ] ; then
+  echo "ERROR: EFI filesystem image is not specified"
+  exit 1
+fi
+
+if [ "x${EXT4FS_IMAGE}" = "x" ] ; then
+  echo "ERROR: ROOT filesystem image is not specified"
+  exit 1
+fi
+
+#
+# Calculate space size in bytes if not specified in command line:
+#
+if [ "x${space_size_in_bytes}" = "x" ] ; then
+  if [ `echo "${space_size}" | grep '[Mm]'` ] ; then
+    size=`echo "${space_size}" | sed 's/^[ \t]*//;s/[ \t]*$//;s/[a-zA-Z]*//g'`
+    size=`echo "scale=1; $size * 1048576" | bc`
+    prec=`echo "${size}" | cut -f2 -d'.'` 
+    size=`echo "${size}" | cut -f1 -d'.'`
+    if [ $prec -gt 5 ] ; then
+      let "size = size + 1"
+    fi
+    space_size_in_bytes=$size
+  elif [ `echo "${space_size}" | grep '[Gg]'` ] ; then
+    size=`echo "${space_size}" | sed 's/^[ \t]*//;s/[ \t]*$//;s/[a-zA-Z]*//g'`
+    size=`echo "scale=1; $size * 1073741824" | bc`
+    prec=`echo "${size}" | cut -f2 -d'.'` 
+    size=`echo "${size}" | cut -f1 -d'.'`
+    if [ $prec -gt 5 ] ; then
+      let "size = size + 1"
+    fi
+    space_size_in_bytes=$size
+  else
+    space_size_in_bytes=`echo "${space_size}" | sed 's/^[ \t]*//;s/[ \t]*$//;s/[a-zA-Z]*//g'`
+  fi
+fi
+
+efi32fs_size_in_bytes=$(stat -c%s "${EFI32FS_IMAGE}")
+ext4fs_size_in_bytes=$(stat -c%s "${EXT4FS_IMAGE}")
+
+#
+# a multiple of 4096:
+#
+let "size = efi32fs_size_in_bytes / alignment * alignment"
+if [ ${size} -ne ${efi32fs_size_in_bytes} ] ; then
+  echo "ERROR: EFI filesystem image size must be a multiple of 4096"
+  exit 1
+fi
+
+let "size  = ext4fs_size_in_bytes  / alignment * alignment"
+if [ ${size} -ne ${ext4fs_size_in_bytes} ] ; then
+  echo "ERROR: EFI filesystem image size must be a multiple of 4096"
+  exit 1
+fi
+
+#
+# Calculate minimal size needed for input images:
+#
+disk_size_in_bytes=$(echo "${efi32fs_size_in_bytes} + ${ext4fs_size_in_bytes} + ${space_size_in_bytes}" | bc)
+disk_size_in_bytes=$(echo "${disk_size_in_bytes} + 512*2048 + 512*33" | bc)
+let "disk_size_in_bytes = disk_size_in_bytes / 512 * 512"
+
+
+if [ -b "${DEVICE}" ] ; then
+  check_current_user "${program} should be run by superuser: '${DEVICE}' is not a regular file"
+elif [ ! -f "${DEVICE}" ] ; then
+  if [ "x${DIALOG}" = "x" ] ; then
+    echo -e "\nCreating an empty disk image..."
+  fi
+  cnt=$(echo "${disk_size_in_bytes} / 512" | bc)
+  rm -f ${DDOUTPUT}
+  LANG=en_US.UTF-8 dd if=/dev/zero of=${DEVICE} of=disk bs=512 count=${cnt} >> ${DDOUTPUT} 2>&1 & \
+    waitdd $! ${DDOUTPUT} ${disk_size_in_bytes} "Create empty disk image"
+  rm -f ${DDOUTPUT}
+fi
+
+
+efi32fs_start_sector=2048
+efi32fs_end_sector=
+ext4fs_start_sector=
+ext4fs_end_sector=
+space_start_sector=
+space_end_sector=
+
+#
+# https://uefi.org/specifications ->
+#  -> https://uefi.org/sites/default/files/resources/UEFI_Spec_2_9_2021_03_18.pdf
+#
+# If the block size is 512, the First Usable LBA must be greater than or equal to 34
+# (allowing 1 block for the Protective MBR, 1 block for the Partition Table Header, and
+# 32 blocks for the GPT Partition Entry Array); if the logical block size is 4096, the
+# First Useable LBA must be greater than or equal to 6 (allowing 1 block for the Protective
+# MBR, 1 block for the GPT Header, and 4 blocks for the GPT Partition Entry Array).
+#
+# Backup Partition Table requires 33 blocks in case block size is 512 bytes and 5 blocks
+# in case block size is 4096 bytes (Protective MBR has no copy at end of disk).
+#
+
+#
+# Get size of disk:
+#
+disk_geometry ${DEVICE}
+
+if [ "${VERBOSE}" = "yes" ] ; then
+  if [ "x${DIALOG}" != "x" ] ; then
+    clear
+  fi
+  echo ""
+  echo "Disk Geometry:"
+  echo "-------------"
+  echo "           bytes = $bytes"
+  if [ $unit_size -eq $alignment ] ; then
+    echo "         sectors = $sectors + 5"
+  else
+    echo "         sectors = $sectors + 33"
+  fi
+  echo "       unit_size = $unit_size"
+  echo " log_sector_size = $log_sector_size"
+  echo " phy_sector_size = $phy_sector_size"
+  echo "       alignment = $alignment"
+  echo "          format = $format"
+  echo ""
+fi
+
+if [ ${disk_size_in_bytes} -gt ${bytes} ] ; then
+  echo "ERROR: Not enough space on '${DEVICE}' device"
+  exit 1
+fi
+
+if [ $unit_size -eq $alignment ] ; then
+  efi32fs_start_sector=256
+fi
+
+let "efi32fs_size_in_sectors = efi32fs_size_in_bytes / unit_size"
+let "ext4fs_size_in_sectors  = ext4fs_size_in_bytes  / unit_size"
+
+#
+# Calculation of the initial and final sectors of partitions:
+#
+let "efi32fs_end_sector  = efi32fs_start_sector + ( efi32fs_size_in_bytes / unit_size - 1 )"
+let "ext4fs_start_sector = efi32fs_end_sector   + 1"
+let "ext4fs_end_sector   = ext4fs_start_sector  + ( ext4fs_size_in_bytes / unit_size - 1 )"
+
+left=
+let "left = sectors - ext4fs_end_sector"
+need=
+let "need = space_size_in_bytes / unit_size"
+
+if [ $left -lt $need ] ; then
+  echo "WARNING: Not enough space for additional partitions"
+fi
+
+if [ ${need} -gt 0 ] ; then
+  let "space_start_sector = ext4fs_end_sector + 1"
+  let "space_end_sector   = sectors - 1"
+else
+  space_start_sector=-1
+  space_end_sector=-1
+fi
+
+if [ "${VERBOSE}" = "yes" ] ; then
+  echo ""
+  echo "Disk Partioning:"
+  echo "---------------"
+  echo " efi32fs_size_in_bytes   = $efi32fs_size_in_bytes"
+  echo " ext4fs_size_in_bytes    = $ext4fs_size_in_bytes"
+  echo " space_size_in_bytes     = $space_size_in_bytes"
+  echo ""
+  echo " efi32fs_size_in_sectors = $efi32fs_size_in_sectors"
+  echo " efi32fs_start_sector    = $efi32fs_start_sector"
+  echo " efi32fs_end_sector      = $efi32fs_end_sector"
+  echo ""
+  echo " ext4fs_size_in_sectors  = $ext4fs_size_in_sectors"
+  echo " ext4fs_start_sector     = $ext4fs_start_sector"
+  echo " ext4fs_end_sector       = $ext4fs_end_sector"
+  echo ""
+  echo " space_start_sector      = $space_start_sector"
+  echo " space_end_sector        = $space_end_sector"
+  echo ""
+fi
+
+
+UEFI_TYPE=C12A7328-F81F-11D2-BA4B-00A0C93EC93B
+UEFI_UUID=eaf0eef1-f13a-7565-6669-203aefe0f0f2
+UEFI_NAME=uefi
+ROOT_TYPE=0FC63DAF-8483-4772-8E79-3D69D8477DE4
+ROOT_UUID=eaf0eef1-f13a-726F-6F74-203aefe0f0f2
+ROOT_NAME=root
+
+
+clean_disk() {
+  disk=$1
+  LANG=en_US.UTF-8 ${FDISK} --wipe=always --wipe-partition=always $disk 2>/dev/null 1>/dev/null <<EOF
+g
+w
+EOF
+}
+
+#
+# NOTE: номер первого (и единственного раздела не запрашивается):
+#
+create_efi_pattition() {
+  disk=$1
+  LANG=en_US.UTF-8 ${FDISK} --wipe=always --wipe-partition=always $disk 2>/dev/null 1>/dev/null <<EOF
+n
+1
+${efi32fs_start_sector}
+${efi32fs_end_sector}
+t
+${UEFI_TYPE}
+x
+n
+${UEFI_NAME}
+u
+${UEFI_UUID}
+r
+w
+EOF
+}
+
+create_root_pattition() {
+  disk=$1
+  LANG=en_US.UTF-8 ${FDISK} --wipe=always --wipe-partition=always $disk 2>/dev/null 1>/dev/null <<EOF
+n
+2
+${ext4fs_start_sector}
+${ext4fs_end_sector}
+t
+2
+${ROOT_TYPE}
+x
+n
+2
+${ROOT_NAME}
+u
+2
+${ROOT_UUID}
+r
+w
+EOF
+}
+
+#
+# Move the shell prompt to last line of Terminal:
+#
+if [ "x${DIALOG}" != "x" ] ; then
+  echo -en "\033[$(tput lines)B"
+fi
+
+if [ "x${DIALOG}" = "x" ] ; then
+  echo -e "\nDisk partitioning..."
+else
+  ${DIALOG} --colors \
+            --backtitle "\Z7Radix\Zn \Z1cross\Zn\Z7 Linux\Zn" \
+            --title " \Z0Disk partitioning...\Zn " \
+            --infobox "\n Please wait for partitions have been created.\n" 5 74
+fi
+
+clean_disk ${DEVICE}
+if [ "x${PARTPROBE}" != "x" ] ; then
+  ${PARTPROBE} ${DEVICE} 1>/dev/null 2>/dev/null
+fi
+
+create_efi_pattition ${DEVICE}
+if [ "x${PARTPROBE}" != "x" ] ; then
+  ${PARTPROBE} ${DEVICE} 1>/dev/null 2>/dev/null
+fi
+
+create_root_pattition ${DEVICE}
+if [ "x${PARTPROBE}" != "x" ] ; then
+  ${PARTPROBE} ${DEVICE} 1>/dev/null 2>/dev/null
+fi
+
+#
+# Write EFI boot image:
+#
+if [ "x${DIALOG}" = "x" ] ; then
+  echo -e "\nRecording the '`basename ${EFI32FS_IMAGE}`' image..."
+fi
+rm -f ${DDOUTPUT}
+LANG=en_US.UTF-8 \
+  dd if=${EFI32FS_IMAGE} of=${DEVICE} \
+     bs=${unit_size} count=${efi32fs_size_in_sectors} \
+     seek=${efi32fs_start_sector} conv=notrunc >> ${DDOUTPUT} 2>&1 & \
+    waitdd $! ${DDOUTPUT} ${efi32fs_size_in_bytes} "EFI boot image recording..."
+rm -f ${DDOUTPUT}
+
+sleep 1
+
+#
+# Write EXT4 rootfs image:
+#
+if [ "x${DIALOG}" = "x" ] ; then
+  echo -e "\nRecording the '`basename ${EXT4FS_IMAGE}`' image..."
+fi
+rm -f ${DDOUTPUT}
+LANG=en_US.UTF-8 \
+  dd if=${EXT4FS_IMAGE} of=${DEVICE} \
+     bs=${unit_size} count=${ext4fs_size_in_sectors} \
+     seek=${ext4fs_start_sector} conv=notrunc >> ${DDOUTPUT} 2>&1 & \
+    waitdd $! ${DDOUTPUT} ${ext4fs_size_in_bytes} "ROOT filesystem image recording..."
+rm -f ${DDOUTPUT}
+
+sleep 1
+
+if [ "x${DIALOG}" = "x" ] ; then
+  echo -e "\nEFI boot disk is written.\n"
+else
+  ${DIALOG} --colors \
+            --backtitle "\Z7Radix\Zn \Z1cross\Zn\Z7 Linux\Zn" \
+            --title " \Z0EFI Boot Disk is Complete\Zn " \
+            --infobox "\n Boot disk is written.\n" 5 74
+fi

Property changes on: write-efiboot-image
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property