# "installer-pc" command # # Copyright (C) 2014, 2015 Patrick "P. J." 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 # . cmd_installer_pc_optstring='a:p:m:' cmd_installer_pc_main() { local suite= local dev= local profile= local root= local b4= local b3= local b2= local b1= if ! get_options "${@}"; then print_cmd_usage 'installer-pc' >&2 return 1 fi shift $(($OPTIND - 1)) if [ "x${cmd_installer_pc_opt_a-}" = 'x' ]; then print_cmd_usage 'installer-pc' >&2 return 1 fi if [ "x${cmd_installer_pc_opt_p-}" = 'x' ]; then print_cmd_usage 'installer-pc' >&2 return 1 fi if [ ${#} -ne 2 ]; then print_cmd_usage 'installer-pc' >&2 return 1 fi suite="${1}" dev="${2}" if ! check_block "${dev}"; then return 2 fi if [ "x${suite%%:*}" != "x${suite}" ]; then profile="${suite%%:*}" suite="${suite#*:}" else profile='proteanos' fi if ! profile_set "${profile}"; then return 2 fi suite="$(profile_normalize_suite "${suite}")" if ! cmd_installer_pc_make_partition_and_fs "${dev}"; then return 2 fi if ! root="$(block_mount "${dev}1")"; then return 2 fi if ! install_system "${cmd_installer_pc_opt_m-}" "${suite}" \ "${cmd_installer_pc_opt_a-}" \ "${cmd_installer_pc_opt_p-}" \ "${root}" false; then block_umount "${root}" return 2 fi block_umount "${root}" return 0 } cmd_installer_pc_make_partition_and_fs() { local dev="${1}" local log= info "$(get_msg 'cmd_installer_pc_dd')" if ! log="$(dd if=/dev/zero of="${dev}" bs=512 count=1 2>&1)"; then error "$(get_msg 'cmd_installer_pc_dd_fail')" cmd_installer_pc_log_print 'dd' "${log}" return 1 fi info "$(get_msg 'cmd_installer_pc_fdisk')" if ${HAVE_SFDISK}; then if ! log="$(printf ',,83,*\n' | ${SFDISK} "${dev}" 2>&1)"; then error "$(get_msg 'cmd_installer_pc_fdisk_fail')" cmd_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 'cmd_installer_pc_fdisk_fail')" cmd_installer_pc_log_print 'fdisk' "${log}" return 1 fi fi info "$(get_msg 'cmd_installer_pc_mkfs')" if ! log="$(${MKE2FS} -t ext4 "${dev}1" 2>&1)"; then error "$(get_msg 'cmd_installer_pc_mkfs_fail')" cmd_installer_pc_log_print 'mke2fs' "${log}" return 1 fi return 0 } cmd_installer_pc_log_print() { local prefix="${1}" local log="${2}" local line= IFS="${LF}" for line in ${log}; do error '%s: %s' "${prefix}" "${line}" done unset IFS } cmd_installer_pc_register() { register_cmd 'installer-pc' } __init cmd_installer_pc_register