summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYour Name <you@example.com>2020-09-09 06:33:30 -0400
committerbill-auger <mr.j.spam.me@gmail.com>2020-09-13 21:53:40 -0400
commit1f6b0dee8455b48e35a8c09a5410bfbe37607fa3 (patch)
tree7a889d40cbcd21a3d1950e8c37cb0ad707662107
parentcd0fbc448c0d7b28de2d31fae24e4426c457c272 (diff)
[wizard]: present detailed partition information
-rw-r--r--configs/profile/root-image/etc/skel/.dialogrc2
-rwxr-xr-xconfigs/profile/root-image/root/.session/install/chroot-environment.sh79
-rwxr-xr-xconfigs/profile/root-image/root/.session/install/chroot-login.sh22
-rwxr-xr-xconfigs/profile/root-image/root/.session/install/install.sh610
-rw-r--r--configs/profile/root-image/root/.session/session-common.sh.inc202
-rw-r--r--configs/profile/root-image/root/.session/translations.sh.inc364
6 files changed, 806 insertions, 473 deletions
diff --git a/configs/profile/root-image/etc/skel/.dialogrc b/configs/profile/root-image/etc/skel/.dialogrc
index f43558e..b1ed5b6 100644
--- a/configs/profile/root-image/etc/skel/.dialogrc
+++ b/configs/profile/root-image/etc/skel/.dialogrc
@@ -5,7 +5,7 @@ tab_len = 2
use_colors = ON
# Screen color
-screen_color = (BLACK,BLACK,ON)
+screen_color = (BLUE,BLACK,ON)
# Shadow color
shadow_color = (BLACK,BLACK,ON)
diff --git a/configs/profile/root-image/root/.session/install/chroot-environment.sh b/configs/profile/root-image/root/.session/install/chroot-environment.sh
index 5be3195..6a074fb 100755
--- a/configs/profile/root-image/root/.session/install/chroot-environment.sh
+++ b/configs/profile/root-image/root/.session/install/chroot-environment.sh
@@ -3,73 +3,40 @@
source /root/session-common.sh.inc
-# prompt for hostname
-hostname=$( WizardDlg "${TR[menu_config-${TR_KEY}]}" \
- --inputbox "${TR[hostname-${TR_KEY}]}" 8 40 )
-echo ${hostname} > /etc/hostname
+# configure hostname
+echo $(GetStateVar 'HOSTNAME') > /etc/hostname
-# prompt for timezone
-timezone=$( WizardDlg "${TR[menu_config-${TR_KEY}]}" \
- --inputbox "${TR[timezone-${TR_KEY}]}" 8 40 )
-ln -s /usr/share/zoneinfo/${timezone} /etc/localtime
+# configure timezone
+ln -s /usr/share/zoneinfo/$(GetStateVar 'TIMEZONE') /etc/localtime
-# prompt for keymap
-live_keymap=$(GetStateVar 'XKBMAP' 'us')
-keymaps=()
-for keymap in $(cat "${WIZARD_DIR}"/KEYMAPS_VT)
-do selected_state=$( [[ ${keymap} =~ ^${live_keymap} ]] && echo 'on' || echo 'off' )
- keymaps+=( "${keymap}" "${keymap}" ${selected_state} )
-done
-keymap=$( WizardDlg "${TR[menu_config-${TR_KEY}]}" \
- --radiolist "${TR[keymap-${TR_KEY}]}" 20 70 50 \
- "${keymaps[@]}" )
-echo "KEYMAP=${keymap}" > /etc/vconsole.conf
+# configure keymap
+echo "KEYMAP=$(GetStateVar 'KEYMAP')" > /etc/vconsole.conf
-# prompt for locale
-all_locales=$( sed -e '1,23d' -e 's/#//g' -e 's/ /#/g' -e 's/..$//' /etc/locale.gen )
-live_locale=$( GetStateVar 'LANG' 'en_US' )
-locales=()
-for locale in ${all_locales}
-do locale=$(echo ${locale} | sed -e 's/#/ /g')
- selected_state=$( [[ ${locale} =~ ^${live_locale} ]] && echo 'on' || echo 'off' )
- locales+=( "${locale}" "${locale}" ${selected_state} )
-done
-locales=$( WizardDlg "${TR[menu_config-${TR_KEY}]}" \
- --checklist "${TR[locales-${TR_KEY}]}" 20 70 50 \
- "${locales[@]}" )
-locales=$(echo ${locales} | sed -e 's/" "/\n/g' -e 's/ /#/g' -e 's/"//g')
+# configure locales
+locales=$(echo $(GetStateVar 'LOCALES') | sed -e 's/" "/\n/g' -e 's/ /#/g' -e 's/"//g')
for locale in ${locales[@]}
do locale=$(echo ${locale} | sed -e 's/#/ /g')
sed -i -e "s/#${locale}/${locale}/g" /etc/locale.gen
done
locale-gen
-# prompt for language
-live_language=$(GetStateVar 'LANG' 'en_US.UTF-8')
-language=()
-while read language
-do selected_state=$( [[ ${language} =~ ^${live_language} ]] && echo 'on' || echo 'off' )
- languages+=( "${language% *}" "${language#*\ }" ${selected_state} )
-done << <(cat "${WIZARD_DIR}"/LANGUAGES)
-language=$( WizardDlg "${TR[menu_config-${TR_KEY}]}" \
- --radiolist "${TR[language-${TR_KEY}]}" 20 70 50 \
- "${languages[@]}" )
-echo "LANG=${language}" > /etc/locale.conf
+# configure language
+echo "LANG=$(GetStateVar 'LANGUAGE')" > /etc/locale.conf
-# prepare initrd and GRUB
+# prepare initrd
mkinitcpio -p linux-libre
-device=$(GetStateVar 'DEVICE')
-which grub-install &> /dev/null && grub-install ${device}
-which grub-mkconfig &> /dev/null && grub-mkconfig -o /boot/grub/grub.cfg
-# initialize root user
-pass='changeme' pass2=''
-while [[ "$pass" != "$pass2" ]]
-do pass=$( WizardDlg "${TR[menu_config-${TR_KEY}]}" \
- --passwordbox "${TR[root_pass-${TR_KEY}]}" 8 40 )
- pass2=$( WizardDlg "${TR[menu_config-${TR_KEY}]}" \
- --passwordbox "${TR[root_pass2-${TR_KEY}]}" 8 40 )
-done
-usermod -p $(openssl passwd ${pass}) root
+# install and configure GRUB
+if [[ "$(GetStateVar 'BOOT')" == 'grub' ]]
+then device=$(GetStateVar 'DEVICE')
+ grub-install ${device}
+ grub-mkconfig -o /boot/grub/grub.cfg
+
+ # enable Parabola GRUB theme
+ sed -i "$GRUB_THEME_SED_CMD" /mnt/etc/default/grub
+fi
+
+# configure root login
+usermod -p $(openssl passwd $(GetStateVar 'ROOT_PASS')) root
exit
diff --git a/configs/profile/root-image/root/.session/install/chroot-login.sh b/configs/profile/root-image/root/.session/install/chroot-login.sh
index 203a356..83ab248 100755
--- a/configs/profile/root-image/root/.session/install/chroot-login.sh
+++ b/configs/profile/root-image/root/.session/install/chroot-login.sh
@@ -6,8 +6,6 @@ source /root/session-common.sh.inc
readonly WHEEL_SUDOERS_SED_CMD='s|[#] [%]wheel ALL=[(]ALL[)] ALL|%wheel ALL=(ALL) ALL|'
-ValidateLogin() { Login=$(tr -d '[:space:]' <<<${Login}) ; [[ -n "${Login}" ]] ; } # TODO:
-
GsettingsSet() # (kvp)
{
sudo -u ${Login} gsettings set $*
@@ -16,22 +14,10 @@ GsettingsSet() # (kvp)
## main entry ##
-DlgTitle=$( ${TR[dlg_user-${TR_KEY}]/*) }
-
-# create unprivileged user
-Login=''
-until ValidateLogin
-do Login=$( WizardDlg "${DlgTitle}" \
- --inputbox "${TR[user_login-${TR_KEY}]}" 8 40 )
-done
-Pass='changeme' Pass2=''
-while [[ "${Pass}" != "${Pass2}" ]]
-do Pass=$( WizardDlg "${DlgTitle}" \
- --passwordbox "${TR[user_pass-${TR_KEY}]} '${Login}':" 8 40 )
- Pass2=$( WizardDlg "${DlgTitle}" \
- --passwordbox "${TR[user_pass2-${TR_KEY}]} '${Login}':" 8 40 )
-done
-useradd -m -g users -G 'wheel' -s /bin/bash -p $(openssl passwd ${Pass}) ${Login}
+# register unprivileged user
+Login=$(GetStateVar 'USER_LOGIN')
+Pass=$(openssl passwd $(GetStateVar 'USER_PASS'))
+useradd -m -g users -G 'wheel' -s /bin/bash -p ${Pass} ${Login}
# set keymap
Keymap=$(GetStateVar 'XKBMAP')
diff --git a/configs/profile/root-image/root/.session/install/install.sh b/configs/profile/root-image/root/.session/install/install.sh
index 7858ea3..8ab38c7 100755
--- a/configs/profile/root-image/root/.session/install/install.sh
+++ b/configs/profile/root-image/root/.session/install/install.sh
@@ -3,6 +3,20 @@
source $(cd $(dirname ${BASH_SOURCE[0]}) ; pwd)/../session-common.sh.inc
+declare -r -A BASE_PACKAGES=( ['core']='base' \
+ ['standard']='base parabola-base' )
+declare -r -A BOOT_PACKAGES=( ['grub']='grub grub2-theme-gnuaxiom' )
+declare -r -A GUI_PACKAGES=( ['lxde']='parabola-desktop-lxde' \
+ ['mate']='parabola-desktop-mate' ) # TODO: parabola-desktop NYI
+readonly DEF_INSTALL='offline'
+readonly DEF_PKG_SET='standard'
+readonly DEF_INIT='systemd'
+readonly DEF_WMDE='cli'
+readonly DEF_HOSTNAME='parabola'
+readonly DEF_TIMEZONE='UTC'
+readonly DEF_KEYMAP='us'
+readonly DEF_LOCALE='en_US'
+readonly DEF_LANGUAGE='en_US.UTF-8'
readonly PACCONF_NONSYSTEMD_REGEX='N ; s|^#\[nonsystemd\].*#Include|\[nonsystemd\]\nInclude|'
readonly PACCONF_SYSTEMD_REGEX='N ; s|^\[nonsystemd\].*Include|#\[nonsystemd\]\n#Include|'
readonly ONLINE_CHECK_URL=https://repo.parabola.nu/check_network_status.txt
@@ -11,16 +25,16 @@ readonly GRUB_THEME_SED_CMD='s|^#GRUB_THEME=.*|GRUB_THEME=/boot/grub/themes/para
Init()
{
- echo "${TR[internet-${TR_KEY}]} ...."
+ echo "${TR[online-${TR_KEY}]} ...."
local has_isorepo=$( [[ ! -d /isorepo ]] && echo 1 || echo 0 )
local is_online=$( curl ${ONLINE_CHECK_URL} &> /dev/null && echo 1 || echo 0 )
- if [[ ${has_isorepo} && ${is_online} ]] ; then SetStateVar 'INSTALL' 'prompt' ;
- elif [[ ${has_isorepo} ]] ; then SetStateVar 'INSTALL' 'offline' ;
- else SetStateVar 'INSTALL' 'online' ;
- fi
+ (( has_isorepo | is_online )) || ! echo "${TR[offline-${TR_KEY}]} ...." || exit
-DbgDlg "has_isorepo=$has_isorepo is_online=$is_online install=$install"
+ if (( has_isorepo & is_online )) ; then SetStateVar 'INSTALL' 'prompt' ;
+ elif (( has_isorepo )) ; then SetStateVar 'INSTALL' 'offline' ;
+ elif (( is_online )) ; then SetStateVar 'INSTALL' 'online' ;
+ fi
}
InitKeyring()
@@ -33,238 +47,412 @@ InitKeyring()
fi
}
-Partition()
+NoticeCustomize() { WizardDlg "" --msgbox "${TR[notice_customize-${TR_KEY}]}" 0 0 ; }
+
+SelectDefaults()
{
- umount /mnt &> /dev/null || true
+ if (( $( WizardDlg "${TR[dlg_defaults-${TR_KEY}]}" \
+ --yesno "${TR[defaults-${TR_KEY}]}" 20 70 ) ))
+ then [[ "$(GetStateVar 'INSTALL')" == 'prompt' ]] && \
+ SetStateVar 'INSTALL' ${DEF_INSTALL}
+ SetStateVar 'BASE' ${DEF_PKG_SET}
+ SetStateVar 'INIT' ${DEF_INIT}
+ SetStateVar 'WMDE' ${DEF_WMDE}
+ SetStateVar 'HOSTNAME' ${DEF_HOSTNAME}
+ SetStateVar 'TIMEZONE' ${DEF_TIMEZONE}
+ SetStateVar 'KEYMAP' $(GetStateVar 'XKBMAP' ${DEF_KEYMAP} )
+ SetStateVar 'LOCALES' $(GetStateVar 'LANG' ${DEF_LOCALE} )
+ SetStateVar 'LANGUAGE' $(GetStateVar 'LANG' ${DEF_LANGUAGE})
+ fi
+}
- # prompt for disk device
- local hd_devices=$(ls /dev/sd?)
- local hdds=()
- local hd_device
- local capacity
- local hdd
- for hd_device in ${hd_devices}
- do capacity=$(fdisk --list /dev/sda | head --lines=1 | sed 's|.*: \([^,]*\),.*|\1|')
- hdds+=( "${hd_device}" "${capacity}" off )
+SelectLogins()
+{
+ # prompt for root user password
+ local pass='in valid' pass2='not valid'
+ until [[ "${pass}" == "${pass2}" ]]
+ do pass='in valid' pass2='not valid'
+ until ValidateId "${pass}"
+ do pass=$( WizardDlg "${TR[dlg_env-${TR_KEY}]}" \
+ --passwordbox "${TR[root_pass-${TR_KEY}]}" 8 56 )
+ [[ -n "${pass}" ]] || exit
+ done
+ until ValidateId "${pass2}"
+ do pass2=$( WizardDlg "${TR[dlg_env-${TR_KEY}]}" \
+ --passwordbox "${TR[root_pass2-${TR_KEY}]}" 8 56 )
+ [[ -n "${pass2}" ]] || exit
+ done
done
- hdd=$( WizardDlg "${TR[dlg_part-${TR_KEY}]}" \
- --radiolist "${TR[hdd-${TR_KEY}]}" 20 70 50 "${hdds[@]}" )
- [[ -n "${hdd}" ]] && SetStateVar 'HDD' ${hdd} || exit
+ SetStateVar 'ROOT_PASS' ${pass}
- # prompt for partitioner
- local part_method=$( WizardDlg "${TR[dlg_part-${TR_KEY}]}" \
- --menu "${TR[part-${TR_KEY}]}" 20 70 50 \
- 'auto' "${TR[part_auto-${TR_KEY}]}" \
- 'manual' "${TR[part_man-${TR_KEY}]}" )
- [[ -n "${part_method}" ]] || exit
-
- # partitioning
- local root_part
- case ${part_method} in
- 'auto')
- # create partition table
- parted -s ${device} -- mklabel msdos
-
- # create partitions
- parted -s ${hdd} -- mkpart primary 1MiB 1000MiB
- parted -s ${hdd} -- mkpart primary 1000MiB -1s
- parted -s ${hdd} -- set 2 boot on
-
- # format partitions
- (echo t ; echo 1 ; echo 82 ; echo w) | fdisk ${hdd}
- mkswap ${hdd}1
- mkfs.ext4 ${hdd}2
-
- root_part=${hdd}2
- ;;
- 'manual')
- if which gparted &> /dev/null ; then gparted ${hdd} ;
- elif which cfdisk &> /dev/null ; then cfdisk ${hdd} ; fi ;
-
- # prompt for root partition
- local partitions=()
- local partition
- for partition in $(ls ${hdd}?)
- do capacity=$(df --human-readable --output=size ${partition} | tail --lines=1 | tr -d ' ')
- partitions+=( "${partition}" "${capacity}" off )
- done
- root_part=$( WizardDlg "${TR[dlg_part-${TR_KEY}]}" \
- --radiolist "${TR[mount_root-${TR_KEY}]}" 20 70 50 \
- ${partitions[@]} )
- [[ -n "${root_part}" ]] || exit
-
- # prompt to mount additional partitions
- local other=0
- local boot_part
- local home_part
- while [[ "${other}" != 3 ]]
- do other=$( WizardDlg "${TR[dlg_part-${TR_KEY}]}" --cancel-label "None" \
- --menu "${TR[mount_other-${TR_KEY}]}" 20 70 50 \
- 1 "/boot" 2 "/home" 3 "Done" )
- case $other in
- 1) boot_part=$( WizardDlg "${TR[dlg_part-${TR_KEY}]}" \
- --radiolist "${TR[mount_boot-${TR_KEY}]}" 20 70 50 \
- ${partitions[@]} )
- umount /mnt/boot &> /dev/null || true
- mkdir /mnt/boot &> /dev/null || true
- ;;
- 2) home_part=$( WizardDlg "${TR[dlg_part-${TR_KEY}]}" \
- --radiolist "${TR[mount_home-${TR_KEY}]}" 20 70 50 \
- ${partitions[@]} )
- umount /mnt/home &> /dev/null || true
- mkdir /mnt/home &> /dev/null || true
- ;;
- *) other=3
- ;;
- esac
- done
- ;;
- *) exit ;;
- esac
-
- # format unformatted partitions and mount partitions
- for partition in ${root_part} ${boot_part} ${home_part}
- do ! blkid ${partition} | grep ' TYPE="' &> /dev/null && \
- WizardDlg "${TR[dlg_part-${TR_KEY}]}" \
- --yesno "${partition} ${TR[format-${TR_KEY}]}" 20 70 && \
- mkfs.ext4 ${partition}
- blkid ${partition} | grep ' TYPE="' > /dev/null || exit
+ # prompt to create an unprivileged user login
+ (( $( WizardDlg "${dlg_title}" --yesno "${TR[user-${TR_KEY}]}" 20 70 ) )) || return 0
+
+ # prompt for unprivileged user login and password
+ local dlg_title="${TR[dlg_user-${TR_KEY}]/*) }" # trim "(Optional) "
+ local login=''
+ pass='in valid' pass2='not valid'
+ until ValidateId "${login}"
+ do login=$( WizardDlg "${dlg_title}" \
+ --inputbox "${TR[user_login-${TR_KEY}]}" 8 56 ${login/ *} )
+ [[ -n "${login}" ]] || exit
done
- mount ${root_part} /mnt
- mount ${boot_part} /mnt/boot || [[ -z "${boot_part}" ]]
- mount ${home_part} /mnt/home || [[ -z "${home_part}" ]]
-}
-
-NoticeCustomize() { WizardDlg "" --msgbox "${TR[notice_customize-${TR_KEY}]}" 20 70 ; }
-
-SelectDefaults()
-{
- if WizardDlg "${TR[dlg_defaults-${TR_KEY}]}" --yesno "${TR[defaults-${TR_KEY}]}" 20 70
- then SetStateVar 'BASE' 'base parabola-base'
- SetStateVar 'INIT' 'openrc'
- fi
+ until [[ "${pass}" == "${pass2}" ]]
+ do pass='in valid' pass2='not valid'
+ until ValidateId "${pass}"
+ do pass=$( WizardDlg "${dlg_title}" \
+ --passwordbox "${TR[user_pass-${TR_KEY}]} '${login}':" 8 56 )
+ [[ -n "${pass}" ]] || exit
+ done
+ until ValidateId "${pass2}"
+ do pass2=$( WizardDlg "${dlg_title}" \
+ --passwordbox "${TR[user_pass2-${TR_KEY}]} '${login}':" 8 56 )
+ [[ -n "${pass2}" ]] || exit
+ done
+ done
+ SetStateVar 'USER_LOGIN' ${login}
+ SetStateVar 'USER_PASS' ${pass}
}
SelectBase()
{
- if [[ -n "$(SetStateVar 'BASE')" && -n "$(GetStateVar 'INIT')" ]] ; then return 0 ; fi ;
+ # check to skip this stage per SelectDefaults()
+ [[ -z "$(GetStateVar 'BASE')" || -z "$(GetStateVar 'INIT')" ]] || return 0
+
+ # prompt for local vs remote package repos if possible
+ local install=$( [[ "$(GetStateVar 'INSTALL')" != 'prompt' ]] && \
+ echo $(GetStateVar 'INSTALL') || \
+ WizardDlg "${TR[dlg_base-${TR_KEY}]}" \
+ --menu "${TR[install-${TR_KEY}]}" 20 70 50 \
+ 'offline' "${TR[install_offline-${TR_KEY}]}" \
+ 'online' "${TR[install_online-${TR_KEY}]}" )
+ [[ -n "${install}" ]] && SetStateVar 'INSTALL' ${install} || exit
# prompt for base package set
- local base=$( WizardDlg "${TR[dlg_base-${TR_KEY}]}" \
- --radiolist "${TR[base-${TR_KEY}]}" 20 70 50 \
- 'core' "${TR[base_mini-${TR_KEY}]}" 'off' \
- 'posix' "${TR[base_posix-${TR_KEY}]}" 'on' )
- local base_packages=( 'base' $( [[ "${base}" == 'posix' ]] && echo 'parabola-base' || : ) )
- [[ -n "${base}" ]] && SetStateVar 'BASE' ${base_packages} || exit
+ local base=$( WizardDlg "${TR[dlg_base-${TR_KEY}]}" \
+ --menu "${TR[base-${TR_KEY}]}" 20 70 50 \
+ 'core' "${TR[base_mini-${TR_KEY}]}" \
+ 'standard' "${TR[base_posix-${TR_KEY}]}" )
+ [[ -n "${base}" ]] && SetStateVar 'BASE' ${base} || exit
# prompt for init-system
- local init=$( WizardDlg "${TR[dlg_base-${TR_KEY}]}" \
- --radiolist "${TR[init-${TR_KEY}]}" 20 70 50 \
- 'openrc' "${TR[init_openrc-${TR_KEY}]}" 'off' \
- 'systemd' "${TR[init_systemd-${TR_KEY}]}" 'on' )
+ local init=$( WizardDlg "${TR[dlg_base-${TR_KEY}]}" \
+ --menu "${TR[init-${TR_KEY}]}" 20 70 50 \
+ 'openrc' "${TR[init_openrc-${TR_KEY}]}" \
+ 'systemd' "${TR[init_systemd-${TR_KEY}]}" )
[[ -n "${init}" ]] && SetStateVar 'INIT' ${init} || exit
-
- # prompt for local vs remote package repos if possible
- local install=$(GetStateVar 'INSTALL')
- local install=$( [[ "${install}" == 'prompt' ]] && \
- WizardDlg "${TR[dlg_base-${TR_KEY}]}" \
- --radiolist "${TR[install-${TR_KEY}]}" 20 70 50 \
- 'offline' "${TR[install_offline-${TR_KEY}]}" 'on' \
- 'online' "${TR[install_online-${TR_KEY}]}" 'off' )
- [[ -n "${install}" ]] && SetStateVar 'INSTALL' ${install} || exit
}
-InstallBase()
+NoticeOptional() { WizardDlg "" --msgbox "${TR[notice_optional-${TR_KEY}]}" 0 0 ; }
+
+SelectBoot()
{
- local conf_regex=$( [[ "${init}" == 'openrc' ]] && echo "$PACCONF_NONSYSTEMD_REGEX" || \
- echo "$PACCONF_SYSTEMD_REGEX" )
- local install=$(GetStateVar 'INSTALL')
- local base_packages=$(GetStateVar 'BASE')
+ # prompt to install GRUB
+ (( $( WizardDlg "${TR[dlg_boot-${TR_KEY}]}" \
+ --yesno "${TR[grub-${TR_KEY}]}" 20 70 ) )) && \
+ SetStateVar 'BOOT' 'grub' ||
+ SetStateVar 'BOOT' 'none'
+}
- sed -i "$conf_regex" /etc/pacman-${install}.conf
- cp /etc/pacman-${install}.conf /etc/pacman.conf
+SelectWmde()
+{
+ # check to skip this stage per SelectDefaults()
+ [[ -z "$(GetStateVar 'WMDE')" ]] && SetStateVar 'WMDE' 'cli' || return 0
- # install standard packages
- pacstrap /mnt base ${base_packages[@]}
+ # prompt to install a graphical environment
+ if (( $( WizardDlg "${TR[dlg_wmde-${TR_KEY}]}" \
+ --yesno "${TR[gui-${TR_KEY}]}" 20 70 ) ))
+ then # prompt for WM/DE
+ local wmde=$( WizardDlg "${TR[dlg_wmde-${TR_KEY}]}" \
+ --menu "${TR[wmde-${TR_KEY}]}" 20 70 50 \
+ 'cli' "${TR[wmde_cli-${TR_KEY}]}" \
+ 'lxde' "${TR[wmde_lxde-${TR_KEY}]}" \
+ 'mate' "${TR[wmde_mate-${TR_KEY}]}" )
+ [[ -n "${wmde}" ]] || exit
+ SetStateVar 'WMDE' ${wmde}
+ fi
}
-ConfigChroot()
+SelectEnv()
{
- genfstab -p /mnt >> /mnt/etc/fstab
- cp "${SESSION_STATE_FILE}" /mnt/root/
- cp "${SESSION_INCLUDE_FILE}" /mnt/root/
- cp "${CHROOT_ENVIRONMENT_FILE}" /mnt/root/
- chmod +x /mnt/root/${CHROOT_ENVIRONMENT_FILENAME}
- arch-chroot /mnt /root/${CHROOT_ENVIRONMENT_FILENAME}
- rm /mnt/root/${CHROOT_ENVIRONMENT_FILENAME}
+ [[ -z "$(GetStateVar 'HOSTNAME')" || -z "$(GetStateVar 'TIMEZONE')" || \
+ -z "$(GetStateVar 'KEYMAP' )" || -z "$(GetStateVar 'LOCALES' )" || \
+ -z "$(GetStateVar 'LANGUAGE')" ]] || return 0
+
+ local curr_msg="${TR[option_current-${TR_KEY}]}"
+
+ # prompt for hostname, if not set per SelectDefaults()
+ local hostname=''
+ until ValidateId "${hostname}"
+ do hostname=$( WizardDlg "${TR[dlg_env-${TR_KEY}]}" \
+ --inputbox "${TR[hostname-${TR_KEY}]}" 8 56 \
+ $( [[ -n "${hostname}" ]] && echo ${hostname/ *} || \
+ echo ${DEF_HOSTNAME} ) )
+ [[ -n "${hostname}" ]] || exit
+ done
+ SetStateVar 'HOSTNAME' ${hostname}
+
+ # prompt for timezone, if not set per SelectDefaults()
+ local timezone=''
+ if [[ -n "$(GetStateVar 'TIMEZONE')" ]]
+ then until ValidateId "${timezone}"
+ do timezone=$( WizardDlg "${TR[dlg_env-${TR_KEY}]}" \
+ --inputbox "${TR[timezone-${TR_KEY}]}" 8 56 \
+ $( [[ -n "${timezone}" ]] && echo ${timezone/ *} || \
+ echo ${DEF_TIMEZONE} ) )
+ [[ -n "${timezone}" ]] || exit
+ done
+ SetStateVar 'TIMEZONE' ${timezone}
+ fi
+
+ # prompt for keymap
+ local keymap
+ local keymaps=()
+ for keymap in $(cat "${WIZARD_DIR}"/KEYMAPS_VT)
+ do if [[ ${keymap} =~ ^$(GetStateVar 'XKBMAP' 'us') ]]
+ then keymaps=( "${keymap}" "${keymap} ${curr_msg}" "${keymaps[@]}" )
+ else keymaps+=( "${keymap}" "${keymap}" )
+ fi
+ done
+ keymap=$( WizardDlg "${TR[dlg_env-${TR_KEY}]}" \
+ --menu "${TR[keymap-${TR_KEY}]}" 20 70 50 \
+ "${keymaps[@]}" )
+ [[ -n "${keymap}" ]] && SetStateVar 'KEYMAP' ${keymap} || exit
+
+ # prompt for locale
+ local all_locales=$( sed -e '1,23d' -e 's/#//g' -e 's/ /#/g' -e 's/..$//' /etc/locale.gen )
+ local locales=()
+ for locale in ${all_locales}
+ do locale=$(echo ${locale} | sed -e 's/#/ /g')
+ if [[ ${locale} =~ ^$(GetStateVar 'LANG' 'en_US') ]]
+ then locales=( "${locale}" "${locale}" 'on' "${locales[@]}" )
+ else locales+=( "${locale}" "${locale}" 'off' )
+ fi
+ done
+ locales=$( WizardDlg "${TR[dlg_env-${TR_KEY}]}" \
+ --checklist "${TR[locales-${TR_KEY}]}" 20 70 50 \
+ "${locales[@]}" )
+ [[ -n "${locales}" ]] && SetStateVar 'LOCALES' "${locales}" || exit
+
+ # prompt for language
+ local language
+ local languages=()
+ cat "${WIZARD_DIR}"/LANGUAGES | \
+ while read language
+ do if [[ ${language} =~ ^$(GetStateVar 'LANG' 'en_US.UTF-8') ]]
+ then languages=( "${language% *}" "${language#*\ } ${curr_msg}" "${languages[@]}" )
+ else languages+=( "${language% *}" "${language#*\ }" )
+ fi
+ done
+ language=$( WizardDlg "${TR[dlg_env-${TR_KEY}]}" \
+ --menu "${TR[language-${TR_KEY}]}" 20 70 50 \
+ "${languages[@]}" )
+ [[ -n "${language}" ]] && SetStateVar 'LANGUAGE' ${language} || exit
}
-NoticeOptional() { WizardDlg "" --msgbox "${TR[notice_optional-${TR_KEY}]}" 20 70 ; }
+SelectPartition()
+{
+ umount /mnt &> /dev/null || true
+
+ # query disk device information
+ PopulateDisksOptions # populates DlgParams
+ (( ${#DlgParams[@]} )) || ! echo "${TR[device_none-${TR_KEY}]}" || exit
+
+ # prompt for disk device
+ local device_n=$( WizardDlg "${TR[dlg_part-${TR_KEY}]}" \
+ --menu "${TR[device-${TR_KEY}]}" 20 70 50 "${DlgParams[@]}" )
+ local device=$( GetDevice $(( ${device_n} - 1 )) )
+ [[ -n "${device_n}" ]] && [[ -n "${device}" ]] && SetStateVar 'DEVICE' ${device} || exit
+
+ # prompt for partitioner
+ local part_method=$( WizardDlg "${TR[dlg_part-${TR_KEY}]}" \
+ --menu "${TR[part-${TR_KEY}]}" 20 70 50 \
+ 'auto' "${TR[part_auto-${TR_KEY}]}" \
+ 'manual' "${TR[part_man-${TR_KEY}]}" )
+ [[ -n "${part_method}" ]] && SetStateVar 'PART_METHOD' ${part_method} || exit
+
+ if [[ "${part_method}" == 'manual' ]]
+ then # manual partitioning
+ if which gparted &> /dev/null ; then gparted ${device} ;
+ elif which cfdisk &> /dev/null ; then cfdisk ${device} ; fi ;
+
+ # query partition information
+ PopulatePartOptions ${device_n} # populates DlgParams
+ (( ${#DlgParams[@]} )) || ! echo "${TR[part_none-${TR_KEY}]}" || exit
+
+ # prompt for root partition
+ local part_n=$( WizardDlg "${TR[dlg_part-${TR_KEY}]}" \
+ --menu "${TR[mount_root-${TR_KEY}]}" 20 70 50 \
+ "${DlgParams[@]}" )
+ if [[ -n "${part_n}" ]]
+ then SetStateVar 'ROOT_PART' ${device}${part_n}
+ RemoveOption ${part_n} ; PopulatePartOptions ${device_n} ;
+ else exit
+ fi
+
+ # prompt to mount additional partitions
+ if (( ${#DlgParams[@]} ))
+ then part_n=$( WizardDlg "${TR[dlg_part-${TR_KEY}]}" \
+ --ok-label "Yes" \
+ --cancel-label "No" \
+ --menu "${TR[mount_boot-${TR_KEY}]}" 20 70 50 \
+ "${DlgParams[@]}" )
+ if [[ -n "${part_n}" ]]
+ then SetStateVar 'BOOT_PART' ${device}${part_n}
+ RemoveOption ${part_n} ; PopulatePartOptions ${device_n} ;
+ fi
+ fi
+ if (( ${#DlgParams[@]} ))
+ then part_n=$( WizardDlg "${TR[dlg_part-${TR_KEY}]}" \
+ --ok-label "Yes" \
+ --cancel-label "No" \
+ --menu "${TR[mount_home-${TR_KEY}]}" 20 70 50 \
+ "${DlgParams[@]}" )
+ if [[ -n "${part_n}" ]]
+ then SetStateVar 'HOME_PART' ${device}${part_n}
+ RemoveOption ${part_n} ; PopulatePartOptions ${device_n} ;
+ fi
+ fi
+ fi
+}
-InstallGrub()
+NoticeReady()
{
- # prompt to install GRUB
- local grub=$( WizardDlg "${TR[dlg_grub-${TR_KEY}]}" \
- --radiolist "${TR[grub-${TR_KEY}]}" 20 70 50 \
- 'yes' "${TR[yes-${TR_KEY}]}" 'on' \
- 'no' "${TR[no-${TR_KEY}]}" 'off' )
- [[ -n "${grub}" ]] || exit
- [[ "${grub}" == 'yes' ]] || return
+ (( $( WizardDlg "" --yesno "${TR[notice_ready-${TR_KEY}]}" 0 0 ) )) || exit
+}
- pacstrap /mnt grub grub2-theme-gnuaxiom
+Partition()
+{
+ local device=$( GetStateVar 'DEVICE' )
+ local part_method=$(GetStateVar 'PART_METHOD')
+ local root_part=$( GetStateVar 'ROOT_PART' )
+ local boot_part=$( GetStateVar 'BOOT_PART' )
+ local home_part=$( GetStateVar 'HOME_PART' )
+ [[ -n "${device}" ]]
+ [[ -n "${part_method}" ]]
+ [[ -n "${root_part}" ]]
+ [[ -n "${boot_part}" ]]
+ [[ -n "${home_part}" ]]
+
+ if [[ "${part_method}" == 'manual' ]]
+ then [[ -n "${root_part}" && -n "${boot_part}" && -n "${home_part}" ]]
+ elif [[ "${part_method}" == 'auto' ]]
+ then # automatic partitioning
+ local root_part_n=1
+ local swap_part_n=2
+ local root_type_n=83
+ local swap_type_n=82
+ root_part=${device}${root_part_n}
+
+ # create partition table
+ parted -s ${device} -- mklabel msdos
+
+ # configure partitions
+ parted -s ${device} -- mkpart primary 1MiB -1000MiB # $root_part_n
+ parted -s ${device} -- mkpart primary -1000MiB -1s # $swap_part_n
+ parted -s ${device} -- set ${root_part_n} boot on
+
+ # format partitions
+ sleep 0.5 ; partprobe ;
+ (echo t ; echo ${root_part_n} ; echo ${root_type_n} ; echo w) | \
+ fdisk ${device} &> /dev/null
+ sleep 0.5 ; partprobe ;
+ (echo t ; echo ${swap_part_n} ; echo ${swap_type_n} ; echo w) | \
+ fdisk ${device} &> /dev/null
+ yes | mkfs.ext4 ${device}${root_part_n} &> /dev/null
+ mkswap ${device}${swap_part_n} &> /dev/null
+ fi
- # enable Parabola theme for grub
- sed -i "$GRUB_THEME_SED_CMD" /mnt/etc/default/grub
+ # format un-formatted partitions and mount partitions
+ local partition
+ umount /mnt &> /dev/null || true
+ umount /mnt/boot &> /dev/null || true
+ umount /mnt/home &> /dev/null || true
+ for partition in ${root_part} ${boot_part} ${home_part}
+ do # prompt to format un-formatted partiion
+ ! blkid ${partition} | grep ' TYPE="' &> /dev/null && \
+ (( $( WizardDlg "${TR[dlg_part-${TR_KEY}]}" \
+ --yesno "${partition} ${TR[format-${TR_KEY}]}" 20 70 ) )) && \
+ mkfs.ext4 ${partition} > /dev/null || true
+
+ # final validation
+ blkid ${partition} | grep ' TYPE="' &> /dev/null
+ done
+ if [[ -n "${root_part}" ]] ; then mkdir -p /mnt
+ mount ${root_part} /mnt ; fi ;
+ if [[ -n "${boot_part}" ]] ; then mkdir -p /mnt/boot
+ mount ${boot_part} /mnt/boot ; fi ;
+ if [[ -n "${home_part}" ]] ; then mkdir -p /mnt/home
+ mount ${home_part} /mnt/home ; fi ;
}
-InstallWmDe()
+InstallPkgs()
{
- # prompt to install a graphical environment
- local desktop=$( WizardDlg "${TR[dlg_wmde-${TR_KEY}]}" \
- --radiolist "${TR[gui-${TR_KEY}]}" 20 70 50 \
- 'yes' "${TR[yes-${TR_KEY}]}" 'on' \
- 'no' "${TR[no-${TR_KEY}]}" 'off' )
-
- # prompt for WM/DE
- local wmde=$( [[ "${desktop}" == 'no' ]] && echo 'cli' || \
- WizardDlg "${TR[dlg_wmde-${TR_KEY}]}" \
- --radiolist "${TR[wmde-${TR_KEY}]}" 20 70 50 \
- 'cli' "${TR[wmde_cli-${TR_KEY}]}" 'off' \
- 'lxde' "${TR[wmde_lxde-${TR_KEY}]}" 'on' \
- 'mate' "${TR[wmde_mate-${TR_KEY}]}" 'off' )
- [[ -n "${wmde}" ]] && SetStateVar 'WMDE' ${wmde} || exit
-
- # install graphical packages
- [[ "${wmde}" != 'cli' ]] && pacstrap /mnt parabola-desktop-${wmde} # TODO: parabola-desktop NYI
-
- # enable services
- cp "${CHROOT_SERVICES_FILE}" /mnt/root/
- chmod +x /mnt/root/${CHROOT_SERVICES_FILENAME}
- arch-chroot /mnt /root/${CHROOT_SERVICES_FILENAME}
- rm /mnt/root/${CHROOT_SERVICES_FILENAME}
+ # sanity checks
+ [[ -n "$(GetStateVar 'INSTALL')" ]]
+ [[ -n "$(GetStateVar 'INIT' )" ]]
+ [[ -n "$(GetStateVar 'BASE' )" ]]
+ [[ -n "$(GetStateVar 'BOOT' )" ]]
+ [[ -n "$(GetStateVar 'WMDE' )" ]]
+
+ local conf_regex=$( [[ "${init}" == 'openrc' ]] && echo "$PACCONF_NONSYSTEMD_REGEX" || \
+ echo "$PACCONF_SYSTEMD_REGEX" )
+ local install=$( GetStateVar 'INSTALL')
+ local init=$( GetStateVar 'INIT' )
+ local base_set=$( GetStateVar 'BASE' )
+ local bootloader=$(GetStateVar 'BOOT' )
+ local wmde=$( GetStateVar 'WMDE' )
+ local base_packages="${BASE_PACKAGES[${base_set}]}"
+ local boot_packages="${BOOT_PACKAGES[${bootloader}]}"
+ local gui_packages="${GUI_PACKAGES[${wmde}]}"
+
+ # prepare pacman.conf for online/offline install, systemd/non-systemd
+ sed -i "$conf_regex" /etc/pacman-online.conf
+ cp /etc/pacman-${install}.conf /etc/pacman.conf
+
+ # install packages
+ pacstrap /mnt ${base_packages} ${boot_packages} ${gui_packages} | \
+ WizardDlg "${TR[pacstrap-${TR_KEY}]}" --progressbox -1 -1
}
-CreateUser()
+ConfigChroot()
{
- # prompt to create an unprivileged user login
- local user=$( WizardDlg "${TR[dlg_user-${TR_KEY}]}" \
- --radiolist "${TR[user-${TR_KEY}]}" 20 70 50 \
- 'yes' "${TR[yes-${TR_KEY}]}" 'on' \
- 'no' "${TR[no-${TR_KEY}]}" 'off' )
- [[ -n "${user}" ]] || exit
- [[ "${user}" == 'yes' ]] || return
-
- # create unprivileged user login
- cp "${CHROOT_LOGIN_FILE}" /mnt/root/
- chmod +x /mnt/root/${CHROOT_LOGIN_FILENAME}
- arch-chroot /mnt /root/${CHROOT_LOGIN_FILENAME}
- rm /mnt/root/${CHROOT_LOGIN_FILENAME}
+ # sanity checks
+ [[ -n "$(GetStateVar 'HOSTNAME' )" ]] # $CHROOT_ENVIRONMENT_FILE dependencies
+ [[ -n "$(GetStateVar 'TIMEZONE' )" ]]
+ [[ -n "$(GetStateVar 'KEYMAP' )" ]]
+ [[ -n "$(GetStateVar 'LOCALES' )" ]]
+ [[ -n "$(GetStateVar 'LANGUAGE' )" ]]
+ [[ -n "$(GetStateVar 'BOOT' )" ]]
+ [[ -n "$(GetStateVar 'DEVICE' )" ]]
+ [[ -n "$(GetStateVar 'ROOT_PASS' )" ]]
+ [[ -n "$(GetStateVar 'USER_LOGIN')" ]] # $CHROOT_LOGIN_FILE dependencies
+ [[ -n "$(GetStateVar 'USER_PASS' )" ]]
+ [[ -n "$(GetStateVar 'XKBMAP' )" ]]
+ [[ -n "$(GetStateVar 'WMDE' )" ]]
+ [[ -n "$(GetStateVar 'INIT' )" ]] # $CHROOT_SERVICES_FILE dependencies
+ [[ -n "$(GetStateVar 'WMDE' )" ]]
+
+ # copy helper scripts into the chroot and execute them in-chroot
+ genfstab -p /mnt >> /mnt/etc/fstab
+ cp "${SESSION_STATE_FILE}" /mnt/root/
+ cp "${SESSION_INCLUDE_FILE}" /mnt/root/
+ cp "${CHROOT_ENVIRONMENT_FILE}" /mnt/root/
+ cp "${CHROOT_LOGIN_FILE}" /mnt/root/
+ cp "${CHROOT_SERVICES_FILE}" /mnt/root/
+ chmod +x /mnt/root/${CHROOT_ENVIRONMENT_FILENAME}
+ chmod +x /mnt/root/${CHROOT_LOGIN_FILENAME}
+ chmod +x /mnt/root/${CHROOT_SERVICES_FILENAME}
+ arch-chroot /mnt /root/${CHROOT_ENVIRONMENT_FILENAME} # configure environment
+ arch-chroot /mnt /root/${CHROOT_LOGIN_FILENAME} # register login
+ arch-chroot /mnt /root/${CHROOT_SERVICES_FILENAME} # configure services
}
+NoticeDone() { WizardDlg "" --msgbox "${TR[notice_done-${TR_KEY}]}" 0 0 ; }
+
Cleanup()
{
- # clean-up
- arch-chroot /mnt pacman -R dialog --noconfirm &> /dev/null || true
+ # clean-up in-chroot config scripts and unmount partitions
rm /mnt/root/${SESSION_STATE_FILENAME} &> /dev/null || true
rm /mnt/root/${SESSION_INCLUDE_FILENAME} &> /dev/null || true
rm /mnt/root/${CHROOT_ENVIRONMENT_FILENAME} &> /dev/null || true
@@ -283,17 +471,21 @@ trap 'trap - ERR ; clear ; LogError() { : ; } ; Cleanup ;' EXIT
trap 'trap - EXIT INT TERM ; clear ; LogError "${FUNCNAME[0]}" ${LINENO} ;' ERR
Init # Check for isorepo existence and internet connection
-InitKeyring # Initialize the pacman keyring
-Partition # Partition and mount target disks
+InitKeyring # Initialize pacman keyring
NoticeCustomize # Explain that the next choices are mandatory but interchangeable
SelectDefaults # Choose to install the standard system, or to customize
-SelectBase # Select base system
-InstallBase # Install base system
-ConfigChroot # Generate fstab and configure system in-chroot (non-interactive)
+SelectLogins # Set root password and choose to register unprivileged login user
+SelectBase # Select base package-set (bypassed per SelectDefaults)
NoticeOptional # Explain that the next choices are optional
-InstallGrub # Install grub
-InstallWmDe # Install GUI packages and configure services in-chroot
-CreateUser # Create unpriviledged login user in-chroot
-Cleanup # Remove helper scripts from the chroot and un-mount target disks
+SelectBoot # Choose to install bootloader
+SelectWmde # Choose to install graphical environment (bypassed per SelectDefaults)
+SelectEnv # Set environment parameters for the target system (bypassed per SelectDefaults)
+SelectPartition # Partition manually or defer to automatic
+NoticeReady # List chosen options and offer last chance to bail
+Partition # Automatic partition and mount target disks (non-interactive)
+InstallPkgs # Install packages with pacstrap (non-interactive)
+ConfigChroot # Generate fstab, register login, configure services (non-interactive) (in-chroot)
+NoticeDone # Yay!!!
+Cleanup # Clean-up and un-mount the chroot (non-interactive)
exit
diff --git a/configs/profile/root-image/root/.session/session-common.sh.inc b/configs/profile/root-image/root/.session/session-common.sh.inc
index fc665f1..8ce5876 100644
--- a/configs/profile/root-image/root/.session/session-common.sh.inc
+++ b/configs/profile/root-image/root/.session/session-common.sh.inc
@@ -25,7 +25,7 @@ readonly CHROOT_SERVICES_FILE="${WIZARD_DIR}"/${CHROOT_SERVICES_FILENAME}
SetStateVar() # (var_name value*)
{
local var_name=$1 ; shift ;
- local value=$*
+ local value="$*"
sed -i "/^${var_name}=.*/d" "${SESSION_STATE_FILE}"
echo "${var_name}=${value}" >> "${SESSION_STATE_FILE}"
@@ -46,12 +46,14 @@ GetStateVar() # (var_name [def_value])
## dialog prompt helpers ##
+readonly CANCEL_STATUS=1
+
InitDlg() # (title prompt default_option options*)
{
- declare -l title="$1"
- declare -l prompt="$2"
- declare -l default_option="$3"
- declare -l options=("${@:4}")
+ local title="$1"
+ local prompt="$2"
+ local default_option="$3"
+ local options=("${@:4}")
dialog --stdout --sleep 1 --timeout 30 --no-tags --no-cancel \
--backtitle "$title" \
@@ -61,23 +63,187 @@ InitDlg() # (title prompt default_option options*)
WizardDlg() # (title dialog_args*)
{
- declare -l title="$1"
- declare -l options=("${@:2}")
-
- # when the "Cancel" button or <ESC> key is pressed, in a '--msgbox',
- # dialog exits with status 1; but nothing is printed to STDOUT
+ local title="$1"
+ local options=("${@:2}")
+ local dialog_type=${options[0]}
+ local result
+ local status
+ # when the "Cancel" button or <ESC> key is pressed, in a 'msgbox',
+ # dialog exits with a non-zero status; and nothing is printed to STDOUT
# install.sh runs under `set -e`; so we can not propogate the non-zero status,
- # otherwise, callers would need to supress it
+ # otherwise, all callers would need to supress it
# callers should instead, exit upon the empty result, when a selection is mandatory
+ # because an 'inputbox' may be blank, when the "OK" button is pressed, we emit a space,
+ # in order to maintain the invariant, such that the "OK" result is never empty
#
- # the exception is '--yesno' dialogs, which exits with status 1 for the 'No' button
- # the non-zero status is propogated for '--yesno' dialogs; and callers must handle it
- # ASSERT: '--yesno' dialogs should pass '--yesno' as positional parameter #2 (options[0])
- dialog --stdout --sleep 1 \
- --backtitle "${TR[wizard-${TR_KEY}]}" \
- --title "${title}" "${options[@]}" || \
- ( (( $? == 1 )) && [[ "${options[0]}" != '--yesno' ]] )
+ # the exception is 'yesno' dialogs, which exit with a non-zero status the 'No' button
+ # the "Cancel" and "No" buttons are identical, and indistinguishable at run-time
+ # the $YESNO_YES or $YESNO_NO values are printed explicitly for 'yesno' dialogs,
+ # so that callers can handle the 'yesno' dialogs in the same way as 'msgbox' dialogs
+ #
+ # ASSERT: all callers should pass the dialog type as positional parameter #2
+ result=$( DIALOG_ESC=${CANCEL_STATUS} \
+ dialog --stdout --insecure --sleep 1 \
+ --backtitle "${TR[wizard-${TR_KEY}]}" \
+ --title "${title}" "${options[@]}" ) && \
+ status=$? || status=$?
clear >&2
+
+ (( ! status || status == CANCEL_STATUS ))
+
+ if [[ "${dialog_type}" == '--menu' ]]
+ then echo "${result}"
+ elif [[ "${dialog_type}" == '--yesno' ]]
+ then echo $(( ! status ))
+ elif [[ "${dialog_type}" == '--inputbox' ]] ||
+ [[ "${dialog_type}" == '--passwordbox' ]]
+ then if (( status != CANCEL_STATUS ))
+ then [[ -n "${result}" ]] && echo "${result}" || echo ' '
+ fi
+ fi
+
+ (( status == CANCEL_STATUS )) && status=0 || true ;
+
+ return ${status}
+}
+
+ValidateId() # (login)
+{
+ local login="$*"
+
+ [[ "${login}" =~ ^[[:space:]]*[^[:space:]]+[[:space:]]*$ ]] # TODO: improve this
+}
+
+
+## partitioning helpers ##
+
+readonly DISK_RECORD_SEP='|'
+readonly DISK_FIELD_SEP=','
+
+declare -A PartsData # raw data
+declare -a DlgParams # dialog options
+
+GetDisksPartsData()
+{
+ local line
+ local dev
+ local format
+
+ # example parted output:
+ # BYT;
+ # /dev/sdb:9664MB:scsi:512:512:msdos:ATA X HARDDISK:;
+ # 1:1049kB:9663MB:9662MB:ext4::; # formatted
+ # 1:9663MB:9664MB:1048kB:::; # un-formatted
+ # example output:
+ # /dev/sda:42.9GB|/dev/sda1:42.9GB:ext4
+ # /dev/sdb:9664MB|/dev/sdb1:9662MB:ext4|/dev/sdb2:1048kB
+ sudo parted --list --machine | \
+ while read line
+ do
+ if [[ "${line}" == 'BYT;' ]]
+ then echo ' '
+ else if [[ "${line}" =~ ^(/dev/sd[a-z]):([^:]*): ]]
+ then dev="${BASH_REMATCH[1]}"
+ echo -n "${dev}${DISK_FIELD_SEP}${BASH_REMATCH[2]}"
+ elif [[ "${line}" =~ ^([0-9]):[^:]*:[^:]*:([^:]*):([^:]*): ]]
+ then format=$( [[ -n "${BASH_REMATCH[3]}" ]] && echo ${BASH_REMATCH[3]} || : )
+ echo -n "${DISK_RECORD_SEP}${dev}${BASH_REMATCH[1]}"
+ echo -n "${DISK_FIELD_SEP}${BASH_REMATCH[2]}"
+ echo -n "${DISK_FIELD_SEP}${format}"
+ fi
+ fi
+ done
+}
+
+GetDiskData() # (disk_data_n)
+{
+ if [[ "$1" =~ ^[0-9]+$ ]]
+ then local disk_data_n=$1
+ local disks_parts_data=( $(GetDisksPartsData) )
+ local disk_data=${disks_parts_data[${disk_data_n}]%%${DISK_RECORD_SEP}*}
+
+ tr "${DISK_FIELD_SEP}" ' ' <<<${disk_data}
+ fi
+}
+
+GetDiskPartsData() # (disk_data_n)
+{
+ local disk_data_n=$1
+ local disks_parts_data=( $(GetDisksPartsData) )
+ local disk_parts_data=${disks_parts_data[${disk_data_n}]#*${DISK_RECORD_SEP}}
+
+ tr "${DISK_RECORD_SEP}" ' ' <<<${disk_parts_data}
+}
+
+GetDiskPartData() # (disk_data_n part_data_n)
+{
+ local disk_data_n=$1
+ local part_data_n=$2
+ local disk_parts_data=( $(GetDiskPartsData ${disk_data_n}) )
+ local disk_parts_data=${disk_parts_data[${part_data_n}]}
+
+ tr "${DISK_FIELD_SEP}" ' ' <<<${disk_parts_data}
+}
+
+GetDevice() # (disk_data_n)
+{
+ local disk_data_n=$1
+ local disk_data=$(GetDiskData ${disk_data_n})
+ local device=${disk_data/ *}
+
+ echo ${device}
+}
+
+PopulatePartsData() # (disk_data_n) # modifies $PartsData
+{
+ local disk_data_n=$1
+ local disk_parts_data=( $(GetDiskPartsData ${disk_data_n}) )
+ local part_data_n
+ local disk_part_data
+ local dlg_part_n
+ PartsData=()
+
+ # populate params array for dialog - example output:
+ # 1 "/dev/sdb1 9662MB ext4" 2 "/dev/sdb2 1048kB"
+ for (( part_data_n=0 ; part_data_n < ${#disk_parts_data[@]} ; ++part_data_n ))
+ do disk_part_data="$(GetDiskPartData ${disk_data_n} ${part_data_n})"
+ dlg_part_n=$(( ${part_data_n} + 1 ))
+ if ! [[ "${disk_part_data}" =~ linux-swap ]] && \
+ ! mount | grep "^${disk_part_data/ *} " > /dev/null
+ then PartsData[${dlg_part_n}]="${disk_part_data}"
+ fi
+ done
+}
+
+PopulateDisksOptions() # modifies $DlgParams
+{
+ local disks_part_data=( $(GetDisksPartsData) )
+ local disk_data_n
+ DlgParams=()
+
+ # populate params array for dialog - example output:
+ # ( 1 "/dev/sda 42.9GB" 2 "/dev/sdb 9664MB" )
+ for (( disk_data_n=0 ; disk_data_n < ${#disks_part_data[@]} ; ++disk_data_n ))
+ do DlgParams+=( $(( ${disk_data_n} + 1 )) "$(GetDiskData ${disk_data_n})" )
+ done
+}
+
+PopulatePartOptions() # (device_n)
+{
+ local dlg_device_n=$1
+ local part_data_n
+ DlgParams=()
+
+ PopulatePartsData $(( ${dlg_device_n} - 1 )) # populates PartsData
+ for part_data_n in $(tr ' ' '\n' <<<${!PartsData[@]} | sort)
+ do DlgParams+=( ${part_data_n} "${PartsData[${part_data_n}]}" )
+ done
+}
+
+RemoveOption() # (part_n)
+{
+ local dlg_part_n=$1
+ unset 'PartsData['"${dlg_part_n}"']'
}
diff --git a/configs/profile/root-image/root/.session/translations.sh.inc b/configs/profile/root-image/root/.session/translations.sh.inc
index 99cbe91..3bcee08 100644
--- a/configs/profile/root-image/root/.session/translations.sh.inc
+++ b/configs/profile/root-image/root/.session/translations.sh.inc
@@ -1,102 +1,33 @@
## translations for user-facing strings ##
declare -A TR=(
- ## common ##
+ ## session-common.sh ##
[wizard-en]="Parabola Installation Wizard"
[wizard-eo]="Parabola Instala Asistilo"
- [wizard-en]="Instalación de Parabola"
+ [wizard-es]="Instalación de Parabola"
[wizard-gl]="Instalación de Parabola"
[wizard-pt]="Instalação do Parabola"
- [yes-en]="Yes"
- [yes-eo]="Jes"
- [yes-es]="Si"
- [yes-gl]="Si"
- [yes-pt]="Sim"
-
- [no-en]="No"
- [no-eo]="Ne"
- [no-es]="No"
- [no-gl]="Non"
- [no-pt]="Não"
-
## install.sh::Init() ##
- [internet-en]="Detecting Internet connection"
- [internet-eo]="Detktado de retkonekto"
- [internet-es]="Detectando conexión a Internet"
- [internet-gl]="Detectando conexión a Internet"
- [internet-pt]="Detectando conexão com a Internet"
-
-
- ## install.sh::Partition() ##
-
- [dlg_part-en]="Format and Mount Partitions"
- [dlg_part-eo]="Strukturu kaj Muntu Subdiskojn"
- [dlg_part-es]="Formatear y Montar Particiones"
- [dlg_part-gl]="Formatear e Montar Particiones"
- [dlg_part-pt]="Formatar e Montar as Partições"
-
- [hdd-en]="Select Hard Disk:"
- [hdd-eo]="Selektu Fiksitan Diskon:"
- [hdd-es]="Selecciona Disco Duro:"
- [hdd-gl]="Selecciona Disco Duro:"
- [hdd-pt]="Escolha o Disco:"
-
- [part-en]="Partitioning method:"
- [part-eo]="Dispartigan metodon:"
- [part-es]="Metodo de Particionado:"
- [part-gl]="Metodo de Particionado:"
- [part-pt]="Método de Particionamento:"
-
- [part_auto-en]="Use the entire disk (with 1GB swap)"
- [part_auto-eo]="Uzu la tutan diskon (kun 1GB permutaĵo)"
- [part_auto-es]="Usar todo el disco (con 1GB swap)"
- [part_auto-gl]="Usar todo o disco (con 1GB swap)"
- [part_auto-pt]="Usar todo o disco (com o 1GB swap)"
-
- [part_man-en]="Manual partitioning"
- [part_man-eo]="Mana dispartigo"
- [part_man-es]="Usar gparted para personalizar"
- [part_man-gl]="Usar gparted para personalizar"
- [part_man-pt]="Usar o gparted para personalizar"
-
- [mount_root-en]="Mount root / partition:"
- [mount_root-eo]="Muntu rootan / subdiskon:"
- [mount_root-es]="Montar particion root /:"
- [mount_root-gl]="Montar particion root /:"
- [mount_root-pt]="Montar a partição root /:"
-
- [mount_extra-en]="Mount another partition?"
- [mount_extra-eo]="Muntu alia subdiskon?"
- [mount_extra-es]="¿Montar otra particion?"
- [mount_extra-gl]="¿Montar outra particion?"
- [mount_extra-pt]="Quer montar outra partição?"
+ [online-en]="Detecting Internet connection"
+ [online-eo]="Detktado de retkonekto"
+ [online-es]="Detectando conexión a Internet"
+ [online-gl]="Detectando conexión a Internet"
+ [online-pt]="Detectando conexão com a Internet"
- [mount_boot-en]="Mount /boot partition:"
- [mount_boot-eo]="Muntu /boot subdiskon:"
- [mount_boot-es]="Montar particion /boot:"
- [mount_boot-gl]="Montar particion /boot:"
- [mount_boot-pt]="Montar a partição /boot:"
-
- [mount_home-en]="Mount /home partition"
- [mount_home-eo]="Muntu /home subdiskon:"
- [mount_home-es]="Montar particion /home:"
- [mount_home-gl]="Montar particion /home:"
- [mount_home-pt]="Montar a partição /home:"
-
- [format-en]="does not appear to be formatted. The installer can not continue unless it is formatted. Do you want to format it with EXT4 now?"
- [format-eo]="ne aspektas kiel strukturita. La instalilo ne progresos, krom se ĝin estas strukturita. Ĉu vi volas strukturas ĝin kiel EXT4 nun?"
- [format-es]="no parece estar formateado. El instalador no puede continuar a menos que esté formateado. ¿Quieres formatearlo con EXT4 ahora?"
- [format-gl]="non parece ter formato. O instalador non pode continuar a menos que estea formatado. ¿Quere formatalo agora con EXT4?"
- [format-pt]="não parece estar formatado. O instalador não pode continuar a menos que seja formatado. Quer formatar com EXT4 agora?"
+ [offline-en]="Installation requires a connection to the Internet"
+ [offline-eo]="Instlado bezonas retkonekton"
+ [offline-es]="La instalación requiere una conexión a Internet"
+ [offline-gl]="A instalación require unha conexión a Internet"
+ [offline-pt]="A instalação requer uma conexão com a Internet"
## install.sh::NoticeCustomize() ##
- [notice_customize-en]="The next few steps will allow you to customize your Parabola system. If you are unsure about what to choose, the Standard Parabola Base system is suitable for most people; and most of these options can be easily changed at any later time."
+ [notice_customize-en]="The next steps will allow you to customize your Parabola system. If you are unsure about what to choose, the Standard Parabola Base system is suitable for most people; and most of these options can be easily changed at any later time."
[notice_customize-eo]="La sekva paŝoj permesos vin, tajlori vian sistemon de Parabola. Se vi ne sencerta pri kiu elekti, la Laŭnorma Sistemo de Parabola, estas taŭga por plej homojn; kaj la plejparto de tiuj agordoj, estas ŝanĝebla facile iam pli malfrue."
[notice_customize-es]="Los siguientes pasos le permitirán personalizar su Parabola sistema. Si no está seguro de qué elegir, las sistema Parabola Base Estándar son adecuadas para la mayoría de las personas; y la mayoría de estas opciones se pueden cambiar fácilmente en cualquier momento posterior."
[notice_customize-gl]="Os seguintes pasos permitiranche personalizar o seu sistema Parabola. Se non estás seguro de que escoller, as sistema Parabola Base Estándar son adecuadas para a maioría da xente; e a maioría destas opcións pódense cambiar facilmente en calquera momento posterior."
@@ -118,6 +49,51 @@ declare -A TR=(
[defaults-pt]="Deseja instalar o sistema Parabola Base Padrão?"
+ ## install.sh::SelectLogins() ##
+
+ [root_pass-en]="Enter a password for the 'root' administator:"
+ [root_pass-eo]="Entajpu pasvorton por la 'root' ĉefuzanto:"
+ [root_pass-es]="Inserta la contraseña para el 'root' administrador:"
+ [root_pass-gl]="Insire o contrasinal para o 'root' administrador:"
+ [root_pass-pt]="Insira a senha para o 'root' administrador:"
+
+ [root_pass2-en]="Repeat the password for the 'root' administator:"
+ [root_pass2-eo]="Ripetu pasvorton por la 'root' ĉefuzanto:"
+ [root_pass2-es]="Repite la contraseña para el 'root' administrador:"
+ [root_pass2-gl]="Repite o contrasinal para o 'root' administrador:"
+ [root_pass2-pt]="Repita a senha para o 'root' administrador:"
+
+ [dlg_user-en]="(Optional) Create User Account"
+ [dlg_user-eo]="(Optional) Kreiu Konton de Uazanto"
+ [dlg_user-es]="(Opcional) Crear Cuenta de Usuario"
+ [dlg_user-gl]="(Opcional) Crear Conta de Usuario"
+ [dlg_user-pt]="(Opcional) Adicionar uma Conta de Usuário"
+
+ [user-en]="Would you like to create a login user?"
+ [user-eo]="Ĉu vi volas kreias salutan uzanton?"
+ [user-es]="¿Desea crear un usuario de inicio de sesión?"
+ [user-gl]="¿Quere crear un usuario de inicio de sesión?"
+ [user-pt]="Deseja criar um usuário de login?"
+
+ [user_login-en]="Enter a username for the login user:"
+ [user_login-eo]="Entajpu uzantonomon por la salutan uzanto:"
+ [user_login-es]="Introduce nombre de usuario:"
+ [user_login-gl]="Introduce un nome de usuario:"
+ [user_login-pt]="Insira o nome do usuário:"
+
+ [user_pass-en]="Enter a password for login user:"
+ [user_pass-eo]="Entajpu pasvorton por la salutan uzanto:"
+ [user_pass-es]="Introduce la contraseñara para el usuario:"
+ [user_pass-gl]="Introduce o contrasinal para o usuario:"
+ [user_pass-pt]="Insira a senha para o usuário:"
+
+ [user_pass2-en]="Repeat the password for login user:"
+ [user_pass2-eo]="Ripetu pasvorton por la salutan uzanto:"
+ [user_pass2-es]="Repite la contraseñara para el usuario:"
+ [user_pass2-gl]="Repite o contrasinal:"
+ [user_pass2-pt]="Repita a senha:"
+
+
## install.sh::SelectBase() ##
[dlg_base-en]="Install Base System"
@@ -181,72 +157,22 @@ declare -A TR=(
[install_online-pt]="Instalação online (lenta - é necessária internet)"
- ## chroot-environment.sh ##
-
- [dlg_config-en]="Configure System"
- [dlg_config-eo]="Agordu Sistemon"
- [dlg_config-es]="Configuración del Sistema"
- [dlg_config-gl]="Configuración do Sistema"
- [dlg_config-pt]="Configuração do Sistema"
-
- [hostname-en]="Enter Hostname:"
- [hostname-es]="Introduce el nombre del sistema:"
- [hostname-gl]="Introduce o nome do sistema:"
- [hostname-pt]="Adicione o nome do sistema:"
-
- [timezone-en]="Enter your Time Zone\ne.g. America/New_York\ne.g. Europe/Madrid:"
- [timezone-eo]="Entajpu vian horzonon\ne.g. America/New_York\ne.g. Europe/Madrid:"
- [timezone-es]="Introduce la Zona Horaria:\nPor ejemplo: America/New_York\nPor ejemplo: Europe/Madrid:"
- [timezone-gl]="Introduce a Zona Horaria:\nPor ejemplo: America/New_York\nPor ejemplo: Europe/Madrid:"
- [timezone-pt]="Adicione o Fuso Horário:\nPor exemplo: America/New_York\nexemplo: Europe/Madrid:"
-
- [keymap-en]="Select Keymap:"
- [keymap-eo]="Selektu Klavmapon:"
- [keymap-es]="Selecciona la distribucion del teclado:"
- [keymap-gl]="Selecciona a distribucion do teclado:"
- [keymap-pt]="Escolha a distribuição do teclado:"
-
- [locales-en]="Select Locales:"
- [locales-eo]="Selektu Lokaĵaron:"
- [locales-es]="Selecciona las Localizaciones:"
- [locales-gl]="Selecciona as Localizacions:"
- [locales-pt]="Escolha as Localizações:"
-
- [language-en]="Select your language:"
- [language-eo]="Selektu vian lingvon:"
- [language-es]="Selecciona tu idioma:"
- [language-gl]="Selecciona o teu idioma:"
- [language-pt]="Escolha a sua língua:"
-
- [root_pass-en]="Enter a password for the 'root' administator:"
- [root_pass-eo]="Entajpu pasvorton por la 'root' ĉefuzanto:"
- [root_pass-es]="Inserta la contraseña para el 'root' administrador:"
- [root_pass-gl]="Insire o contrasinal para o 'root' administrador:"
- [root_pass-pt]="Insira a senha para o 'root' administrador:"
-
- [root_pass2-en]="Repeat the password for the 'root' administator:"
- [root_pass2-eo]="Ripetu pasvorton por la 'root' ĉefuzanto:"
- [root_pass2-es]="Repite la contraseña para el 'root' administrador:"
- [root_pass2-gl]="Repite o contrasinal para o 'root' administrador:"
- [root_pass2-pt]="Repita a senha para o 'root' administrador:"
-
-
## install.sh::NoticeOptional() ##
- [notice_optional-en]="Parabola is now completely installed and usable. However, this installer has not installed a bootloader. A bootloader must be configured to boot Parabola. If you plan to configure a bootloader yourself, you can skip the next step. All of the remaining steps are strictly optional; but most people will want to install the GRUB bootloader, at least."
- [notice_optional-eo]="Parabola estas nun instalita plene kaj uzeble. Kvankam, ĉi tio instalilo ne instalis praŝargilon. Se vi intencas manipuli la praŝargilon vi mem, vi povas preterpasi la sekva paŝo. Ĉuij el la restantaj paŝoj estas strikte laŭvolaj; sed plej homoj estus bezoni instali la GRUB praŝargilon, almenaŭ."
- [notice_optional-es]="Parabola ahora está completamente instalado y utilizable. Sin embargo, este instalador no ha instalado un gestor de arranque. Se debe configurar un cargador de arranque para arrancar. Si planea gestionar el gestor de arranque usted mismo, puede omitir el siguiente paso. Todos los pasos restantes son estrictamente opcionales; pero la mayoría de las personas querrán instalar el gestor de arranque GRUB, al menos."
- [notice_optional-gl]="Parabola está agora completamente instalado e utilizable. Non obstante, este instalador non instalou un bootloader. Debe configurarse un cargador de arranque para arrincar. Se planea arranxar o cargador de inicio, pode saltar o seguinte paso. Todos os pasos restantes son estrictamente opcionais; pero a maioría da xente quere instalar o cargador de arranque GRUB, polo menos."
- [notice_optional-pt]="Parabola agora está completamente instalado e utilizável. No entanto, este instalador não instalou um gerenciador de inicialização. Um bootloader deve ser configurado para inicializar. Se você planeja alterar o gerenciador de inicialização, pode pular a próxima etapa. Todas as etapas restantes são estritamente opcionais; mas a maioria das pessoas desejará instalar o gerenciador de inicialização GRUB, pelo menos."
+ [notice_optional-en]="A bootloader must be configured to boot Parabola. If you plan to configure a bootloader yourself, you can skip the next step.\n\nAll of the remaining steps are strictly optional; but most people will want to install the GRUB bootloader, at least."
+ [notice_optional-eo]="Praŝargilo bezonas esti agordita por praŝargi Parabola. Se vi intencas manipuli la praŝargilon vi mem, vi povas preterpasi la sekva paŝo.\n\nĈuij el la restantaj paŝoj estas strikte laŭvolaj; sed plej homoj estus bezoni instali la GRUB praŝargilon, almenaŭ."
+ [notice_optional-es]="Se debe configurar un cargador de arranque para arrancar. Si planea gestionar el gestor de arranque usted mismo, puede omitir el siguiente paso.\n\nTodos los pasos restantes son estrictamente opcionales; pero la mayoría de las personas querrán instalar el gestor de arranque GRUB, al menos."
+ [notice_optional-gl]="Debe configurarse un cargador de arranque para arrincar. Se planea arranxar o cargador de inicio, pode saltar o seguinte paso.\n\nTodos os pasos restantes son estrictamente opcionais; pero a maioría da xente quere instalar o cargador de arranque GRUB, polo menos."
+ [notice_optional-pt]="Um bootloader deve ser configurado para inicializar. Se você planeja alterar o gerenciador de inicialização, pode pular a próxima etapa.\n\nTodas as etapas restantes são estritamente opcionais; mas a maioria das pessoas desejará instalar o gerenciador de inicialização GRUB, pelo menos."
- ## install.sh::InstallGrub() ##
+ ## install.sh::SelectBoot() ##
- [dlg_grub-en]="(Optional) Install GRUB"
- [dlg_grub-eo]="(Laŭvola) Instalu GRUB"
- [dlg_grub-es]="(Opcional) Instalar GRUB"
- [dlg_grub-gl]="(Opcional) Instalar GRUB"
- [dlg_grub-pt]="(Opcional) Instalar o GRUB"
+ [dlg_boot-en]="(Optional) Install Bootloader"
+ [dlg_boot-eo]="(Laŭvola) Instalu Praŝargilon"
+ [dlg_boot-es]="(Opcional) Instalar Gestor de Arranque"
+ [dlg_boot-gl]="(Opcional) Instalar Bootloader"
+ [dlg_boot-pt]="(Opcional) Instalar o Bootloader"
[grub-en]="Would you like to install GRUB?"
[grub-eo]="Ĉu vi volas instali GRUB-on?"
@@ -255,7 +181,7 @@ declare -A TR=(
[grub-pt]="Deseja instalar o GRUB?"
- ## install.sh::InstallWmde() ##
+ ## install.sh::SelectWmde() ##
[dlg_wmde-en]="(Optional) Install Parabola Desktop"
[dlg_wmde-eo]="(Optional) Instalu Parabola Labortablon"
@@ -294,38 +220,134 @@ declare -A TR=(
[wmde_mate-pt]="Mate ambiente gráfico"
- ## install.sh::CreateUser() ##
+ ## install.sh::SelectEnv() ##
- [dlg_user-en]="(Optional) Create User Account"
- [dlg_user-eo]="(Optional) Kreiu Konton de Uazanto"
- [dlg_user-es]="(Opcional) Crear Cuenta de Usuario"
- [dlg_user-gl]="(Opcional) Crear Conta de Usuario"
- [dlg_user-pt]="(Opcional) Adicionar uma Conta de Usuário"
+ [dlg_env-en]="Configure System"
+ [dlg_env-eo]="Agordu Sistemon"
+ [dlg_env-es]="Configuración del Sistema"
+ [dlg_env-gl]="Configuración do Sistema"
+ [dlg_env-pt]="Configuração do Sistema"
- [user-en]="Would you like to create a login user?"
- [user-eo]="Ĉu vi volas kreias salutan uzanton?"
- [user-es]="¿Desea crear un usuario de inicio de sesión?"
- [user-gl]="¿Quere crear un usuario de inicio de sesión?"
- [user-pt]="Deseja criar um usuário de login?"
+ [option_current-en]="(current)"
+ [option_current-eo]="(nuna)"
+ [option_current-es]="(actual)"
+ [option_current-gl]="(actual)"
+ [option_current-pt]="(atual)"
+ [hostname-en]="Enter Hostname:"
+ [hostname-eo]="Entajpu la nomon de gastiga komputilo:"
+ [hostname-es]="Introduce el nombre del sistema:"
+ [hostname-gl]="Introduce o nome do sistema:"
+ [hostname-pt]="Adicione o nome do sistema:"
- ## chroot-login.sh ##
+ [timezone-en]="Enter your Time Zone\ne.g. America/New_York\ne.g. Europe/Madrid:"
+ [timezone-eo]="Entajpu vian horzonon\ne.g. America/New_York\ne.g. Europe/Madrid:"
+ [timezone-es]="Introduce la Zona Horaria:\nPor ejemplo: America/New_York\nPor ejemplo: Europe/Madrid:"
+ [timezone-gl]="Introduce a Zona Horaria:\nPor ejemplo: America/New_York\nPor ejemplo: Europe/Madrid:"
+ [timezone-pt]="Adicione o Fuso Horário:\nPor exemplo: America/New_York\nexemplo: Europe/Madrid:"
- [user_login-en]="Enter a username for the login user:"
- [user_login-eo]="Entajpu uzantonomon por la salutan uzanto:"
- [user_login-es]="Introduce nombre de usuario:"
- [user_login-gl]="Introduce un nome de usuario:"
- [user_login-pt]="Insira o nome do usuário:"
+ [keymap-en]="Select Keymap:"
+ [keymap-eo]="Selektu Klavmapon:"
+ [keymap-es]="Selecciona la distribucion del teclado:"
+ [keymap-gl]="Selecciona a distribucion do teclado:"
+ [keymap-pt]="Escolha a distribuição do teclado:"
- [user_pass-en]="Enter a password for login user:"
- [user_pass-eo]="Entajpu pasvorton por la salutan uzanto:"
- [user_pass-es]="Introduce la contraseñara para el usuario:"
- [user_pass-gl]="Introduce o contrasinal para o usuario:"
- [user_pass-pt]="Insira a senha para o usuário:"
+ [locales-en]="Select Locales:"
+ [locales-eo]="Selektu Lokaĵaron:"
+ [locales-es]="Selecciona las Localizaciones:"
+ [locales-gl]="Selecciona as Localizacions:"
+ [locales-pt]="Escolha as Localizações:"
- [user_pass2-en]="Repeat the password for login user:"
- [user_pass2-eo]="Ripetu pasvorton por la salutan uzanto:"
- [user_pass2-es]="Repite la contraseñara para el usuario:"
- [user_pass2-gl]="Repite o contrasinal:"
- [user_pass2-pt]="Repita a senha:"
+ [language-en]="Select your language:"
+ [language-eo]="Selektu vian lingvon:"
+ [language-es]="Selecciona tu idioma:"
+ [language-gl]="Selecciona o teu idioma:"
+ [language-pt]="Escolha a sua língua:"
+
+
+ ## install.sh::SelectPartition() ##
+
+ [dlg_part-en]="Format and Mount Partitions"
+ [dlg_part-eo]="Strukturu kaj Muntu Subdiskojn"
+ [dlg_part-es]="Formatear y Montar Particiones"
+ [dlg_part-gl]="Formatear e Montar Particiones"
+ [dlg_part-pt]="Formatar e Montar as Partições"
+
+ [device_none-en]="No disks found"
+ [device_none-eo]="Neniom el diskoj trovitaj"
+ [device_none-es]="No se encontraron discos"
+ [device_none-gl]="Non se atoparon discos"
+ [device_none-pt]="Nenhum disco encontrado"
+
+ [device-en]="Select Hard Disk:"
+ [device-eo]="Selektu Fiksitan Diskon:"
+ [device-es]="Selecciona Disco Duro:"
+ [device-gl]="Selecciona Disco Duro:"
+ [device-pt]="Escolha o Disco:"
+
+ [part-en]="Partitioning method:"
+ [part-eo]="Dispartigan metodon:"
+ [part-es]="Metodo de Particionado:"
+ [part-gl]="Metodo de Particionado:"
+ [part-pt]="Método de Particionamento:"
+
+ [part_auto-en]="Use the entire disk (with 1GB swap)"
+ [part_auto-eo]="Uzu la tutan diskon (kun 1GB permutaĵo)"
+ [part_auto-es]="Usar todo el disco (con 1GB swap)"
+ [part_auto-gl]="Usar todo o disco (con 1GB swap)"
+ [part_auto-pt]="Usar todo o disco (com o 1GB swap)"
+
+ [part_man-en]="Manual partitioning"
+ [part_man-eo]="Mana dispartigo"
+ [part_man-es]="Usar gparted para personalizar"
+ [part_man-gl]="Usar gparted para personalizar"
+ [part_man-pt]="Usar o gparted para personalizar"
+
+ [part_none-en]="No partitions found"
+ [part_none-eo]="Neniom el subdiskoj trovitaj"
+ [part_none-es]="No se encontraron particiones de disco"
+ [part_none-gl]="Non se atopou ningunha partición de disco"
+ [part_none-pt]="Nenhuma partição de disco encontrada"
+
+ [mount_root-en]="Mount root / partition:"
+ [mount_root-eo]="Muntu rootan / subdiskon:"
+ [mount_root-es]="Montar particion root /:"
+ [mount_root-gl]="Montar particion root /:"
+ [mount_root-pt]="Montar a partição root /:"
+
+ [mount_boot-en]="(Optional) Mount /boot partition?"
+ [mount_boot-eo]="(Laŭvola) Muntu /boot subdiskon?"
+ [mount_boot-es]="(Opcional) Montar particion /boot?"
+ [mount_boot-gl]="(Opcional) Montar particion /boot?"
+ [mount_boot-pt]="(Opcional) Montar a partição /boot?"
+
+ [mount_home-en]="(Optional) Mount /home partition?"
+ [mount_home-eo]="(Laŭvola) Muntu /home subdiskon?"
+ [mount_home-es]="(Opcional) Montar particion /home?"
+ [mount_home-gl]="(Opcional) Montar particion /home?"
+ [mount_home-pt]="(Opcional) Montar a partição /home?"
+
+ [format-en]="does not appear to be formatted. The installer can not continue unless it is formatted. Do you want to format it with EXT4 now?"
+ [format-eo]="ne aspektas kiel strukturita. La instalilo ne progresos, krom se ĝin estas strukturita. Ĉu vi volas strukturas ĝin kiel EXT4 nun?"
+ [format-es]="no parece estar formateado. El instalador no puede continuar a menos que esté formateado. ¿Quieres formatearlo con EXT4 ahora?"
+ [format-gl]="non parece ter formato. O instalador non pode continuar a menos que estea formatado. ¿Quere formatalo agora con EXT4?"
+ [format-pt]="não parece estar formatado. O instalador não pode continuar a menos que seja formatado. Quer formatar com EXT4 agora?"
+
+
+ ## install.sh::NoticeReady() ##
+
+ [notice_ready-en]="No changes have been made to your disks yet. If you do not wish to continue, you can press the \"Cancel\" button or the <ESC> key, to quit now."
+ [notice_ready-eo]="Ŝanĝoj ne faris je vian diskojn jam. Se vi ne volas pluiri, do vi povas puŝi la \"\" butonon aŭ la <ESC> klavon, ĉesi nun."
+ [notice_ready-es]="Aún no se han realizado cambios en sus discos. Si no desea continuar, puede presionar el botón \"Cancelar\" o la tecla <ESC> para salir ahora."
+ [notice_ready-gl]="Aínda non se fixeron cambios nos teus discos. Se non desexa continuar, pode premer o botón \"Cancelar\" ou a tecla <ESC> para saír agora."
+ [notice_ready-pt]="Nenhuma alteração foi feita em seus discos ainda. Se você não quiser continuar, pode pressionar o botão \"Cancelar\" ou a tecla <ESC> para sair agora."
+
+
+ ## install.sh::NoticeDone() ##
+
+ [notice_done-en]="Parabola is now completely installed and usable."
+ [notice_done-eo]="Parabola estas nun instalita plene kaj uzeble"
+ [notice_done-es]="Parabola ahora está completamente instalado y utilizable."
+ [notice_done-gl]="Parabola está agora completamente instalado e utilizable."
+ [notice_done-pt]="Parabola agora está completamente instalado e utilizável."
)