# "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 if [ -f "${root}/sbin/lilo" ]; then read b4 b3 b2 b1 <<-EOF $(od -An -tx1 -v -j 440 -N 4 "${dev}") EOF # This ln command won't be needed once lilo 24.1-1 is uploaded. ln "${root}/boot/vmlinuz" "${root}/boot/vmlinuz.old" if ! session_begin "${root}" . : false; then block_umount "${root}" return 2 fi session_exec install-lilo \ "${dev}" "PARTUUID=${b1}${b2}${b3}${b4}-01" session_end fi block_umount "${root}" return 0 } cmd_installer_pc_make_partition_and_fs() { local dev="${1}" if ! dd if=/dev/zero of="${dev}" bs=512 count=1; then error "$(get_msg 'cmd_installer_pc_dd_fail')" return 1 fi if ${HAVE_SFDISK}; then if ! printf ',,83,*\n' | ${SFDISK} "${dev}"; then error "$(get_msg 'cmd_installer_pc_fdisk_fail')" return 1 fi elif ${HAVE_FDISK}; then if ! printf 'n\np\n1\n\n\nt\n83\na\n1\nw\n' | ${FDISK} "${dev}" then error "$(get_msg 'cmd_installer_pc_fdisk_fail')" return 1 fi fi if ! ${MKE2FS} -t ext4 "${dev}1"; then error "$(get_msg 'cmd_installer_pc_mkfs_fail')" return 1 fi return 0 } cmd_installer_pc_register() { register_cmd 'installer-pc' } __init cmd_installer_pc_register