# PC installer # # Copyright (C) 2015-2016, 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 # . installer_pc_log_print() { local prefix="${1}" local log="${2}" shift 2 local line= IFS="${LF}" for line in ${log}; do error '%s: %s' "${prefix}" "${line}" done unset IFS } installer_pc_make_partition_and_fs() { local dev="${1}" shift 1 local log= info "$(get_msg 'installer_pc_dd')" if ! log="$(dd if=/dev/zero of="${dev}" bs=512 count=1 2>&1)"; then error "$(get_msg 'installer_pc_dd_fail')" installer_pc_log_print 'dd' "${log}" return 1 fi info "$(get_msg 'installer_pc_fdisk')" if ${HAVE_SFDISK}; then if ! log="$(printf ',,83,*\n' | ${SFDISK} -- "${dev}" 2>&1)" then error "$(get_msg 'installer_pc_fdisk_fail')" installer_pc_log_print 'sfdisk' "${log}" return 1 fi elif ${HAVE_FDISK}; then if ! log="$(printf 'n\np\n1\n\n\nt\n83\na\n1\nw\n' | ${FDISK} -- "${dev}" 2>&1)"; then error "$(get_msg 'installer_pc_fdisk_fail')" installer_pc_log_print 'fdisk' "${log}" return 1 fi fi info "$(get_msg 'installer_pc_mkfs')" if ! log="$(${MKE2FS} -t ext4 -- "${dev}1" 2>&1)"; then error "$(get_msg 'installer_pc_mkfs_fail')" installer_pc_log_print 'mke2fs' "${log}" return 1 fi return 0 } installer_pc_main() { local arch="${1}" local plat="${2}" local dev="${3}" local foreign="${4}" shift 4 if ! check_block "${dev}"; then return 1 fi if ! installer_pc_make_partition_and_fs "${dev}"; then return 1 fi if ! root="$(block_mount "${dev}1")"; then return 1 fi if ! install_system "${arch}" "${plat}" "${root}" "${foreign}"; then block_umount "${root}" return 1 fi block_umount "${root}" return 0 } installer_pc_register() { register_installer 'pc' } __init installer_pc_register