diff options
-rw-r--r-- | locale/C.sh | 5 | ||||
-rw-r--r-- | src/installer.sh | 79 | ||||
-rw-r--r-- | src/local.mk | 1 |
3 files changed, 84 insertions, 1 deletions
diff --git a/locale/C.sh b/locale/C.sh index f168e1c..d3f5906 100644 --- a/locale/C.sh +++ b/locale/C.sh @@ -128,12 +128,15 @@ msg_prokit_profile_not_detected='No installed system found at "%s"' # src/package.sh msg_prokit_package_format_unknown='Unable to detect package format' -# src/install.sh +# src/installer.sh +msg_prokit_installer_invalid='Platform specifies invalid installer "%s"' msg_prokit_install_bad_archplat='Invalid combination of architecture "%s" '\ 'and platform "%s"' msg_prokit_install_selected_arch='Using architecture %s' msg_prokit_install_selected_plat='Using platform %s' msg_prokit_install_selected_mirror='Using mirror %s' + +# src/install.sh msg_prokit_install_setting_up_chroot='Setting up root...' msg_prokit_install_chroot_dir_exists='Directory "%s" exists' msg_prokit_install_mkdir_chroot_fail='Failed to create directory "%s"' diff --git a/src/installer.sh b/src/installer.sh new file mode 100644 index 0000000..76c1c42 --- /dev/null +++ b/src/installer.sh @@ -0,0 +1,79 @@ +# Installer-related functions +# +# Copyright (C) 2015, 2021 Patrick McDermott +# +# This file is part of the ProteanOS Development Kit. +# +# The ProteanOS Development Kit is free software: you can redistribute +# it and/or modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# The ProteanOS Development Kit is distributed in the hope that it +# will be useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with the ProteanOS Development Kit. If not, see +# <http://www.gnu.org/licenses/>. + +_installers=' ' + +register_installer() +{ + local installer="${1}" + shift 1 + + _installers="${_installers}${installer} " + return 0 +} + +is_installer() +{ + local inst="${1}" + shift 1 + + case "${_installers}" in *" ${inst} "*) return 0;; *) return 1;; esac +} + +run_installer() +{ + local mirror="${1}" + local suite="${2}" + local arch="${3}" + local plat="${4}" + local root="${5}" + local foreign="${6}" + shift 6 + local inst= + + if [ x"${arch}" = x'' ]; then + arch="$(profile_detect_arch)" + fi + if [ x"${plat}" = x'' ]; then + plat="$(profile_default_plat)" + fi + if [ x"${mirror}" = x'' ]; then + mirror="$(profile_select_mirror)" + fi + profile_prepare_install "${mirror}" "${suite}" + + if ! profile_validate_archplat "${arch}" "${plat}"; then + error "$(get_msg 'install_bad_archplat')" "${arch}" "${plat}" + return 1 + fi + + info "$(get_msg 'install_selected_arch')" "${arch}" + info "$(get_msg 'install_selected_plat')" "${plat}" + info "$(get_msg 'install_selected_mirror')" "${mirror}" + + inst="$(profile_installer_type "${arch}" "${plat}")" + if ! is_installer "${inst}"; then + error "$(get_msg 'installer_invalid')" "${inst}" + return 1 + fi + "installer_${inst}_main" "${arch}" "${plat}" "${root}" "${foreign}" || \ + return ${?} + return 0 +} diff --git a/src/local.mk b/src/local.mk index 331f13c..bfd93f8 100644 --- a/src/local.mk +++ b/src/local.mk @@ -19,6 +19,7 @@ prokit_SOURCES += \ src/cmd.sh \ src/profile.sh \ src/package.sh \ + src/installer.sh \ src/install.sh include $(top_srcdir)/src/cmd/local.mk |