Radix cross Linux

The main Radix cross Linux repository contains the build scripts of packages, which have the most complete and common functionality for desktop machines

452 Commits   2 Branches   1 Tag
Index: setup
===================================================================
--- setup	(nonexistent)
+++ setup	(revision 5)
@@ -0,0 +1,2687 @@
+#!/bin/bash
+
+program=`basename $0`
+sbindir=`cd $(dirname ${BASH_SOURCE[0]}) >/dev/null 2>&1 && pwd`
+
+# 13 = permission denied (should be root)
+# 14 = there is no '.pkglist' file
+# 15 = invalid target device
+# 16 = target device has not specified arter --root-dev option
+# 17 = source REPO directory is invalid
+# 18 = custom REPO directory has not specified by --repo option
+# 19 = target device too small
+# 20 = /sbin/fdisk returns bad status
+# 21 = cannot mount ROOT partition
+# 22 = cannot mount EFI partition
+# 92 = Cannot create '/tmp/...' directory
+# 93 = Unexpected program abort
+EXITSTATUS=0
+
+WHERE=${sbindir}/where-we-are
+
+#
+# Getting information about DISTRO:
+#
+push_err() {
+  message=$1
+  echo -n "$program: " >&2 ; echo "${message}" >&2
+}
+
+if [ ! -r /etc/os-release ] ; then
+  push_err "ERROR: /etc/os-release: There are no operating system information"
+  exit 1
+fi
+
+. /etc/os-release
+
+if [ ! -r /etc/${ID}-release ] ; then
+  push_err "ERROR: /etc/${ID}-release: There are no ${ID} distribution information"
+  exit 1
+fi
+
+. /etc/${ID}-release
+
+LOG_FILE=${LOG_FILE:-/var/log/${DISTRO_NAME}-${program}.log}
+
+DIALOG=${DIALOG:-/bin/dialog}
+
+push_log() {
+  message=$1
+  echo -n "[`LANG=en LANGUAGE=en date +'%d-%b-%Y %H:%M:%S'`] $program: " >> ${LOG_FILE}
+  echo    "${message}" >> ${LOG_FILE}
+}
+
+umask 022
+TMP=$(mkdir -p /tmp/${DISTRO_NAME} && mktemp -d -p /tmp/${DISTRO_NAME} $program.XXXXXXXX) || { echo "Cannot create '/tmp/...' directory" ; exit 92; }
+mkdir -p /tmp/${DISTRO_NAME}/mnt
+MNT=/tmp/${DISTRO_NAME}/mnt
+#
+# Clear screen on unexpected termination:
+#
+trap 'clear ; \
+      head -c 100 /dev/zero | tr "\0" "\n" ; \
+      echo "ERROR: $program - has been terminated." ; \
+      echo "" ; \
+      EXITSTATUS=93 ; \
+      ' INT TERM HUP QUIT
+#
+# This program cam mount filesystems to first level
+# directories relative to $MNT or directly to $MNT:
+#
+trap 'for dir in `find ${MNT} -type d -mindepth 1 -maxdepth 1` ; do \
+        umount $dir 2> /dev/null ; \
+      done ; \
+      umount ${MNT} 2> /dev/null ; \
+      rm -rf /tmp/${DISTRO_NAME} ; \
+      rm -f /etc/system-installer ; \
+      exit ${EXITSTATUS} ;\
+      ' EXIT
+
+
+check_current_user()
+{
+  echo "Radix System Setup" > /etc/system-installer
+
+  if [ "$EUID" != "0" ] ; then
+    $DIALOG --colors --clear \
+            --backtitle "\Z7${DISTRO_CAPTION}\Zn \Z1cross\Zn\Z7 Linux\Zn" \
+            --title " \Z0Setup:\Zn \Z1\ZbERROR\ZB\Zn " \
+            --msgbox "\n\Z4${program}\Zn - \Z1program should be run by root.\Zn\n" 7 74
+
+    push_log "ERROR: Program should be run by root"
+    push_log "Aborted due to an error"
+    push_err "ERROR: Program should be run by root"
+    EXITSTATUS=13
+    exit
+  fi
+}
+
+ask_exit_setup() {
+  cat > $TMP/exit-setup-help$$ << EOF
+
+ Do you want to terminate Radix System Installation?
+
+EOF
+
+  $DIALOG --colors --defaultno --clear \
+          --backtitle "\Z7${DISTRO_CAPTION}\Zn \Z1cross\Zn\Z7 Linux\Zn" \
+          --title " \Z0Setup:\Zn \Z4\ZbExit\ZB\Zn " \
+          --no-label "No" \
+          --yes-label "Ok" \
+          --yesno "$(cat $TMP/exit-setup-help$$)" 7 74
+  ret=$?
+  rm -f $TMP/exit-setup-help$$
+  if [ $ret -eq 0 ] ; then
+    push_log "Done"
+    exit
+  fi
+}
+
+fatal_error_dialog()
+{
+  local msg="${1}"
+  cat > $TMP/fatal-message$$ << EOF
+
+ ${msg}
+
+EOF
+
+  $DIALOG --colors --clear \
+          --backtitle "\Z7${DISTRO_CAPTION}\Zn \Z1cross\Zn\Z7 Linux\Zn" \
+          --title " \Z0Setup:\Zn \Z1\ZbERROR\ZB\Zn " \
+          --msgbox "$(cat $TMP/fatal-message$$)" 7 74
+}
+
+error_dialog()
+{
+  local msg="${1}"
+  cat > $TMP/error-message$$ << EOF
+
+ ${msg}
+
+EOF
+
+  $DIALOG --colors --clear \
+          --backtitle "\Z7${DISTRO_CAPTION}\Zn \Z1cross\Zn\Z7 Linux\Zn" \
+          --title " \Z0Setup:\Zn \Z1\ZbERROR\ZB\Zn " \
+          --no-label " Exit Setup " \
+          --yes-label " Continue " \
+          --yesno "$(cat $TMP/error-message$$)" 7 74
+  ret=$?
+  rm -f $TMP/error-message$$
+  if [ $ret -ne 0 ] ; then
+    exit
+  fi
+}
+
+welcome_setup()
+{
+  cat > $TMP/welcome-setup-rc$$ << EOF
+use_colors = ON
+shadow_color = (BLACK,BLACK,OFF)
+screen_color = (WHITE,BLACK,ON)
+use_shadow = OFF
+dialog_color = (WHITE,BLACK,OFF)
+title_color = (WHITE,BLACK,ON)
+border_color = (BLACK,BLACK,OFF)
+border2_color = (BLACK,BLACK,OFF)
+button_active_color = (WHITE,BLACK,ON)
+button_inactive_color = (WHITE,BLACK,OFF)
+button_key_active_color = (RED,BLACK,ON)
+button_key_inactive_color = (WHITE,BLACK,ON)
+button_label_active_color = (WHITE,BLACK,ON)
+button_label_inactive_color = (WHITE,BLACK,ON)
+EOF
+
+  cat > $TMP/welcome-setup-help$$ << EOF
+
+Version \Zb${DISTRO_FULL_VERSION}\Zn
+Copyright (c) 2009-`date +%Y`, Andrey V.Kosteltsev. All rights reserved.
+${DISTRO_HOME_URL}
+
+Built for ${HARDWARE_SPEC} [\Zb${HARDWARE}\Zn]
+Toolchain ${TOOLCHAIN_VERSION} [\Zb${TOOLCHAIN_NAME}\Zn]
+
+Now you can install \Zb${DISTRO_CAPTION}-${DISTRO_VERSION}\Zn to you hard drive or internal flash.
+
+Enjoy!
+
+EOF
+
+  DIALOGRC=$TMP/welcome-setup-rc$$ \
+  $DIALOG --colors --clear \
+          --backtitle "\Z7${DISTRO_CAPTION}\Zn \Z1cross\Zn\Z7 Linux\Zn" \
+          --title " Setup ${DISTRO_CAPTION} \Z1cross\Zn Linux " \
+          --no-label " Exit Setup " \
+          --yes-label " Continue " \
+          --yesno "$(cat $TMP/welcome-setup-help$$)" 16 74
+  ret=$?
+  rm -f $TMP/welcome-setup-help$$
+  if [ $ret -ne 0 ] ; then
+    exit
+  fi
+}
+
+usage() {
+ cat << EOF
+
+Usage: $program [options]
+
+$program - is used to install ${DISTRO_SPEC} from the 'repo' directory.
+
+  The 'repo' directory sould contains ${DISTRO_CAPTION} packages set with '.pkglist'
+  file at least for one HARDWARE. The ordinary structure of the 'repo'
+  directories should seems like following:
+
+    /var/lib/${DISTRO_NAME}/repo
+    ├── ${DISTRO_FULL_VERSION}
+        ├── TOOLCHAIN
+       ...  └── HARDWARE
+                ├── ...
+        │      ...
+        └── ${TOOLCHAIN_NAME}
+            └── ${HARDWARE}
+                ├── app
+                │   ├── bash-5.2.9-`echo ${TOOLCHAIN_NAME} | cut -f1 -d'-'`-radix-${DISTRO_VERSION}.tgz
+                │   ├── ...
+                │  ...
+                ├── base
+                │   ├── ...
+                │  ...
+               ...
+
+                └── .pkglist
+
+  where, /var/lib/${DISTRO_NAME}/repo/${DISTRO_FULL_VERSION}/${TOOLCHAIN_NAME}/${HARDWARE} - applicable
+  directory for current release.
+
+options:
+   -h | --help              - Display this information;
+   -r | --root-dev <DEVICE> - Target device to install [/dev/sda,
+                              /dev/mmcblk0, /dev/loop0, etc.];
+   --repo <DIR>             - Absolute path to the REPO source directory
+                              (Default: /var/lib/${DISTRO_NAME}/repo/${DISTRO_FULL_VERSION}/${TOOLCHAIN_NAME}/${HARDWARE}).
+                              The user defined absolute path to the REPO directory must match
+                              the standard pattern: '/custom-dir/VERSION/TOOLCHAIN/HARDWARE';
+
+  The /etc/${DISTRO_NAME}-rlease file contains detailed info about
+  setup parameters.
+
+EOF
+}
+
+#
+# Start installation:
+#
+push_log "Start of ${DISTRO_CAPTION}-${DISTRO_VERSION} installation"
+
+# Only root can execute:
+check_current_user
+
+device=
+version=${DISTRO_FULL_VERSION}
+toolchain=${TOOLCHAIN_NAME}
+hardware=${HARDWARE}
+repo=/var/lib/${DISTRO_NAME}/repo/${DISTRO_FULL_VERSION}/${TOOLCHAIN_NAME}/${HARDWARE}
+
+custom_repo=no
+
+current_device=
+current_root=
+rootfs_min_bytes=
+
+partition_table_type=o
+
+uefi_part_number=1
+root_part_number=1
+home_part_number=2
+swap_part_number=3
+
+uefi_bytes=
+if [ "${hardware}" = "baikal-m1" -o \
+     "${hardware}" = "intel-pc64" ] ; then
+  partition_table_type=g
+  uefi_bytes=268435456
+fi
+
+if [ "x${uefi_bytes}" != "x" ] ; then
+  root_part_number=2
+  home_part_number=3
+  swap_part_number=4
+fi
+
+uefi_start_sector=
+uefi_end_sector=
+root_bytes=
+root_start_sector=
+root_end_sector=
+home_bytes=
+home_start_sector=
+home_end_sector=
+swap_bytes=
+swap_start_sector=
+swap_end_sector=
+
+p=
+
+
+################################################################
+#
+# Disk Geometry functions:
+#
+
+# Disk /dev/vda: 20 GiB, 21474836480 bytes, 41943040 sectors
+# Sector size (logical/physical): 512 bytes / 512 bytes
+
+bytes=
+sectors=
+unit_size=
+log_sector_size=
+phy_sector_size=
+alignment=4096
+format="512N"
+start_sector=
+ram_bytes=
+#
+#   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
+    local found=`echo "${line}" | grep "^Disk ${disk}"`
+    if [ "x${found}" != "x" ] ; then
+      local 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
+    local found=`echo "${line}" | grep "^Disk ${disk}"`
+    if [ "x${found}" != "x" ] ; then
+      local 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
+    local found=`echo "${line}" | grep "^Unit"`
+    if [ "x${found}" != "x" ] ; then
+      local usize=`echo ${found} | sed 's,.*= \([0-9]*\) bytes$,\1,'`
+      echo "${usize}"
+      break
+    fi
+  done
+}
+
+disk_log_sector_size() {
+  disk=${1}
+  echo "`LANG=en_US.UTF-8 fdisk -l ${disk}`" | while read -r line ; do
+    local found=`echo "${line}" | grep '^Sector size'`
+    if [ "x${found}" != "x" ] ; then
+      local lsize=`echo ${found} | sed 's,.* \([0-9]*\) bytes / \([0-9]*\) bytes$,\1,'`
+      echo "${lsize}"
+      break
+    fi
+  done
+}
+
+disk_phy_sector_size() {
+  disk=${1}
+  echo "`LANG=en_US.UTF-8 fdisk -l ${disk}`" | while read -r line ; do
+    local found=`echo "${line}" | grep '^Sector size'`
+    if [ "x${found}" != "x" ] ; then
+      local psize=`echo ${found} | sed 's,.* \([0-9]*\) bytes / \([0-9]*\) bytes$,\2,'`
+      echo "${psize}"
+      break
+    fi
+  done
+}
+
+memory_size() {
+  echo "`LANG=en_US.UTF-8 free -b -w`" | while read -r line ; do
+    local found=`echo "${line}" | grep '^Mem'`
+    if [ "x${found}" != "x" ] ; then
+      local msize=`echo ${found} | tr -s ' ' | cut -f2 -d' '`
+      echo "${msize}"
+      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}`
+
+  ram_bytes=`memory_size`
+
+  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"
+      start_sector=2048
+    else
+      format="4096N"
+      start_sector=256
+    fi
+  else
+    format="512N"
+    start_sector=2048
+  fi
+}
+#
+# End of Disk Geometry functions.
+#
+################################################################
+
+################################################################
+#
+# Disk Format functions:
+#
+clean_disk()
+{
+  local disk=${1}
+  fdisk --wipe=always --wipe-partition=always ${disk} 1>/dev/null 2>/dev/null <<EOF
+${partition_table_type}
+w
+EOF
+}
+
+create_EFI_partition()
+{
+  local disk=${1}
+
+  local name="EFI System"
+  local guid="c12a7328-f81f-11d2-ba4b-00a0c93ec93b"
+  local type="ef"
+
+  uefi_start_sector=${start_sector}
+
+  let 'uefi_bytes = uefi_bytes / alignment * alignment'
+
+  let 'uefi_end_sector = uefi_start_sector + ( uefi_bytes / unit_size - 1 )'
+  let 'root_start_sector = uefi_end_sector + 1'
+
+  if [ "${partition_table_type}" = "g" ] ; then
+    fdisk --wipe=always --wipe-partition=always ${disk} 1>/dev/null 2>/dev/null <<EOF
+n
+$uefi_part_number
+$uefi_start_sector
+$uefi_end_sector
+t
+$guid
+x
+n
+$name
+r
+w
+EOF
+  else
+    fdisk --wipe=always --wipe-partition=always ${disk} 1>/dev/null 2>/dev/null <<EOF
+n
+p
+$uefi_part_number
+$uefi_start_sector
+$uefi_end_sector
+t
+$type
+w
+EOF
+  fi
+
+  mkfs.fat -F 32 -n UEFI ${disk}${p}1  2>/dev/null 1>/dev/null
+}
+
+create_ROOT_partition()
+{
+  local disk=${1}
+
+  local name="Linux filesystem"
+  local guid="0fc63daf-8483-4772-8e79-3d69d8477de4"
+  local type="83"
+
+  local half=
+  local third=
+  local GiB=1073741824
+  local MiB=1048576
+
+  if [ "${bytes}" -gt "${GiB}" ] ; then
+    half=`echo  "scale=0; ( $bytes / $GiB / 2 - 1 ) * $GiB" | bc`
+    third=`echo "scale=0; ( $bytes / $GiB / 3 + 1 ) * $GiB" | bc`
+  else
+    half=`echo  "scale=0; ( $bytes / $MiB / 2 - 1 ) * $MiB" | bc`
+    third=`echo "scale=0; ( $bytes / $MiB / 3 + 1 ) * $MiB" | bc`
+  fi
+
+  let 'half  =  half / alignment * alignment'
+  let 'third = third / alignment * alignment'
+
+  if [ "x${uefi_bytes}" = "x" ] ; then
+    root_start_sector=${start_sector}
+    if [ "${hardware}" = "leez-p710" ] ; then
+      root_start_sector=32768
+    fi
+  fi
+
+  if [ "${third}" -gt "${rootfs_min_bytes}" ] ; then
+    let 'root_end_sector = root_start_sector + ( third / unit_size - 1 )'
+    let 'home_start_sector = root_end_sector + 1'
+  elif [ "${half}" -gt "${rootfs_min_bytes}" ] ; then
+    let 'root_end_sector = root_start_sector + ( half / unit_size - 1 )'
+    let 'home_start_sector = root_end_sector + 1'
+  elif [ "${bytes}" -gt "${rootfs_min_bytes}" ] ; then
+    let 'root_end_sector = root_start_sector + ( rootfs_min_bytes / unit_size - 1 )'
+    let 'home_start_sector = root_end_sector + 1'
+  else
+    fatal_error_dialog "Target device too small. Exit ${program}."
+    push_log "ERROR: Target device too small"
+    push_log "Aborted due to an error"
+    push_err "ERROR: Target device too small"
+    EXITSTATUS=19
+    exit
+  fi
+
+  let 'root_bytes = ( root_end_sector - root_start_sector + 1 ) * log_sector_size'
+
+  if [ "${root_part_number}" -eq "1" ] ; then
+    if [ "${partition_table_type}" = "g" ] ; then
+      fdisk --wipe=always --wipe-partition=always ${disk} 1>/dev/null 2>/dev/null <<EOF
+n
+$root_part_number
+$root_start_sector
+$root_end_sector
+t
+$guid
+x
+n
+$name
+r
+w
+EOF
+    else
+      fdisk --wipe=always --wipe-partition=always ${disk} 1>/dev/null 2>/dev/null <<EOF
+n
+p
+$root_part_number
+$root_start_sector
+$root_end_sector
+t
+$type
+w
+EOF
+    fi
+  else
+    if [ "${partition_table_type}" = "g" ] ; then
+      fdisk --wipe=always --wipe-partition=always ${disk} 1>/dev/null 2>/dev/null <<EOF
+n
+$root_part_number
+$root_start_sector
+$root_end_sector
+t
+$root_part_number
+$guid
+x
+n
+$root_part_number
+$name
+r
+w
+EOF
+    else
+      fdisk --wipe=always --wipe-partition=always ${disk} 1>/dev/null 2>/dev/null <<EOF
+n
+p
+$root_part_number
+$root_start_sector
+$root_end_sector
+t
+$root_part_number
+$type
+w
+EOF
+    fi
+  fi
+}
+
+create_HOME_partition()
+{
+  local disk=${1}
+
+  local name="Linux filesystem"
+  local guid="0fc63daf-8483-4772-8e79-3d69d8477de4"
+  local type="83"
+
+  local left=
+  local octa=
+  local swap=
+  local GiB=1073741824
+  local MiB=1048576
+
+  let 'left = ( sectors - root_end_sector ) * unit_size'
+
+  if [ "x${home_start_sector}" != "x" -a "${left}" -gt "$GiB" ] ; then
+
+    let 'swap =  ram_bytes * 2 / alignment * alignment'
+
+    if [ "${bytes}" -gt "${GiB}" ] ; then
+      octa=`echo  "scale=0; $bytes / $GiB / 8 * $GiB" | bc`
+    else
+      octa=`echo  "scale=0; $bytes / $MiB / 8 * $MiB" | bc`
+    fi
+
+    let 'octa =  octa / alignment * alignment'
+
+    if [ "${octa}" -gt "${swap}" ] ; then
+      let 'left = ( left - swap ) / alignment * alignment'
+      swap_bytes=${swap}
+    elif [ "${octa}" -gt "${ram_bytes}" ] ; then
+      let 'left = ( left - ram_bytes ) / alignment * alignment'
+      swap_bytes=${ram_bytes}
+    else
+      swap_bytes=0
+      swap_start_sector=0
+    fi
+
+    if [ "${swap_bytes}" -gt "0" ] ; then
+      let 'home_end_sector = home_start_sector + ( left / unit_size - 1 )'
+      let 'swap_start_sector = home_end_sector + 1'
+    else
+      let 'home_end_sector = sectors - 1'
+    fi
+
+    let 'home_bytes = ( home_end_sector - home_start_sector + 1 ) * unit_size'
+
+    if [ "${partition_table_type}" = "g" ] ; then
+      fdisk --wipe=always --wipe-partition=always ${disk} 1>/dev/null 2>/dev/null <<EOF
+n
+$home_part_number
+$home_start_sector
+$home_end_sector
+t
+$home_part_number
+$guid
+x
+n
+$home_part_number
+$name
+r
+w
+EOF
+    else
+      fdisk --wipe=always --wipe-partition=always ${disk} 1>/dev/null 2>/dev/null <<EOF
+n
+p
+$home_part_number
+$home_start_sector
+$home_end_sector
+t
+$home_part_number
+$type
+w
+EOF
+    fi
+  else
+    home_bytes=0
+    home_start_sector=0
+    swap_bytes=0
+    swap_start_sector=0
+  fi
+}
+
+create_SWAP_partition()
+{
+  local disk=${1}
+
+  local name="Linux swap"
+  local guid="0657fd6d-a4ab-43c4-84e5-0933c84b4f4f"
+  local type="82"
+
+  if [ "${swap_bytes}" -gt "0" ] ; then
+    if [ "${partition_table_type}" = "g" ] ; then
+      fdisk --wipe=always --wipe-partition=always ${disk} 1>/dev/null 2>/dev/null <<EOF
+n
+$swap_part_number
+
+
+t
+$swap_part_number
+$guid
+x
+n
+$swap_part_number
+$name
+r
+w
+EOF
+    else
+      fdisk --wipe=always --wipe-partition=always ${disk} 1>/dev/null 2>/dev/null <<EOF
+n
+p
+$swap_part_number
+
+
+t
+$swap_part_number
+$type
+w
+EOF
+    fi
+  fi
+}
+
+umount_target_partitions()
+{
+  local disk=${1}
+  for dev in `mount | grep "^${disk}" | tr -s ' ' | cut -f1 -d' '` ; do
+    umount ${dev} 2>/dev/null 1>/dev/null
+  done
+}
+
+format_disk()
+{
+  local dev=${1}
+
+  umount_target_partitions "${dev}"
+
+  clean_disk "${dev}"
+  if [ "x${uefi_bytes}" != "x" ] ; then
+    create_EFI_partition "${dev}"
+  fi
+
+  create_ROOT_partition "${dev}"
+  create_HOME_partition "${dev}"
+  create_SWAP_partition "${dev}"
+}
+
+format_by_fdisk()
+{
+  local disk=${1}
+  local fdiskprg=`which fdisk 2> /dev/null`
+
+  umount_target_partitions "${disk}"
+
+  clean_disk "${disk}"
+  if [ "x${uefi_bytes}" != "x" ] ; then
+    create_EFI_partition "${disk}"
+  fi
+
+  clear
+  ${fdiskprg} ${disk}
+  ret=$?
+  if [ ${ret} -ne 0 ] ; then
+    fatal_error_dialog "${fdiskprg} returns bad status. Exit ${program}."
+    push_log "ERROR: ${fdiskprg} returns bad status"
+    push_log "Aborted due to an error"
+    push_err "ERROR: ${fdiskprg} returns bad status"
+    EXITSTATUS=20
+    exit
+  fi
+}
+
+ask_formatting()
+{
+  local disk=${1}
+
+  local height=16
+  local items=3
+
+  local fdiskprg=`which fdisk 2> /dev/null`
+
+  cat > $TMP/menu-format$$ << EOF
+--colors --clear $nocancel \\
+--backtitle "\Z7Radix\Zn \Z1cross\Zn\Z7 Linux\Zn" \\
+--title " \Z0Format the\Zn \Z4${disk}\Zn \Z0target device\Zn " \\
+--menu "\\n\\
+EOF
+
+  cat >> $TMP/menu-format$$ << EOF
+ The target disk should has at least one \Z1Linux\Zn partition for root\\n\\
+ file system. Also you may want to have \Z1/home\Zn and \Z1swap\Zn partitions.\\n\\
+EOF
+
+  if [ "x${uefi_bytes}" != "x" ] ; then
+    let 'height += 3'
+    cat >> $TMP/menu-format$$ << EOF
+\\n\\
+ The target disk also should has \Z1EFI\Zn partition for boot the system.\\n\\
+ The drive must be formated using \Z1G\ZnUID \Z1P\Znartition \Z1T\Znable (\Z1GPT\Zn).\\n\\
+EOF
+  fi
+
+  cat >> $TMP/menu-format$$ << EOF
+\\n\\
+ \Z1NOTE\Zn: All data on the target \Z4${disk}\Zn device will be destroyed.\\
+EOF
+
+  cat >> $TMP/menu-format$$ << EOF
+\\n\\n\\
+ Please select method of formatting:\\
+" ${height} 74 ${items} \\
+EOF
+
+  if [ "x${fdiskprg}" != "x" -a -x "${fdiskprg}" ] ; then
+    cat >> $TMP/menu-format$$ << EOF
+"Fdisk" "Use '\Zb${fdiskprg}\ZB' for formatting" \\
+EOF
+  fi
+
+  cat >> $TMP/menu-format$$ << EOF
+"Default" "Use default procedure for formatting" \\
+EOF
+
+  cat >> $TMP/menu-format$$ << EOF
+"Exit" "Terminate the Radix cross Linux installation" \\
+EOF
+
+  $DIALOG --default-item "Default" --file $TMP/menu-format$$ 2> $TMP/format$$
+  ret=$?
+  if [ ${ret} -eq 1 -o ${ret} -eq 255 ]; then
+    rm -f $TMP/format$$
+    rm -f $TMP/menu-format$$
+    return $ret
+  fi
+  result=`cat $TMP/format$$`
+  rm -f $TMP/format$$
+  rm -f $TMP/menu-format$$
+  if [ "${result}" = "Exit" ]; then
+    push_log "Done"
+    exit
+  elif [ "${result}" = "Fdisk" ]; then
+    format_by_fdisk "${disk}"
+  else
+    format_disk "${disk}"
+  fi
+}
+
+#
+# End of Disk Format functions.
+#
+################################################################
+
+################################################################
+#
+# Check Custom REPO functions:
+#
+welcome_custom_setup()
+{
+  cat > $TMP/welcome-setup-rc$$ << EOF
+use_colors = ON
+shadow_color = (BLACK,BLACK,OFF)
+screen_color = (WHITE,BLACK,ON)
+use_shadow = OFF
+dialog_color = (WHITE,BLACK,OFF)
+title_color = (WHITE,BLACK,ON)
+border_color = (BLACK,BLACK,OFF)
+border2_color = (BLACK,BLACK,OFF)
+button_active_color = (WHITE,BLACK,ON)
+button_inactive_color = (WHITE,BLACK,OFF)
+button_key_active_color = (RED,BLACK,ON)
+button_key_inactive_color = (WHITE,BLACK,ON)
+button_label_active_color = (WHITE,BLACK,ON)
+button_label_inactive_color = (WHITE,BLACK,ON)
+EOF
+
+  cat > $TMP/welcome-setup-help$$ << EOF
+
+Version \Zb${version}\Zn
+Copyright (c) 2009-`date +%Y`, Andrey V.Kosteltsev. All rights reserved.
+${DISTRO_HOME_URL}
+
+Built for: \Zb${hardware}\Zn
+Toolchain: \Zb${toolchain}\Zn
+
+Now you can install \Zb${DISTRO_CAPTION}-${version}\Zn from:
+
+  ${repo}/
+
+directory to you hard drive or internal flash.
+
+Enjoy!
+
+EOF
+
+  DIALOGRC=$TMP/welcome-setup-rc$$ \
+  $DIALOG --colors --clear \
+          --backtitle "\Z7${DISTRO_CAPTION}\Zn \Z1cross\Zn\Z7 Linux\Zn" \
+          --title " Setup ${DISTRO_CAPTION} \Z1cross\Zn Linux " \
+          --no-label " Exit Setup " \
+          --yes-label " Continue " \
+          --yesno "$(cat $TMP/welcome-setup-help$$)" 19 74
+  ret=$?
+  rm -f $TMP/welcome-setup-help$$
+  if [ $ret -ne 0 ] ; then
+    exit
+  fi
+}
+
+ask_custom_repo()
+{
+  cat > $TMP/select-custom-repo$$ << EOF
+
+ The selected custom REPO is invalid.
+ Do you want to select Custom REPO to install from?
+
+EOF
+
+  $DIALOG --colors --defaultno --clear \
+          --backtitle "\Z7${DISTRO_CAPTION}\Zn \Z1cross\Zn\Z7 Linux\Zn" \
+          --title " \Z0Setup:\Zn \Z4\ZbSelect Custom Repository\ZB\Zn " \
+          --no-label "Exit Setup" \
+          --yes-label " Select " \
+          --yesno "$(cat $TMP/select-custom-repo$$)" 9 74
+  ret=$?
+  rm -f $TMP/select-custom-repo$$
+  if [ $ret -ne 0 ] ; then
+    push_log "Done"
+    exit
+  fi
+}
+
+select_custom_repo()
+{
+  cat > $TMP/dselect-help$$ << EOF
+
+  Use the space-bar to copy the current selection into the text-entry
+  window. Press '/' and then Up Arrow to go to selected directoy.
+
+EOF
+
+  result=`$DIALOG --stdout  --colors \
+                  --backtitle "\Z7Radix\Zn \Z1cross\Zn\Z7 Linux\Zn" \
+                  --title " \Z0\ZbSelect the\ZB\Zn \Z0\ZbCustom \Z1REPO\Zn \Z0\ZbDirectory (\ZB\Zn\Z4press F1 for help\Zn\Z0\Zb):\ZB\Zn " \
+                  --hfile $TMP/dselect-help$$ \
+                  --no-shadow \
+                  --dselect ${repo} 7 74`
+  ret=$?
+  if [ $ret -eq 0 ]; then
+    custom_repo="`echo ${result} | sed 's,/$,,'`"
+  else
+    custom_repo=no
+    # continue with default REPO
+  fi
+}
+
+check_custom_repo()
+{
+  rp="${1}"
+
+  rp="`echo ${rp} | sed 's,/$,,'`"
+
+  if ! `echo "${rp}" | grep -q "^/"` ; then
+    ask_custom_repo
+    select_custom_repo
+    if [ "x${custom_repo}" != "xno" ] ; then
+      check_custom_repo "${custom_repo}"
+    else
+      return
+    fi
+  fi
+
+  if [ ! -d "${rp}" ] ; then
+    ask_custom_repo
+    select_custom_repo
+    if [ "x${custom_repo}" != "xno" ] ; then
+      check_custom_repo "${custom_repo}"
+    else
+      return
+    fi
+  fi
+
+  local depth=`echo "${rp}" | grep -o '/' - | wc -l`
+  if [ "${depth}" -lt "3" ] ; then
+    ask_custom_repo
+    select_custom_repo
+    if [ "x${custom_repo}" != "xno" ] ; then
+      check_custom_repo "${custom_repo}"
+    else
+      return
+    fi
+  fi
+
+  local  d=`dirname  "${rp}"`
+  local hw=`basename "${rp}"`
+  local th=`basename "${d}"`
+         d=`dirname  "${d}"`
+  local  v=`basename "${d}"`
+
+  if ! `echo ${v} | grep -q '^[0-9]*\.[0-9]*\.[0-9]*'` ; then
+    ask_custom_repo
+    select_custom_repo
+    if [ "x${custom_repo}" != "xno" ] ; then
+      check_custom_repo "${custom_repo}"
+    else
+      return
+    fi
+  fi
+
+  if [ ! -r "${rp}/${hw}.pkglist" ] ; then
+    ask_custom_repo
+    select_custom_repo
+    if [ "x${custom_repo}" != "xno" ] ; then
+      check_custom_repo "${custom_repo}"
+    else
+      return
+    fi
+  elif [ ! -L "${rp}/.pkglist" ] ; then
+    ( cd "${rp}" ; ln -sf ${hw}.pkglist .pkglist )
+  fi
+
+  version=$v
+  toolchain=$th
+  hardware=$hw
+  repo=${rp}
+
+  custom_repo=yes
+}
+
+#
+# End of Check Custom REPO functions.
+#
+################################################################
+
+################################################################
+#
+# Check Source REPO functions:
+#
+check_repo()
+{
+  local rp="${1}"
+
+  if [ ! -d "${rp}" ] ; then
+    return 1
+  fi
+
+  if [ ! -r "${rp}/${HARDWARE}.pkglist" ] ; then
+    return 1
+  elif [ ! -L "${rp}/.pkglist" ] ; then
+    ( cd "${rp}" ; ln -sf ${HARDWARE}.pkglist .pkglist )
+  fi
+
+  return 0
+}
+#
+# End of Check Source REPO functions.
+#
+################################################################
+
+################################################################
+#
+# Check Target device functions:
+#
+major_number()
+{
+  local part=${1}
+  local name=`basename ${part}`
+
+  local major=`ls -l /dev | grep -v ^l | grep ${name} | tr -s ' ' | sed 's/,//g' | cut -f5 -d' ' | sort -u | tr '\n' ',' | sed 's/,$//'`
+  echo "${major}"
+}
+
+#
+# returns the prefix 'p' of partition number if applicable
+#
+part_prefix()
+{
+  local dev=${1}
+  if `echo ${dev: -1} | grep -q '[0-1]'` ; then
+    p=p
+  fi
+}
+
+check_current_device()
+{
+  current_device=`${WHERE} -n -o disk`
+  current_root=`${WHERE} -n -o root`
+  pline=`LANG=en_US.UTF-8 fdisk -l --bytes ${current_device} | grep "^${current_root}" | tr -s ' '`
+  active=`echo "${pline}" | cut -f2 -d' '`
+  if [ "${partition_table_type}" = "o" ] ; then
+    if [ "${active}" = "*" ] ; then
+      rootfs_min_bytes=`echo "${pline}" | cut -f6 -d' '`
+    fi
+  else
+    rootfs_min_bytes=`echo "${pline}" | cut -f5 -d' '`
+  fi
+}
+
+ask_target_device()
+{
+  cat > $TMP/select-target-device$$ << EOF
+
+ Target device is not selected or invalid.
+ Do you want to select Target Device to install?
+
+EOF
+
+  $DIALOG --colors --defaultno --clear \
+          --backtitle "\Z7${DISTRO_CAPTION}\Zn \Z1cross\Zn\Z7 Linux\Zn" \
+          --title " \Z0Setup:\Zn \Z4\ZbSelect Target Device\ZB\Zn " \
+          --no-label "Exit Setup" \
+          --yes-label " Select " \
+          --yesno "$(cat $TMP/select-target-device$$)" 9 74
+  ret=$?
+  rm -f $TMP/select-target-device$$
+  if [ $ret -ne 0 ] ; then
+    push_log "Done"
+    exit
+  fi
+}
+
+select_target_device()
+{
+  cat > $TMP/device-help$$ << EOF
+--colors --clear \\
+--backtitle "\Z7Radix\Zn \Z1cross\Zn\Z7 Linux\Zn" \\
+--title " \Z0\ZbSelect the destination\ZB\Zn " \\
+--menu "\\n\\
+ If the desired device is not displayed in the following list,\\n\\
+ please insert the disk and repeat installation.\\n\\
+\\n\\
+ Please select the target device:\\
+" 14 74 3 \\
+EOF
+
+  for dev in `lsblk -ldn -o name` ; do
+    #
+    # Skip 'mtd.*', 'mmcblk[0-9]*boot.*':
+    #
+    if `echo ${dev} | grep -q 'mtd.*\|mmcblk[0-9]*boot.*'` ; then
+      continue
+    fi
+    #
+    # Exclude current device:
+    #
+    local sfound=`echo "${current_device}" | grep "/dev/${dev}"`
+    if [ "x${sfound}" = "x" ] ; then
+      echo "\"/dev/$dev\" \" \" \\" >> $TMP/device-help$$
+    fi
+  done
+
+  ${DIALOG} --file $TMP/device-help$$ 2> $TMP/devmame$$
+  ret=$?
+  if [ $ret -eq 1 -o $ret -eq 255 ]; then
+    rm -f $TMP/devmame$$
+    rm -f $TMP/device-help$$
+    # continue: see check_target_device()
+  fi
+  result=`cat $TMP/devmame$$`
+  rm -f $TMP/devmame$$
+  rm -f $TMP/device-help$$
+
+  device=$result
+}
+
+check_target_device()
+{
+  while [ "x${device}" = "x" -o "x${device}" = "x${current_device}" ] ; do
+    ask_target_device
+    select_target_device
+  done
+
+  if [ -b "${device}" ] ; then
+    local base=`basename ${device}`
+    local mjrs=`major_number ${device}`
+    local line="`lsblk -I ${mjrs} -l -o name,type | grep \"${base} \" | tr -s ' ' | head -n 1`"
+    if [ "$line" != "" ] ; then
+      local name=`echo "${line}" | tr -s ' ' | cut -f1 -d' '`
+      local type=`echo "${line}" | tr -s ' ' | cut -f2 -d' '`
+      if [ "${base}" = "${name}" -a "${type}" != "disk" -a "${type}" != "loop" ] ; then
+        push_log "ERROR: The DEVICE (${device}) is not a physical disk"
+        device=
+        check_target_device
+      fi
+    else
+      push_log "ERROR: The DEVICE ($device) not found"
+      device=
+      check_target_device
+    fi
+  else
+    push_log "ERROR: The DEVICE ($device) not a block device"
+    device=
+    check_target_device
+  fi
+
+  part_prefix ${device}
+  disk_geometry ${device}
+}
+#
+# End of Check Target device functions.
+#
+################################################################
+
+################################################################
+#
+# Partitions functions.
+#
+make_ext2() {
+  local  pname=${1}
+  local plabel=${2}
+
+  local psize=`get_partition_size ${pname}`
+  let "psize = psize / 1024"
+
+  $DIALOG --colors \
+          --backtitle "\Z7Radix\Zn \Z1cross\Zn\Z7 Linux\Zn" \
+          --title " \Z0Formatting\Zn \Z4\Zb$pname\ZB\Zn " \
+          --infobox "\n Formatting \Z1${pname}\ZB\Zn\n\n\
+ Size in 1K blocks: \Z4${psize}\Zn\n\
+   Filesystem type: \Z1ext2\Zn\n" 8 74
+  if `mount | grep -q "^${pname} " 1>/dev/null 2>/dev/null` ; then
+    umount ${pname} 2>/dev/null
+  fi
+  if [ "x${plabel}" != "x" ] ; then
+    mkfs.ext2 -q -F -L "${plabel}" ${pname} 1>/dev/null 2>/dev/null
+  else
+    mkfs.ext2 -q -F ${pname} 1>/dev/null 2>/dev/null
+  fi
+}
+
+make_ext3() {
+  local  pname=${1}
+  local plabel=${2}
+
+  local psize=`get_partition_size ${pname}`
+  let "psize = psize / 1024"
+
+  $DIALOG --colors \
+          --backtitle "\Z7Radix\Zn \Z1cross\Zn\Z7 Linux\Zn" \
+          --title " \Z0Formatting\Zn \Z4\Zb$pname\ZB\Zn " \
+          --infobox "\n Formatting \Z1${pname}\ZB\Zn\n\n\
+ Size in 1K blocks: \Z4${psize}\Zn\n\
+   Filesystem type: \Z1ext3\Zn\n" 8 74
+  if `mount | grep -q "^${pname} " 1>/dev/null 2>/dev/null` ; then
+    umount ${pname} 2>/dev/null
+  fi
+  if [ "x${plabel}" != "x" ] ; then
+    mkfs.ext3 -q -F -L "${plabel}" ${pname} 1>/dev/null 2>/dev/null
+  else
+    mkfs.ext3 -q -F ${pname} 1>/dev/null 2>/dev/null
+  fi
+}
+
+make_ext4() {
+  local  pname=${1}
+  local plabel=${2}
+
+  local psize=`get_partition_size ${pname}`
+  let "psize = psize / 1024"
+
+  $DIALOG --colors \
+          --backtitle "\Z7Radix\Zn \Z1cross\Zn\Z7 Linux\Zn" \
+          --title " \Z0Formatting\Zn \Z4\Zb$pname\ZB\Zn " \
+          --infobox "\n Formatting \Z1${pname}\ZB\Zn\n\n\
+ Size in 1K blocks: \Z4${psize}\Zn\n\
+   Filesystem type: \Z1ext4\Zn\n" 8 74
+  if `mount | grep -q "^${pname} " 1>/dev/null 2>/dev/null` ; then
+    umount ${pname} 2>/dev/null
+  fi
+  if [ "x${plabel}" != "x" ] ; then
+    mkfs.ext4 -q -F -L "${plabel}" ${pname} 1>/dev/null 2>/dev/null
+  else
+    mkfs.ext4 -q -F ${pname} 1>/dev/null 2>/dev/null
+  fi
+}
+
+make_vfat() {
+  local  pname=${1}
+  local plabel=${2}
+
+  local psize=`get_partition_size ${pname}`
+  let "psize = psize / 1024"
+
+  $DIALOG --colors \
+          --backtitle "\Z7Radix\Zn \Z1cross\Zn\Z7 Linux\Zn" \
+          --title " \Z0Formatting\Zn \Z4\Zb$pname\ZB\Zn " \
+          --infobox "\n Formatting \Z1${pname}\ZB\Zn\n\n\
+ Size in 1K blocks: \Z4${psize}\Zn\n\
+   Filesystem type: \Z1vfat\Zn\n" 8 74
+  if `mount | grep -q "^${pname} " 1>/dev/null 2>/dev/null` ; then
+    umount ${pname} 2>/dev/null
+  fi
+  if [ "x${plabel}" != "x" ] ; then
+    mkfs.fat -F 32 -n "${plabel}" ${pname} 1>/dev/null 2>/dev/null
+  else
+    mkfs.fat -F 32 ${pname} 1>/dev/null 2>/dev/null
+  fi
+}
+
+make_btrfs() {
+  local  pname=${1}
+  local plabel=${2}
+
+  local psize=`get_partition_size ${pname}`
+  let "psize = psize / 1024"
+
+  $DIALOG --colors \
+          --backtitle "\Z7Radix\Zn \Z1cross\Zn\Z7 Linux\Zn" \
+          --title " \Z0Formatting\Zn \Z4\Zb$pname\ZB\Zn " \
+          --infobox "\n Formatting \Z1${pname}\ZB\Zn\n\n\
+ Size in 1K blocks: \Z4${psize}\Zn\n\
+   Filesystem type: \Z1btrfs\Zn\n" 8 74
+  if `mount | grep -q "^${pname} " 1>/dev/null 2>/dev/null` ; then
+    umount ${pname} 2>/dev/null
+  fi
+  if [ "x${plabel}" != "x" ] ; then
+    mkfs.btrfs -d single -m single -L "${plabel}" ${pname} 1>/dev/null 2>/dev/null
+  else
+    mkfs.btrfs -d single -m single ${pname} 1>/dev/null 2>/dev/null
+  fi
+}
+
+make_jfs() {
+  local  pname=${1}
+  local plabel=${2}
+
+  local psize=`get_partition_size ${pname}`
+  let "psize = psize / 1024"
+
+  $DIALOG --colors \
+          --backtitle "\Z7Radix\Zn \Z1cross\Zn\Z7 Linux\Zn" \
+          --title " \Z0Formatting\Zn \Z4\Zb$pname\ZB\Zn " \
+          --infobox "\n Formatting \Z1${pname}\ZB\Zn\n\n\
+ Size in 1K blocks: \Z4${psize}\Zn\n\
+   Filesystem type: \Z1jfs\Zn\n" 8 74
+  if `mount | grep -q "^${pname} " 1>/dev/null 2>/dev/null` ; then
+    umount ${pname} 2>/dev/null
+  fi
+  if [ "x${plabel}" != "x" ] ; then
+    mkfs.jfs -q -L "${plabel}" ${pname} 1>/dev/null 2>/dev/null
+  else
+    mkfs.jfs -q ${pname} 1>/dev/null 2>/dev/null
+  fi
+}
+
+make_xfs() {
+  local  pname=${1}
+  local plabel=${2}
+
+  local psize=`get_partition_size ${pname}`
+  let "psize = psize / 1024"
+
+  $DIALOG --colors \
+          --backtitle "\Z7Radix\Zn \Z1cross\Zn\Z7 Linux\Zn" \
+          --title " \Z0Formatting\Zn \Z4\Zb$pname\ZB\Zn " \
+          --infobox "\n Formatting \Z1${pname}\ZB\Zn\n\n\
+ Size in 1K blocks: \Z4${psize}\Zn\n\
+   Filesystem type: \Z1xfs\Zn\n" 8 74
+  if `mount | grep -q "^${pname} " 1>/dev/null 2>/dev/null` ; then
+    umount ${pname} 2>/dev/null
+  fi
+  if [ "x${plabel}" != "x" ] ; then
+    mkfs.xfs -q -f -L "${plabel}" ${pname} 1>/dev/null 2>/dev/null
+  else
+    mkfs.xfs -q -f ${pname} 1>/dev/null 2>/dev/null
+  fi
+}
+
+make_swap() {
+  local  pname=${1}
+  local plabel=${2}
+
+  local psize=`get_partition_size ${pname}`
+  let "psize = psize / 1024"
+
+  $DIALOG --colors \
+          --backtitle "\Z7Radix\Zn \Z1cross\Zn\Z7 Linux\Zn" \
+          --title " \Z0Formatting\Zn \Z4\Zb$pname\ZB\Zn " \
+          --infobox "\n Formatting \Z1${pname}\ZB\Zn\n\n\
+ Size in 1K blocks: \Z4${psize}\Zn\n\
+   Filesystem type: \Z1swap\Zn\n" 8 74
+  if `mount | grep -q "^${pname} " 1>/dev/null 2>/dev/null` ; then
+    umount ${pname} 2>/dev/null
+  fi
+  if [ "x${plabel}" != "x" ] ; then
+    mkswap -v1 -L "${plabel}" ${pname} 1>/dev/null 2>/dev/null
+  else
+    mkswap -v1 ${pname} 1>/dev/null 2>/dev/null
+  fi
+}
+
+partlist=$TMP/plist.$$
+partitems=$TMP/pitems.$$
+
+gen_parts_list()
+{
+  local disk=${1}
+  local devname=`echo ${disk} | sed -e 's,^/dev/,,'`
+
+  if [ "${partition_table_type}" = "g" ] ; then
+    uefi_id="EFI System"
+    linux_id="Linux filesystem"
+    swap_id="Linux swap"
+  else
+    uefi_id="ef"
+    linux_id="83"
+    swap_id="82"
+  fi
+
+  truncate -s0 $partlist
+
+  local first_uefi= ; local first_root= ; local first_home=
+
+  local plist=`LANG=en_US.UTF-8 lsblk -lb -o name,size,type,fstype,mountpoint | grep ${devname} | tr -s ' '`
+  echo -e "${plist}" | while read -r line ; do
+    words=`echo "${line}" | wc -w`
+
+    pname= ; psize= ; ptype= ; fstype= ; mpoint= ; partuuid= ; uuid=
+
+    pname=`echo "${line}" | cut -f1 -d ' '`
+    if [ ${words} -ge 2 ] ; then
+      psize=`echo "${line}" | cut -f2 -d ' '`
+    fi
+    if [ ${words} -ge 3 ] ; then
+      ptype=`echo "${line}" | cut -f3 -d ' '`
+      if [ "${ptype}" != "part" ] ; then
+        continue
+      fi
+    fi
+    if [ ${words} -ge 4 ] ; then
+      fstype=`echo "${line}" | cut -f4 -d ' '`
+    fi
+    if [ ${words} -ge 5 ] ; then
+      mpoint=`echo "${line}" | cut -f5 -d ' '`
+    fi
+
+    #
+    # recomended values:
+    #
+    used=
+    # skip active partition sign [asterisk '*']
+    local pline=`LANG=en_US.UTF-8 fdisk -l /dev/${devname} | grep "^/dev/${pname}" | tr -s ' '`
+    active=`echo "${pline}" | cut -f2 -d' '`
+    if [ "${partition_table_type}" = "g" ] ; then
+      partid=`echo "${pline}" | cut -f6,7 -d' '`
+    else
+      if [ "${active}" = "*" ] ; then
+        partid=`echo "${pline}" | cut -f7 -d' '`
+      else
+        partid=`echo "${pline}" | cut -f6 -d' '`
+      fi
+    fi
+
+    if [ "${partid}" = "${swap_id}" ] ; then
+      mpoint="swap"
+      fstype="swap"
+    fi
+    if [ "x${first_uefi}" = "x" ] ; then
+      if [ "${partid}" = "${uefi_id}" ] ; then
+        first_boot="/dev/${pname}"
+        mpoint="/boot/efi"
+        fstype="vfat"
+        used="use"
+      fi
+    fi
+    if [ "x${first_root}" = "x" ] ; then
+      if [ "${partid}" = "${linux_id}" ] ; then
+        first_root="/dev/${pname}"
+        mpoint="/"
+        fstype="ext4"
+      fi
+    fi
+    if [ "x${first_root}" != "x" -a "x${first_home}" = "x" ] ; then
+      if [ "${partid}" = "${linux_id}" ] ; then
+         if [ "${first_root}" != "/dev/${pname}" ] ; then
+           first_home="/dev/${pname}"
+           mpoint="/home"
+           fstype="ext4"
+        fi
+      fi
+    fi
+
+    echo "/dev/${pname}:${psize}:${fstype}:${mpoint}:${used}:${partuuid}:${uuid}" | tr -s ' ' >> ${partlist}
+  done
+}
+
+gen_parts_menu_items()
+{
+  local disk=${1}
+  local devname=`echo ${disk} | sed -e 's,^/dev/,,'`
+
+  local first_uefi= ; local first_root= ; local first_home=
+
+  truncate -s0 $partitems
+
+  cat "$partlist" | while read -r line ; do
+    pname= ; psize= ; ptype= ; fstype= ; mpoint=
+
+    pname=`echo "$line" | cut -f1 -d':'`
+
+    #
+    # get partition type (skipping active partition sign [asterisk '*']):
+    #
+    pline=`LANG=en_US.UTF-8 fdisk -l ${disk} | grep "^${pname}" | tr -s ' '`
+    active=`echo "${pline}" | cut -f2 -d' '`
+    if [ "${partition_table_type}" = "g" ] ; then
+      ptype=`echo "${pline}" | cut -f6,7 -d' '`
+    else
+      if [ "${active}" = "*" ] ; then
+        ptype=`echo "${pline}" | cut -f7 -d' '`
+      else
+        ptype=`echo "${pline}" | cut -f6 -d' '`
+      fi
+    fi
+
+    if [ "${partition_table_type}" = "g" ] ; then
+      if [ "${ptype}" = "EFI System" ] ; then
+        ptype="ef"
+      fi
+      if [ "${ptype}" = "Linux filesystem" ] ; then
+        ptype="83"
+      fi
+      if [ "${ptype}" = "Linux swap" ] ; then
+        ptype="82"
+      fi
+    fi
+
+    ptype=`printf ' %02s ' "${ptype}"`
+
+    psize=`echo "${line}" | cut -f2 -d':'`
+    let "psize = psize / 1048576"
+    psize=`printf '%6d' $psize`
+
+    fstype=`echo "${line}" | cut -f3 -d':'`
+    fstype=`printf '%-8s' "${fstype}"`
+
+    mpoint=`echo "${line}" | cut -f4 -d':'`
+
+    used=`echo "${line}" | cut -f5 -d':'`
+    if [ "${used}" == "use" ] ; then
+      fstype="\\Z4${fstype}\\Zn"
+      mpoint="\\Z4${mpoint}\\Zn"
+    fi
+    echo "\"${pname}\" \"${psize}M ${ptype} ${fstype} ${mpoint}\" \\" | sed -e 's,\s\+$,,g' >> ${partitems}
+  done
+}
+
+get_partition_size()
+{
+  local dev=${1}
+  local psize=`cat ${partlist} | grep "^${dev}" | cut -f2 -d':'`
+  echo -n "${psize}"
+}
+
+get_recomended_fstype()
+{
+  local dev=${1}
+  local fstype=`cat ${partlist} | grep "^${dev}" | cut -f3 -d':'`
+  echo -n "${fstype}"
+}
+
+set_recomended_fstype() {
+  local dev=${1}
+  local fstype=${2}
+  local   name=`echo ${dev} | sed -e 's,/dev/,,'`
+  local  psize=`cat ${partlist} | grep "^${dev}" | cut -f2 -d':'`
+  local mpoint=`cat ${partlist} | grep "^${dev}" | cut -f4 -d':'`
+  local  puuid=`cat ${partlist} | grep "^${dev}" | cut -f6 -d':'`
+  local   uuid=`cat ${partlist} | grep "^${dev}" | cut -f7 -d':'`
+  sed -i "/${name}/c\/dev/${name}:${psize}:${fstype}:${mpoint}:use:${puuid}:${uuid}" ${partlist}
+}
+
+get_recomended_mpoint()
+{
+  local dev=${1}
+  local mpoint=`cat ${partlist} | grep "^${dev}" | cut -f4 -d':'`
+  echo -n "${mpoint}"
+}
+
+set_recomended_mpoint()
+{
+  local dev=${1}
+  local mpoint=${2}
+  local   name=`echo ${dev} | sed -e 's,/dev/,,'`
+  local  psize=`cat ${partlist} | grep "^${dev}" | cut -f2 -d':'`
+  local fstype=`cat ${partlist} | grep "^${dev}" | cut -f3 -d':'`
+  local  puuid=`cat ${partlist} | grep "^${dev}" | cut -f6 -d':'`
+  local   uuid=`cat ${partlist} | grep "^${dev}" | cut -f7 -d':'`
+  sed -i "/${name}/c\/dev/${name}:${psize}:${fstype}:${mpoint}:use:${puuid}:${uuid}" ${partlist}
+}
+
+get_rootfs_devname()
+{
+  cat "${partlist}" | while read -r line ; do
+    pname= ; fstype= ; mpoint=
+
+     pname=`echo "${line}" | cut -f1 -d':'`
+    fstype=`echo "${line}" | cut -f3 -d':'`
+    mpoint=`echo "${line}" | cut -f4 -d':'`
+
+    if [ "${mpoint}" = "/" ] ; then
+      echo -n "${pname}"
+      break
+    fi
+  done
+}
+
+get_uefi_devname()
+{
+  cat "${partlist}" | while read -r line ; do
+    pname= ; fstype= ; mpoint=
+
+     pname=`echo "${line}" | cut -f1 -d':'`
+    fstype=`echo "${line}" | cut -f3 -d':'`
+    mpoint=`echo "${line}" | cut -f4 -d':'`
+
+    if [ "${mpoint}" = "/boot/efi" ] ; then
+      echo -n "${pname}"
+      break
+    fi
+  done
+}
+
+get_part_uuid()
+{
+  local dev=${1}
+  local puuid=`cat ${partlist} | grep "^${dev}" | cut -f6 -d':'`
+  echo -n "${puuid}"
+}
+
+set_part_uuid()
+{
+  local dev=${1}
+  local  puuid=${2}
+  local   name=`echo ${dev} | sed -e 's,/dev/,,'`
+  local  psize=`cat ${partlist} | grep "^${dev}" | cut -f2 -d':'`
+  local fstype=`cat ${partlist} | grep "^${dev}" | cut -f3 -d':'`
+  local mpoint=`cat ${partlist} | grep "^${dev}" | cut -f4 -d':'`
+  local   used=`cat ${partlist} | grep "^${dev}" | cut -f5 -d':'`
+  local   uuid=`cat ${partlist} | grep "^${dev}" | cut -f7 -d':'`
+  sed -i "/${name}/c\/dev/${name}:${psize}:${fstype}:${mpoint}:${used}:${puuid}:${uuid}" ${partlist}
+}
+
+get_uuid()
+{
+  local dev=${1}
+  local uuid=`cat ${partlist} | grep "^${dev}" | cut -f7 -d':'`
+  echo -n "${uuid}"
+}
+
+set_uuid()
+{
+  local dev=${1}
+  local   uuid=${2}
+  local   name=`echo ${dev} | sed -e 's,/dev/,,'`
+  local  psize=`cat ${partlist} | grep "^${dev}" | cut -f2 -d':'`
+  local fstype=`cat ${partlist} | grep "^${dev}" | cut -f3 -d':'`
+  local mpoint=`cat ${partlist} | grep "^${dev}" | cut -f4 -d':'`
+  local   used=`cat ${partlist} | grep "^${dev}" | cut -f5 -d':'`
+  local  puuid=`cat ${partlist} | grep "^${dev}" | cut -f6 -d':'`
+  sed -i "/${name}/c\/dev/${name}:${psize}:${fstype}:${mpoint}:${used}:${puuid}:${uuid}" ${partlist}
+}
+
+create_file_system()
+{
+  local  pname=${1}
+  local fstype=${2}
+  local plabel=
+
+  mpoint=`get_recomended_mpoint ${pname}`
+  if [ "${mpoint}" = "/" ] ; then
+    plabel="root"
+  fi
+  if [ "${mpoint}" == "/home" ] ; then
+    plabel="home"
+  fi
+
+  cat > $TMP/partlabel-help$$ << EOF
+
+ Please specify the volume label for file system
+ on the \Z1${pname}\Zn partition.
+
+ Set the volume label or leave following field blank:
+EOF
+
+  result=`$DIALOG --stdout  --colors \
+                  --backtitle "\Z7Radix\Zn \Z1cross\Zn\Z7 Linux\Zn" \
+                  --title " \Z0Select Volume Label\Zn " \
+                  --inputbox "$(cat $TMP/partlabel-help$$)" 12 74 "${plabel}"`
+  ret=$?
+  rm -f $TMP/partlabel-help$$
+  if [ ${ret} -eq 0 ]; then
+    plabel="${result}"
+  fi
+
+  case "${fstype}" in
+    ext2 )
+      make_ext2 "${pname}" "${plabel}"
+      ;;
+    ext3 )
+      make_ext3 "${pname}" "${plabel}"
+      ;;
+    ext4 )
+      make_ext4 "${pname}" "${plabel}"
+      ;;
+    vfat )
+      make_vfat "${pname}" "${plabel}"
+      ;;
+    btrfs )
+      make_btrfs "${pname}" "${plabel}"
+      ;;
+    * )
+      ;;
+  esac
+
+  set_recomended_fstype "${pname}" "${fstype}"
+}
+
+set_mount_point()
+{
+  local pname=${1}
+  local mpoint=${2}
+
+  cat > $TMP/mountpoint-help$$ << EOF
+
+ Please specify the mount directory of the \Z1${pname}\Zn partition.
+
+ Set the mount directory:
+EOF
+
+  result=`$DIALOG --stdout  --colors \
+                  --backtitle "\Z7Radix\Zn \Z1cross\Zn\Z7 Linux\Zn" \
+                  --title " \Z0Select Mount Point for\Zn \Z4${pname}\Zn " \
+                  --inputbox "$(cat $TMP/mountpoint-help$$)" 11 74 "${mpoint}"`
+  ret=$?
+  rm -f $TMP/mountpoint-help$$
+  if [ ${ret} -eq 0 ]; then
+    mpoint="${result}"
+  fi
+  set_recomended_mpoint "${pname}" "${mpoint}"
+}
+
+format_partition()
+{
+  local pname=${1}
+
+  local fstype=`get_recomended_fstype ${pname}`
+  local mpoint=`get_recomended_mpoint ${pname}`
+
+  if [ "${fstype}" == "swap" ] ; then
+    cat > $TMP/mountpoint-help$$ << EOF
+
+ Radix Setup will now prepare your system's \Z1swap\Zn space.
+
+ Would you like to format \Z1${pname}\Zn using \Z4mkswap\Zn ?
+EOF
+
+    result=`$DIALOG --stdout  --colors \
+                    --backtitle "\Z7Radix\Zn \Z1cross\Zn\Z7 Linux\Zn" \
+                    --title " \Z0Format Swap Partition\Zn \Z4${pname}\Zn " \
+                    --yes-label " OK " \
+                    --yesno "$(cat $TMP/mountpoint-help$$)" 9 74`
+    ret=$?
+    rm -f $TMP/mountpoint-help$$
+    if [ ${ret} -eq 0 ]; then
+      make_swap ${pname} swap
+    else
+      return
+    fi
+    set_recomended_fstype "${pname}" "swap"
+    set_recomended_mpoint "${pname}" "swap"
+    return
+  else
+    unset EXT2 EXT3 EXT4 REISERFS BTRFS VFAT JFS XFS
+    if grep -wq ext2 /proc/filesystems 1>/dev/null 2>/dev/null ; then
+      EXT2="Ext2 is the traditional Linux file system and is fast and stable."
+    fi
+    if grep -wq ext3 /proc/filesystems 1>/dev/null 2>/dev/null ; then
+      EXT3="Ext3 is the journaling version of the Ext2 filesystem."
+    fi
+    if grep -wq ext4 /proc/filesystems 1>/dev/null 2>/dev/null ; then
+      EXT4="Ext4 is the successor to the ext3 filesystem."
+    fi
+    if grep -wq btrfs /proc/filesystems 1>/dev/null 2>/dev/null ; then
+      BTRFS="Btrfs is a B-tree copy-on-write filesystem."
+    fi
+    if grep -wq vfat /proc/filesystems 1>/dev/null 2>/dev/null ; then
+      VFAT="VFAT is a updated version of the FAT filesystem for Windows. VFAT's updates are mainly support for longer file names."
+    fi
+    if grep -wq jfs /proc/filesystems 1>/dev/null 2>/dev/null ; then
+      JFS="JFS is IBM's Journaled Filesystem, currently used in IBM enterprise servers."
+    fi
+    if grep -wq xfs /proc/filesystems 1>/dev/null 2>/dev/null ; then
+      XFS="XFS is SGI's journaling filesystem that originated on IRIX."
+    fi
+
+    cat > $TMP/filesystem-help$$ << EOF
+--colors --default-item "${fstype}" \\
+--backtitle "\Z7Radix\Zn \Z1cross\Zn\Z7 Linux\Zn" \\
+--title " \Z0Select File System for\Zn \Z4${pname}\Zn " \\
+--menu "\\n\\
+ Please select the type of filesystem to use for the specified device\\n\\
+ or hit <\Z1\ZbC\ZB\Zn\Zbancel\ZB> to leave existed filesystem. \\
+\\n\\n\\
+ Here are descriptions of the available filesystems:\\
+" 15 74 4 \\
+EOF
+
+    if [ "x${EXT2}" != "x" ]; then
+      echo "\"ext2\" \"Standard Linux Ext2 Filesystem\" \\" >> $TMP/filesystem-help$$
+    fi
+    if [ "x${EXT3}" != "x" ]; then
+      echo "\"ext3\" \"Ext3 Journaling Filesystem\" \\" >> $TMP/filesystem-help$$
+    fi
+    if [ "x${EXT4}" != "x" ]; then
+      echo "\"ext4\" \"Ext4 Journaling Filesystem\" \\" >> $TMP/filesystem-help$$
+    fi
+    if [ "x${VFAT}" != "x" ]; then
+      echo "\"vfat\" \"VFAT updated version of the FAT filesystem\" \\" >> $TMP/filesystem-help$$
+    fi
+    if [ "x${BTRFS}" != "x" ]; then
+      echo "\"btrfs\" \"Btrfs Copy-on-Write B-tree Filesystem\" \\" >> $TMP/filesystem-help$$
+    fi
+
+    $DIALOG --file $TMP/filesystem-help$$ 2> $TMP/filesystem$$
+    ret=$?
+    result=`cat $TMP/filesystem$$`
+    rm -f $TMP/filesystem$$
+    rm -f $TMP/filesystem-help$$
+    if [ ${ret} -eq 0 ]; then
+      fstype=${result}
+
+      # Create File System:
+      create_file_system "${pname}" "${fstype}"
+
+      # Set Mount Point:
+      set_mount_point "${pname}" "${mpoint}"
+    else
+      # Leave existed file system:
+      set_recomended_fstype "${pname}" "${fstype}"
+      # Set Mount Point:
+      set_mount_point "${pname}" "${mpoint}"
+    fi
+  fi
+}
+
+prepare_partitions()
+{
+  local disk=${1}
+
+  if [ "x${disk}" = "x" ] ; then
+    return 255
+  fi
+
+  local items=4
+  local height=21
+
+  gen_parts_list "${disk}"
+
+  while [ 0 ] ; do
+    cat > $TMP/menu-format$$ << EOF
+--colors --clear --cancel-label "Continue" \\
+--backtitle "\Z7Radix\Zn \Z1cross\Zn\Z7 Linux\Zn" \\
+--title " \Z0Create File Systems and Select\Zn \Z0Mountpoints\Zn " \\
+--menu "\\n\\
+EOF
+
+    cat >> $TMP/menu-format$$ << EOF
+ The target disk has fillowing partitions. Each menu item show the\\n\\
+ device name, size in MiB, and type of existing partition. Last two\\n\\
+ columns may shows recomended filesystem and mount point for the\\n\\
+ target system. Now you can create filesystem on each existing\\n\\
+ partitions (if needed) and choose or confirm mount point.\\n\\n\\
+ Already changed values will be shown in \Z4\ZbBlue\ZB\Zn (0x0000FF) color.\\
+EOF
+
+    cat >> $TMP/menu-format$$ << EOF
+\\n\\n\\
+ Please select each of partitions listed below,\\n\\
+ or if you're done, hit <Continue>:\\
+" $height 73 $items \\
+EOF
+
+    gen_parts_menu_items "${disk}"
+
+    cat "${partitems}" >> $TMP/menu-format$$
+
+    $DIALOG --file $TMP/menu-format$$ 2> $TMP/format$$
+    ret=$?
+    if [ ${ret} -eq 1 -o ${ret} -eq 255 ]; then
+      rm -f $TMP/format$$
+      rm -f $TMP/menu-format$$
+      # continue the installation
+      return ${ret}
+    fi
+    local pname=`cat $TMP/format$$`
+    rm -f $TMP/format$$
+    rm -f $TMP/menu-format$$
+
+    format_partition "${pname}"
+  done
+}
+
+partitions_loop()
+{
+  local disk=${1}
+
+  while [ 0 ] ; do
+    prepare_partitions "${disk}"
+    ret=$?
+    if [ ${ret} -eq 255 ]; then
+      # User can interrupt format partitions cycle by press Esc button
+      # on keyboard. In this case we have to exit setup because we not
+      # sure that user done all needs.  If user say Esc again, then we
+      # will return him back to the cycle until user press <Continue>.
+      ask_exit_setup
+      continue
+    fi
+    if [ ${ret} -eq 1 ]; then
+      break
+    fi
+  done
+}
+
+check_partitions()
+{
+  local disk=${1}
+
+  local has_uefi=
+  local has_linux=
+  local retvalue=0
+
+  if [ "${partition_table_type}" = "g" ] ; then
+    if [ "x${uefi_bytes}" != "x" ] ; then
+      has_uefi=`LANG=en_US.UTF-8 fdisk -l ${disk} | tr -s ' ' | grep "^${disk}.* EFI System"`
+      if [ "x${has_uefi}" = "x" ] ; then
+        retvalue=1
+      fi
+    fi
+    has_linux=`LANG=en_US.UTF-8 fdisk -l ${disk} | tr -s ' '  | grep "^${disk}.* Linux filesystem"`
+    if [ "x${has_linux}" = "x" ] ; then
+      retvalue=2
+    fi
+  else
+    if [ "x${uefi_bytes}" != "x" ] ; then
+      has_uefi=`LANG=en_US.UTF-8 fdisk -l ${disk} | tr -s ' '  | grep "^${disk}.* ef .*"`
+      if [ "x${has_uefi}" = "x" ] ; then
+        retvalue=1
+      fi
+    fi
+    has_linux=`LANG=en_US.UTF-8 fdisk -l ${disk} | tr -s ' '  | grep "^${disk}.* 83 .*"`
+    if [ "x${has_linux}" = "x" ] ; then
+      retvalue=2
+    fi
+  fi
+
+  if [ "${retvalue}" -eq "1" ] ; then
+    error_dialog "Target device must have \Z1EFI\Zn partition."
+    ask_formatting "${disk}"
+  fi
+  if [ "${retvalue}" -eq "2" ] ; then
+    error_dialog "Target device must have at least one \Z1Linux\Zn partition."
+    ask_formatting "${disk}"
+  fi
+}
+
+check_filesystems()
+{
+  cat "${partlist}" | while read -r line ; do
+    pname= ; fstype= ; mpoint=
+
+     pname=`echo "${line}" | cut -f1 -d':'`
+    fstype=`echo "${line}" | cut -f3 -d':'`
+    mpoint=`echo "${line}" | cut -f4 -d':'`
+      used=`echo "${line}" | cut -f5 -d':'`
+
+    if [ "${used}" = "use" ] ; then
+      if [ "${mpoint}" = "/" ] ; then
+        name=`echo ${pname} | sed -e 's,/dev/,,'`
+        PARTUUID=`LANG=en_US.UTF-8 lsblk -ln -o name,partuuid | grep "^${name}" | tr -s ' ' | cut -f2 -d' '`
+            UUID=`LANG=en_US.UTF-8 lsblk -ln -o name,uuid | grep "^${name}" | tr -s ' ' | cut -f2 -d' '`
+        set_part_uuid "${pname}" "${PARTUUID}"
+             set_uuid "${pname}" "${UUID}"
+      elif [ "${mpoint}" = "/home" ] ; then
+        name=`echo ${pname} | sed -e 's,/dev/,,'`
+        PARTUUID=`LANG=en_US.UTF-8 lsblk -ln -o name,partuuid | grep "^${name}" | tr -s ' ' | cut -f2 -d' '`
+            UUID=`LANG=en_US.UTF-8 lsblk -ln -o name,uuid | grep "^${name}" | tr -s ' ' | cut -f2 -d' '`
+        set_part_uuid "${pname}" "${PARTUUID}"
+             set_uuid "${pname}" "${UUID}"
+      elif [ "${fstype}" = "vfat" -a "${mpoint}" = "/boot/efi" ] ; then
+        name=`echo ${pname} | sed -e 's,/dev/,,'`
+        PARTUUID=`LANG=en_US.UTF-8 lsblk -ln -o name,partuuid | grep "^${name}" | tr -s ' ' | cut -f2 -d' '`
+            UUID=`LANG=en_US.UTF-8 lsblk -ln -o name,uuid | grep "^${name}" | tr -s ' ' | cut -f2 -d' '`
+        set_part_uuid "${pname}" "${PARTUUID}"
+             set_uuid "${pname}" "${UUID}"
+      elif [ "${fstype}" = "swap" ] ; then
+        name=`echo ${pname} | sed -e 's,/dev/,,'`
+        PARTUUID=`LANG=en_US.UTF-8 lsblk -ln -o name,partuuid | grep "^${name}" | tr -s ' ' | cut -f2 -d' '`
+            UUID=`LANG=en_US.UTF-8 lsblk -ln -o name,uuid | grep "^${name}" | tr -s ' ' | cut -f2 -d' '`
+        set_part_uuid "${pname}" "${PARTUUID}"
+             set_uuid "${pname}" "${UUID}"
+      fi
+    fi
+  done
+}
+#
+# End of Partitions functions.
+#
+################################################################
+
+####################################################################
+#
+# prepare /etc/fstab - create temporary /etc/fstab according to
+#                      the table of formated partitions.
+#
+fstab=$TMP/fstab.$$
+
+prepare_dev_etc_fstab() {
+  cat > $fstab << EOF
+#
+# /etc/fstab
+#
+# --------------+----------------+-----------+------------------------------------+------+------
+#        device | mount point    | FS type   | options                            | dump | pass
+# --------------+----------------+-----------+------------------------------------+------+------
+
+EOF
+
+  cat "${partlist}" | while read -r line ; do
+    pname= ; fstype= ; mpoint= ; dump= ; pass=
+
+     pname=`echo "${line}" | cut -f1 -d':'`
+    fstype=`echo "${line}" | cut -f3 -d':'`
+    mpoint=`echo "${line}" | cut -f4 -d':'`
+      used=`echo "${line}" | cut -f5 -d':'`
+
+    if [ "${used}" = "use" ] ; then
+      if [ "${mpoint}" = "/" ] ; then
+        dump=1 ; pass=1
+      elif [ "${mpoint}" = "/home" ] ; then
+        dump=1 ; pass=2
+      elif [ "${fstype}" = "vfat" -a "${mpoint}" = "/boot/efi" ] ; then
+        dump=1 ; pass=0
+      elif [ "${mpoint}" = "swap" ] ; then
+        dump=0 ; pass=0
+      else
+        dump=1 ; pass=2
+      fi
+      printf "%-16s %-16s %-11s %-36s %-6s %s\n" "${pname}" "${mpoint}" "${fstype}" "defaults" "${dump}" "${pass}" >> ${fstab}
+    fi
+  done
+  echo "" >> ${fstab}
+  printf "%-16s %-16s %-11s %-36s %-6s %s\n" "devpts" "/dev/pts" "devpts" "gid=5,mode=620"      "0" "0" >> ${fstab}
+  printf "%-16s %-16s %-11s %-36s %-6s %s\n" "proc"   "/proc"    "proc"   "defaults"            "0" "0" >> ${fstab}
+  printf "%-16s %-16s %-11s %-36s %-6s %s\n" "tmpfs"  "/dev/shm" "tmpfs"  "nosuid,nodev,noexec" "0" "0" >> ${fstab}
+
+  cat >> ${fstab} << EOF
+
+# --------------+----------------+-----------+------------------------------------+------+------
+EOF
+}
+
+prepare_uuid_etc_fstab() {
+  cat > $fstab << EOF
+#
+# /etc/fstab
+#
+# ----------------------------------------+----------------+-----------+------------------------------------+------+------
+#                  device                 | mount point    | FS type   | options                            | dump | pass
+# ----------------------------------------+----------------+-----------+------------------------------------+------+------
+
+EOF
+
+  cat "${partlist}" | while read -r line ; do
+    pname= ; fstype= ; mpoint= ; dump= ; pass=
+
+     pname=`echo "${line}" | cut -f1 -d':'`
+    fstype=`echo "${line}" | cut -f3 -d':'`
+    mpoint=`echo "${line}" | cut -f4 -d':'`
+      used=`echo "${line}" | cut -f5 -d':'`
+      uuid=`echo "${line}" | cut -f7 -d':'`
+
+    if [ "${used}" = "use" ] ; then
+      if [ "${mpoint}" = "/" ] ; then
+        dump=1 ; pass=1
+      elif [ "${mpoint}" = "/home" ] ; then
+        dump=1 ; pass=2
+      elif [ "${fstype}" = "vfat" -a "${mpoint}" = "/boot/efi" ] ; then
+        dump=1 ; pass=0
+      elif [ "${mpoint}" = "swap" ] ; then
+        dump=0 ; pass=0
+      else
+        dump=1 ; pass=2
+      fi
+      printf "%-42s %-16s %-11s %-36s %-6s %s\n" "UUID=${uuid}" "${mpoint}" "${fstype}" "defaults" "${dump}" "${pass}" >> ${fstab}
+    fi
+  done
+  echo "" >> ${fstab}
+  printf "%-42s %-16s %-11s %-36s %-6s %s\n" "devpts" "/dev/pts" "devpts" "gid=5,mode=620"      "0" "0" >> ${fstab}
+  printf "%-42s %-16s %-11s %-36s %-6s %s\n" "proc"   "/proc"    "proc"   "defaults"            "0" "0" >> ${fstab}
+  printf "%-42s %-16s %-11s %-36s %-6s %s\n" "tmpfs"  "/dev/shm" "tmpfs"  "nosuid,nodev,noexec" "0" "0" >> ${fstab}
+
+  cat >> ${fstab} << EOF
+
+# ----------------------------------------+----------------+-----------+------------------------------------+------+------
+EOF
+}
+
+prepare_partuuid_etc_fstab() {
+  if [ "${partition_table_type}" = "g" ] ; then
+    local dlen=46
+    cat > $fstab << EOF
+#
+# /etc/fstab
+#
+# --------------------------------------------+----------------+-----------+------------------------------------+------+------
+#                    device                   | mount point    | FS type   | options                            | dump | pass
+# --------------------------------------------+----------------+-----------+------------------------------------+------+------
+
+EOF
+  else
+    local dlen=21
+    cat > $fstab << EOF
+#
+# /etc/fstab
+#
+# -------------------+----------------+-----------+------------------------------------+------+------
+#             device | mount point    | FS type   | options                            | dump | pass
+# -------------------+----------------+-----------+------------------------------------+------+------
+
+EOF
+  fi
+
+  cat "${partlist}" | while read -r line ; do
+    pname= ; fstype= ; mpoint= ; dump= ; pass=
+
+     pname=`echo "${line}" | cut -f1 -d':'`
+    fstype=`echo "${line}" | cut -f3 -d':'`
+    mpoint=`echo "${line}" | cut -f4 -d':'`
+      used=`echo "${line}" | cut -f5 -d':'`
+     puuid=`echo "${line}" | cut -f6 -d':'`
+
+    if [ "${used}" = "use" ] ; then
+      if [ "${mpoint}" = "/" ] ; then
+        dump=1 ; pass=1
+      elif [ "${mpoint}" = "/home" ] ; then
+        dump=1 ; pass=2
+      elif [ "${fstype}" = "vfat" -a "${mpoint}" = "/boot/efi" ] ; then
+        dump=1 ; pass=0
+      elif [ "${mpoint}" = "swap" ] ; then
+        dump=0 ; pass=0
+      else
+        dump=1 ; pass=2
+      fi
+      printf "%-${dlen}s %-16s %-11s %-36s %-6s %s\n" "PARTUUID=${puuid}" "${mpoint}" "${fstype}" "defaults" "${dump}" "${pass}" >> ${fstab}
+    fi
+  done
+  echo "" >> ${fstab}
+  printf "%-${dlen}s %-16s %-11s %-36s %-6s %s\n" "devpts" "/dev/pts" "devpts" "gid=5,mode=620"      "0" "0" >> ${fstab}
+  printf "%-${dlen}s %-16s %-11s %-36s %-6s %s\n" "proc"   "/proc"    "proc"   "defaults"            "0" "0" >> ${fstab}
+  printf "%-${dlen}s %-16s %-11s %-36s %-6s %s\n" "tmpfs"  "/dev/shm" "tmpfs"  "nosuid,nodev,noexec" "0" "0" >> ${fstab}
+
+  if [ "${partition_table_type}" = "g" ] ; then
+    cat >> ${fstab} << EOF
+
+# --------------------------------------------+----------------+-----------+------------------------------------+------+------
+EOF
+  else
+    cat >> ${fstab} << EOF
+
+# -------------------+----------------+-----------+------------------------------------+------+------
+EOF
+  fi
+}
+#
+# End of prepare /etc/fstab functions.
+#
+####################################################################
+
+####################################################################
+#
+# prepare /boot/grub/grub.cfg - create temporary
+#                               /boot/grub/grub.cfg according to
+#                               the table of formated partitions.
+#
+grub_cfg=$TMP/grub.cfg.$$
+grub_load_cfg=$TMP/grub.load.cfg.$$
+grub_core_img=$TMP/grub.core.img.$$
+
+prepare_grub_config()
+{
+  local root_uuid=`cat "${partlist}" | grep ':/:' | cut -f7 -d':'`
+  local root_partuuid=`cat "${partlist}" | grep ':/:' | cut -f6 -d':'`
+
+  cat > ${grub_cfg} << EOF
+
+set menu_color_normal=black/light-gray
+set menu_color_highlight=white/light-gray
+set background_color=black
+
+set timeout=5
+
+EOF
+
+  if [ "${hardware}" = "baikal-m1" ] ; then
+    cat >> ${grub_cfg} << EOF
+font '/boot/grub/fonts/dejavusansmono.pf2'
+EOF
+  fi
+
+  cat >> ${grub_cfg} << EOF
+loadfont dejavusansmono
+
+menuentry 'Radix cross Linux' {
+  set root_uuid=${root_uuid}
+  set part_uuid=${root_partuuid}
+
+  insmod gzio
+  insmod xzio
+EOF
+
+  if [ "${hardware}" = "intel-pc32" ] ; then
+    cat >> ${grub_cfg} << EOF
+  insmod part_msdos
+EOF
+  fi
+
+  cat >> ${grub_cfg} << EOF
+  insmod part_gpt
+  insmod ext2
+
+  search --set=root --fs-uuid \$root_uuid
+EOF
+
+  if [ "${hardware}" = "ebox-3350dx2" -o \
+       "${hardware}" = "intel-pc32"   -o \
+       "${hardware}" = "intel-pc64" ] ; then
+    cat >> ${grub_cfg} << EOF
+  linux (\$root)/boot/vmlinuz root=PARTUUID=\$part_uuid ro rootwait console=tty0
+EOF
+  fi
+
+  if [ "${hardware}" = "baikal-m1" ] ; then
+    cat >> ${grub_cfg} << EOF
+  linux (\$root)/boot/Image root=PARTUUID=\$part_uuid ro rootwait console=tty1 earlyprintk=uart8250-32bit,0x20230000,115200
+EOF
+  fi
+
+  cat >> ${grub_cfg} << EOF
+}
+EOF
+}
+
+prepare_grub_load_config()
+{
+  local root_uuid=`cat "${partlist}" | grep ':/:' | cut -f7 -d':'`
+
+  cat > ${grub_load_cfg} << EOF
+
+set color_normal=black/black
+
+set pager=1
+search.fs_uuid ${root_uuid} root
+set prefix=(\$root)/boot/grub
+
+set color_normal=light-gray/black
+clear
+EOF
+}
+#
+# End of prepare /boot/grub/grub.cfg functions.
+#
+####################################################################
+
+####################################################################
+#
+# Install packages:
+#
+errlist=$TMP/errlist.$$
+
+ROOT=
+ROOT_MPOINT=
+
+install_packages()
+{
+  ROOT=`get_rootfs_devname`
+  ROOT_MPOINT=$MNT/root
+
+  if [ "x${ROOT}" = "x" ] ; then
+    fatal_error_dialog "Cannot mount ROOT partition. Exit ${program}."
+    push_log "ERROR: Cannot mount ROOT partition"
+    push_log "Aborted due to an error"
+    push_err "ERROR: Cannot mount ROOT partition"
+    EXITSTATUS=21
+    exit
+  fi
+
+  if `mount | grep -q ${ROOT}` ; then
+    umount ${ROOT}
+  fi
+  mkdir -p ${ROOT_MPOINT}
+  if [ "x`mount | grep ${ROOT_MPOINT}`" != "x" ] ; then
+    umount ${ROOT_MPOINT}
+  fi
+  mount ${ROOT} ${ROOT_MPOINT}
+
+  TMP=/tmp install-pkglist --errlist --info-dialog --priority all --root=${ROOT_MPOINT}/ ${repo} 2>${errlist}
+
+  mkdir -p ${ROOT_MPOINT}/etc
+  cat ${fstab} > ${ROOT_MPOINT}/etc/fstab
+
+  if [ "${hardware}" = "baikal-m1"    -o \
+       "${hardware}" = "ebox-3350dx2" -o \
+       "${hardware}" = "intel-pc32"   -o \
+       "${hardware}" = "intel-pc64" ] ; then
+    mkdir -p ${ROOT_MPOINT}/boot/grub
+    cat ${grub_cfg} > ${ROOT_MPOINT}/boot/grub/grub.cfg
+  fi
+}
+#
+# End of install packages:
+#
+####################################################################
+
+####################################################################
+#
+# Install GRUB:
+#
+UEFI=
+UEFI_MPOINT=
+
+install_baikal_m1_grub()
+{
+  UEFI=`get_uefi_devname`
+  UEFI_MPOINT=$MNT/UEFI
+
+  if [ "x${UEFI}" = "x" ] ; then
+    fatal_error_dialog "Cannot mount EFI partition. Exit ${program}."
+    push_log "ERROR: Cannot mount EFI partition"
+    push_log "Aborted due to an error"
+    push_err "ERROR: Cannot mount EFI partition"
+    EXITSTATUS=22
+    exit
+  fi
+
+  if `mount | grep -q ${UEFI}` ; then
+    umount ${UEFI}
+  fi
+  mkdir -p ${UEFI_MPOINT}
+  if [ "x`mount | grep ${UEFI_MPOINT}`" != "x" ] ; then
+    umount ${UEFI_MPOINT}
+  fi
+  mount ${UEFI} ${UEFI_MPOINT}
+
+  local grub_modules="all_video archelp bfs bitmap bitmap_scale blocklist boot btrfs"
+  grub_modules="${grub_modules} cat chain configfile cpio date datehook datetime disk diskfilter"
+  grub_modules="${grub_modules} echo efi_gop efifwsetup efinet elf eval exfat ext2 extcmd f2fs fat"
+  grub_modules="${grub_modules} fdt file font fshelp gettext gfxmenu gfxterm gfxterm_background"
+  grub_modules="${grub_modules} gfxterm_menu gptsync gzio halt hashsum help hexdump iso9660 jpeg"
+  grub_modules="${grub_modules} json keystatus linux loadenv loopback ls lsefi lzopio mdraid1x"
+  grub_modules="${grub_modules} memdisk minicmd msdospart net newc normal part_gpt part_msdos"
+  grub_modules="${grub_modules} png probe procfs read reboot regexp reiserfs search search_fs_file"
+  grub_modules="${grub_modules} search_fs_uuid search_label serial squash4 tar terminal terminfo"
+  grub_modules="${grub_modules} test tftp time tr trig true udf ufs1 ufs2 video video_colors"
+  grub_modules="${grub_modules} video_fb videoinfo xzio zstd"
+
+  /usr/sbin/grub-install --skip-fs-probe \
+                         --fonts=dejavusansmono \
+                         --boot-directory=${ROOT_MPOINT}/boot \
+                         --directory=/usr/lib/grub/arm64-efi \
+                         --target=arm64-efi --no-efi \
+                         --no-bootsector --no-nvram  2>/dev/null 1>/dev/null
+
+  mkdir -p ${ROOT_MPOINT}/boot/efi
+  mkdir -p ${ROOT_MPOINT}/boot/grub/arm64-efi
+  cat ${grub_load_cfg} > ${ROOT_MPOINT}/boot/grub/arm64-efi/load.cfg
+
+  mkdir -p ${UEFI_MPOINT}/efi/boot
+  /usr/bin/grub-mkimage --format=arm64-efi \
+                        --directory=/usr/lib/grub/arm64-efi \
+                        --compression=xz \
+                        --prefix=/efi/boot \
+                        --config="${grub_load_cfg}" \
+                        --output=${UEFI_MPOINT}/efi/boot/bootaa64.efi \
+                        ${grub_modules}  2>/dev/null 1>/dev/null
+}
+
+install_intel_pc64_grub()
+{
+  UEFI=`get_uefi_devname`
+  UEFI_MPOINT=$MNT/UEFI
+
+  if [ "x${UEFI}" = "x" ] ; then
+    fatal_error_dialog "Cannot mount EFI partition. Exit ${program}."
+    push_log "ERROR: Cannot mount EFI partition"
+    push_log "Aborted due to an error"
+    push_err "ERROR: Cannot mount EFI partition"
+    EXITSTATUS=22
+    exit
+  fi
+
+  if `mount | grep -q ${UEFI}` ; then
+    umount ${UEFI}
+  fi
+  mkdir -p ${UEFI_MPOINT}
+  if [ "x`mount | grep ${UEFI_MPOINT}`" != "x" ] ; then
+    umount ${UEFI_MPOINT}
+  fi
+  mount ${UEFI} ${UEFI_MPOINT}
+
+  local grub_modules="part_gpt part_msdos fat f2fs ext2 hfs hfsplus iso9660 udf ufs1 ufs2 chain linux"
+  grub_modules="${grub_modules} boot appleldr configfile normal regexp minicmd reboot halt search search_fs_file"
+  grub_modules="${grub_modules} search_fs_uuid search_label gfxterm gfxmenu efi_gop efi_uga all_video loadbios"
+  grub_modules="${grub_modules} gzio echo true probe loadenv bitmap_scale font cat help ls png jpeg tga test"
+  grub_modules="${grub_modules} at_keyboard usb_keyboard zstd"
+
+  /usr/sbin/grub-install --skip-fs-probe \
+                         --fonts=dejavusansmono \
+                         --boot-directory=${ROOT_MPOINT}/boot \
+                         --directory=/usr/lib/grub/x86_64-efi \
+                         --target=x86_64-efi --no-efi \
+                         --no-bootsector --no-nvram  2>/dev/null 1>/dev/null
+
+  mkdir -p ${ROOT_MPOINT}/boot/efi
+  mkdir -p ${ROOT_MPOINT}/boot/grub/x86_64-efi
+  cat ${grub_load_cfg} > ${ROOT_MPOINT}/boot/grub/x86_64-efi/load.cfg
+
+  mkdir -p ${UEFI_MPOINT}/efi/boot
+  /usr/bin/grub-mkimage --format=x86_64-efi \
+                        --directory=/usr/lib/grub/x86_64-efi \
+                        --compression=xz \
+                        --prefix=/efi/boot \
+                        --config="${grub_load_cfg}" \
+                        --output=${UEFI_MPOINT}/efi/boot/bootx64.efi \
+                        ${grub_modules}  2>/dev/null 1>/dev/null
+}
+
+install_intel_pc32_grub()
+{
+  local disk=${1}
+
+  local grub_modules="part_gpt part_msdos fat f2fs ext2 hfs hfsplus iso9660 udf ufs1 ufs2 chain linux"
+  grub_modules="${grub_modules} boot biosdisk configfile normal regexp minicmd reboot halt search search_fs_file"
+  grub_modules="${grub_modules} search_fs_uuid search_label gfxterm gfxmenu all_video gzio echo true probe loadenv"
+  grub_modules="${grub_modules} bitmap_scale font cat help ls png jpeg tga test at_keyboard usb_keyboard zstd"
+
+  /usr/sbin/grub-install --skip-fs-probe \
+                         --fonts=dejavusansmono \
+                         --boot-directory=${ROOT_MPOINT}/boot \
+                         --directory=/usr/lib/grub/i386-pc \
+                         --target=i386-pc \
+                         --modules="${grub_modules}" \
+                         --disk-module=biosdisk \
+                         ${disk}  2>/dev/null 1>/dev/null
+
+  mkdir -p ${ROOT_MPOINT}/boot/grub/i386-pc
+  cat ${grub_load_cfg} > ${ROOT_MPOINT}/boot/grub/i386-pc/load.cfg
+
+  /usr/bin/grub-mkimage --format=i386-pc \
+                        --directory=/usr/lib/grub/i386-pc \
+                        --prefix=/boot/grub \
+                        --config="${grub_load_cfg}" \
+                        --output=${grub_core_img} \
+                        ${grub_modules}  2>/dev/null 1>/dev/null
+
+  dd if=${grub_core_img} of=${disk} obs=512 seek=1 conv=notrunc  2>/dev/null 1>/dev/null
+}
+
+install_ebox_3350dx2_grub()
+{
+  local disk=${1}
+
+  local grub_modules="part_gpt part_msdos fat f2fs ext2 hfs hfsplus iso9660 udf ufs1 ufs2 chain linux"
+  grub_modules="${grub_modules} boot biosdisk configfile normal regexp minicmd reboot halt search search_fs_file"
+  grub_modules="${grub_modules} search_fs_uuid search_label gfxterm gfxmenu all_video gzio echo true probe loadenv"
+  grub_modules="${grub_modules} bitmap_scale font cat help ls png jpeg tga test at_keyboard usb_keyboard zstd"
+
+  /usr/sbin/grub-install --skip-fs-probe \
+                         --fonts=dejavusansmono \
+                         --boot-directory=${ROOT_MPOINT}/boot \
+                         --directory=/usr/lib/grub/i386-pc \
+                         --target=i386-pc \
+                         --modules="${grub_modules}" \
+                         --disk-module=biosdisk \
+                         ${disk}  2>/dev/null 1>/dev/null
+
+  mkdir -p ${ROOT_MPOINT}/boot/grub/i386-pc
+  cat ${grub_load_cfg} > ${ROOT_MPOINT}/boot/grub/i386-pc/load.cfg
+
+  /usr/bin/grub-mkimage --format=i386-pc \
+                        --directory=/usr/lib/grub/i386-pc \
+                        --prefix=/boot/grub \
+                        --config="${grub_load_cfg}" \
+                        --output=${grub_core_img} \
+                        ${grub_modules}  2>/dev/null 1>/dev/null
+
+  dd if=${grub_core_img} of=${disk} obs=512 seek=1 conv=notrunc  2>/dev/null 1>/dev/null
+}
+#
+# End of install GRUB:
+#
+####################################################################
+
+####################################################################
+#
+# Install U-Boot:
+#
+install_leez_p710_uboot()
+{
+  local disk=${1}
+
+  dd if=${ROOT_MPOINT}/boot/u-boot/idbloader.img of=${disk} bs=512 seek=64     2>/dev/null 2>/dev/null
+  dd if=${ROOT_MPOINT}/boot/u-boot/u-boot.itb    of=${disk} bs=512 seek=16384  2>/dev/null 2>/dev/null
+
+  ln -sfr ${ROOT_MPOINT}/boot/boot.emmc.scr ${ROOT_MPOINT}/boot/boot.scr
+}
+#
+# End of install U-Boot:
+#
+####################################################################
+
+
+#
+# Parse Options:
+#
+while [ 0 ]; do
+  if [ "$1" = "-h" -o "$1" = "--help" ] ; then
+    usage
+    exit
+  elif [ "$1" = "-r" -o "$1" = "--root-dev" ]; then
+    if [ "$2" = "" ]; then
+      usage
+      push_log "ERROR: Target DEVICE has not specified by --root-dev option"
+      push_log "Aborted due to an error"
+      push_err "ERROR: Target DEVICE has not specified by --root-dev option"
+      EXITSTATUS=16
+      exit
+    fi
+    device="`echo $2 | sed 's,/$,,'`"
+    shift 2
+  elif [ "$1" = "--repo" ]; then
+    if [ "$2" = "" ]; then
+      usage
+      push_log "ERROR: Custom REPO directory has not specified by --repo option"
+      push_err "ERROR: Custom REPO directory has not specified by --repo option"
+      EXITSTATUS=18
+      exit
+    fi
+    custom_repo="$2"
+    if ! `echo ${custom_repo: -1} | grep -q '/'` ; then
+      custom_repo="${custom_repo}/"
+    fi
+    shift 2
+  else
+    break
+  fi
+done
+
+if [ "x${custom_repo}" != "xno" ] ; then
+  check_custom_repo "${custom_repo}"
+else
+  check_repo "${repo}"
+  ret=$?
+  if [ $ret -ne 0 ] ; then
+    fatal_error_dialog "Source REPO directory is invalid. Exit ${program}."
+    push_log "ERROR: Source REPO directory is invalid"
+    push_log "Aborted due to an error"
+    push_err "ERROR: Source REPO directory is invalid"
+    EXITSTATUS=17
+    exit
+  fi
+fi
+
+#
+# Show DISTRO spec:
+# ----------------
+#
+if [ "x${custom_repo}" != "xyes" ] ; then
+  welcome_setup
+else
+  welcome_custom_setup
+fi
+
+check_current_device
+check_target_device
+
+#
+# Ask for format target device:
+# ----------------------------
+#
+ask_formatting "${device}"
+blockdev -q --rereadpt "${device}"
+
+#
+# File Systems:
+# ------------
+#
+check_partitions "${device}"
+partitions_loop "${device}"
+$DIALOG --colors \
+        --backtitle "\Z7Radix\Zn \Z1cross\Zn\Z7 Linux\Zn" \
+        --title " \Z0Install Packages\Zn " \
+        --infobox "\n Please wait for packages installation.\n\n" 5 74
+check_filesystems
+
+#
+# /etc/fstab:
+# ----------
+#
+if [ "${hardware}" = "baikal-m1" -o \
+     "${hardware}" = "intel-pc64" ] ; then
+  prepare_partuuid_etc_fstab
+else
+  prepare_uuid_etc_fstab
+  #prepare_dev_etc_fstab
+fi
+
+#
+# /boot/grub/grub.cfg:
+# -------------------
+#
+if [ "${hardware}" = "baikal-m1"    -o \
+     "${hardware}" = "ebox-3350dx2" -o \
+     "${hardware}" = "intel-pc32"   -o \
+     "${hardware}" = "intel-pc64" ] ; then
+  prepare_grub_config
+  prepare_grub_load_config
+fi
+
+#
+# Install all packages:
+# --------------------
+#
+install_packages
+
+#
+# Install GRUB:
+# ------------
+#
+if [ "${hardware}" = "baikal-m1" ] ; then
+  install_baikal_m1_grub
+fi
+if [ "${hardware}" = "intel-pc64" ] ; then
+  install_intel_pc64_grub
+fi
+if [ "${hardware}" = "intel-pc32" ] ; then
+  install_intel_pc32_grub "${device}"
+fi
+if [ "${hardware}" = "ebox-3350dx2" ] ; then
+  install_ebox_3350dx2_grub "${device}"
+fi
+
+#
+# Install GRUB:
+# ------------
+#
+if [ "${hardware}" = "leez-p710" ] ; then
+  install_leez_p710_uboot "${device}"
+fi
+
+#
+# post-install settings:
+#
+if [ -x ${ROOT_MPOINT}/usr/sbin/timeconfig ] ; then
+  ${ROOT_MPOINT}/usr/sbin/timeconfig --root ${ROOT_MPOINT}
+fi
+
+$DIALOG --colors --clear \
+        --backtitle "\Z7Radix\Zn \Z1cross\Zn\Z7 Linux\Zn" \
+        --title " \Z0System Installation is Complete\Zn " \
+        --msgbox "\nSetup is complete. Please set \Z1root\Zn password at first login.\n" 7 74
+
+exit
Index: where-we-are
===================================================================
--- where-we-are	(nonexistent)
+++ where-we-are	(revision 5)
@@ -0,0 +1,272 @@
+#!/bin/bash
+
+program=`basename $0`
+sbindir=`cd $(dirname ${BASH_SOURCE[0]}) >/dev/null 2>&1 && pwd`
+
+# 14 = target device is not a partition
+# 15 = target device is not found
+EXITSTATUS=0
+
+usage() {
+  cat << EOF
+
+Usage: $program [options] [partition]
+
+options:
+    -o, --output <list> - output columns
+    -n, --no-header     - output columns without header line
+
+  Available columns (for --output):
+
+               DISK  device name of HW disk
+               ROOT  device name of current ROOT partition
+               UUID  filesystem UUID
+              MAJOR  device major number
+              MINOR  device minor number
+
+optional argument:
+
+     partition     - If 'partition' is present then we assume that the 'partition'
+                     is a root FS partition. In this case the $program do not try
+                     to find working root FS partition.
+
+EOF
+}
+
+push_err() {
+  local message=$1
+  echo -n "$program: " 1>&2 ; echo "${message}" 1>&2
+}
+
+#
+# returns root partition device (such as /dev/part_name)
+#
+root_part() {
+  local dev=`findmnt --noheadings --raw / | tr -s ' ' | cut -f2 -d' '`
+  if [ "$dev" != "" ] ; then
+    echo "$dev"
+    return 0
+  fi
+}
+
+major_number() {
+  local part=$1
+  local name=`basename $part`
+
+  local major=`ls -l /dev | grep -v ^l | grep ${name} | tr -s ' ' | sed 's/,//g' | cut -f5 -d' ' | sort -u | tr '\n' ',' | sed 's/,$//'`
+  echo "${major}"
+}
+
+minor_number() {
+  local part=$1
+  local name=`basename $part`
+
+  local minor=`ls -l /dev | grep -v ^l | grep ${name} | tr -s ' ' | sed 's/,//g' | cut -f6 -d' ' | sort -u | tr '\n' ',' | sed 's/,$//'`
+  echo "${minor}"
+}
+
+#
+# returns root partition disk (such as /dev/disk_name)
+#
+root_disk_by_part() {
+  local part=$1
+  local mjrs=`major_number $1`
+  local disks="`lsblk -I ${mjrs} -l -o name,type | grep 'disk\|raid\|loop$' | cut -f1 -d' '`"
+  disks="`echo -e "$disks" | sort -r`"
+  for line in $disks ; do
+    local found=`echo "$part" | grep "$line"`
+    if [ "$found" != "" ] ; then
+      echo "/dev/$line"
+      break
+    fi
+  done
+}
+
+root_disk() {
+  local part=$1
+  local name=`basename $part`
+  local mjrs=`major_number $1`
+  echo "`lsblk -I ${mjrs} -l -o name,type`" | grep $name | while read -r line ; do
+    local type=`echo "$line" | tr -s ' ' | cut -f2 -d' '`
+    if [ "$type" = "part" ] ; then
+      root_disk_by_part $part
+      break
+    fi
+  done
+}
+
+#
+# returns root partition UUID (by /dev/part_name)
+#
+root_uuid() {
+  local part=`basename $1`
+  local mjrs=`major_number $1`
+  echo "`lsblk -I ${mjrs} -l -o name,uuid`" | while read -r line ; do
+    local pname=`echo "$line" | tr -s ' ' | cut -f 1 -d ' '`
+    local puuid=`echo "$line" | tr -s ' ' | cut -f 2 -d ' '`
+
+    if [ `echo "$pname" | grep "$part"` ] ; then
+      echo "$puuid"
+      break
+    fi
+  done
+}
+
+
+check_root_partition_device() {
+  local part=$1
+  local base=`basename $part`
+  local mjrs=`major_number $1`
+  line="`lsblk -I ${mjrs} -l -o name,type | grep \"$base \" | head -1 | tr -s ' '`"
+  if [ "$line" != "" ] ; then
+    local name=`echo "$line" | tr -s ' ' | cut -f1 -d' '`
+    local type=`echo "$line" | tr -s ' ' | cut -f2 -d' '`
+    if [ "$base" = "$name" ] && [ "$type" != "part" ] ; then
+      push_err "ERROR: The DEVICE ($part) is not a disk partition"
+      EXITSTATUS=14
+      exit $EXITSTATUS
+    fi
+  else
+    push_err "ERROR: The DEVICE ($part) not found"
+    EXITSTATUS=15
+    exit $EXITSTATUS
+  fi
+}
+
+
+#
+# Optional argument:
+#
+ROOT_PARTITION=
+
+#
+# Parse options:
+#
+HEADER="yes"
+OTPUTLIST="DISK,ROOT,UUID,MAJOR,MINOR"
+
+while [ 0 ] ; do
+  if [ "$1" = "-h" -o "$1" = "--help" ] ;  then
+    usage
+    exit 0
+  elif [ "$1" = "-o" -o "$1" = "--output" ] ; then
+    if [ "$2" != "" ] ; then
+      OTPUTLIST="$2"
+      shift 2
+    else
+      shift 1
+    fi
+  elif [ "$1" = "-n" -o "$1" = "--no-header" ] ; then
+    HEADER="no"
+    shift 1
+  else
+    ROOT_PARTITION="$1"
+    break
+  fi
+done
+
+#
+# check optional partition (if present):
+#
+if [ "${ROOT_PARTITION}" != "" ] ; then
+  if [ ! `echo ${ROOT_PARTITION} | grep "^/dev.*"` ] ; then
+    push_err "ERROR: Wrong PARTITION device name: ${ROOT_PARTITION}"
+    usage
+    exit 1
+  fi
+  check_root_partition_device ${ROOT_PARTITION}
+fi
+
+
+################################################################
+# main()
+#
+
+#
+# root partition /dev/... :
+#
+if [ "${ROOT_PARTITION}" != "" ] ; then
+  root_part=${ROOT_PARTITION}
+else
+  root_part=`root_part`
+fi
+
+#
+# root phy disk /dev/... :
+#
+root_disk=`root_disk ${root_part}`
+
+#
+# root partition UUID :
+#
+root_uuid=`root_uuid ${root_part}`
+
+#
+# root partition device MAJOR number :
+#
+root_major=`major_number ${root_part}`
+
+#
+# root partition device MINOR number :
+#
+root_minor=`minor_number ${root_part}`
+
+
+if [ "$OTPUTLIST" != "" ] ; then
+  list=`echo $OTPUTLIST | sed 's/,/ /g' | tr '[:upper:]' '[:lower:]'`
+
+  if [ "$HEADER" = "yes" ] ; then
+
+    root_disk_len=${#root_disk}
+    root_part_len=${#root_part}
+    root_uuid_len=${#root_uuid}
+    root_major_len=${#root_major}
+    if [ ${root_major_len} -lt 5 ] ; then
+      root_major_len=5
+    fi
+    root_minor_len=${#root_minor}
+    if [ ${root_minor_len} -lt 5 ] ; then
+      root_minor_len=5
+    fi
+
+    out=""
+    for item in $list ; do
+      if   [ "$item" = "disk"    ] ; then
+        out="$out `printf '%-*s' ${root_disk_len} 'DISK'`"
+      elif [ "$item" = "root"    ] ; then
+        out="$out `printf '%-*s' ${root_part_len} 'ROOT'`"
+      elif [ "$item" = "uuid"    ] ; then
+        out="$out `printf '%-*s' ${root_uuid_len} 'UUID'`"
+      elif [ "$item" = "major" ] ; then
+        out="$out `printf '%-*s' ${root_major_len} 'MAJOR'`"
+      elif [ "$item" = "minor" ] ; then
+        out="$out `printf '%-*s' ${root_minor_len} 'MINOR'`"
+      fi
+    done
+    out=`echo "$out" | sed 's/^[ \t]*//;s/[ \t]*$//'`
+    echo "$out"
+  else
+    root_disk_len=${#root_disk}
+    root_part_len=${#root_part}
+    root_uuid_len=${#root_uuid}
+    root_major_len=${#root_major}
+    root_minor_len=${#root_minor}
+  fi
+
+  out=""
+  for item in $list ; do
+    if   [ "$item" = "disk"    ] ; then
+      out="$out `printf '%-*s' ${root_disk_len} ${root_disk}`"
+    elif [ "$item" = "root"    ] ; then
+      out="$out `printf '%-*s' ${root_part_len} ${root_part}`"
+    elif [ "$item" = "uuid"    ] ; then
+      out="$out `printf '%-*s' ${root_uuid_len} ${root_uuid}`"
+    elif [ "$item" = "major" ] ; then
+      out="$out `printf '%-*s' ${root_major_len} ${root_major}`"
+    elif [ "$item" = "minor" ] ; then
+      out="$out `printf '%-*s' ${root_minor_len} ${root_minor}`"
+    fi
+  done
+  out=`echo "$out" | sed 's/^[ \t]*//;s/[ \t]*$//'`
+  echo "$out"
+fi
Index: .
===================================================================
--- .	(nonexistent)
+++ .	(revision 5)

Property changes on: .
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~