diff options
Diffstat (limited to 'src/cmd/installer-pc.sh')
-rw-r--r-- | src/cmd/installer-pc.sh | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/src/cmd/installer-pc.sh b/src/cmd/installer-pc.sh new file mode 100644 index 0000000..dd01506 --- /dev/null +++ b/src/cmd/installer-pc.sh @@ -0,0 +1,101 @@ +# "installer-pc" command +# +# Copyright (C) 2014 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 +# <http://www.gnu.org/licenses/>. + +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 + exit 1 + fi + shift $(($OPTIND - 1)) + + if [ "x${cmd_installer_pc_opt_a-}" = 'x' ]; then + print_cmd_usage 'installer-pc' >&2 + exit 1 + fi + if [ "x${cmd_installer_pc_opt_p-}" = 'x' ]; then + print_cmd_usage 'installer-pc' >&2 + exit 1 + fi + if [ ${#} -ne 2 ]; then + print_cmd_usage 'installer-pc' >&2 + exit 1 + fi + + suite="${1}" + dev="${2}" + check_block "${dev}" + + if [ "x${suite%%:*}" != "x${suite}" ]; then + profile="${suite%%:*}" + suite="${suite#*:}" + else + profile='proteanos' + fi + profile_set "${profile}" + suite="$(profile_normalize_suite "${suite}")" + + cmd_installer_pc_make_partition_and_fs "${dev}" + root="$(block_mount "${dev}1")" + + install_system "${cmd_installer_pc_opt_m-}" "${suite}" \ + "${cmd_installer_pc_opt_a-}" "${cmd_installer_pc_opt_p-}" \ + "${root}" false + + 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" + session_begin "${root}" . : false + session_exec install-lilo \ + "${dev}" "PARTUUID=${b1}${b2}${b3}${b4}-01" + session_end + fi + + block_umount "${root}" +} + +cmd_installer_pc_make_partition_and_fs() +{ + local dev="${1}" + + dd if=/dev/zero of="${dev}" bs=512 count=1 + printf 'n\np\n1\n\n\nt\n83\na\n1\nw\n' | fdisk "${dev}" + mke2fs -t ext4 "${dev}1" +} + +cmd_installer_pc_register() +{ + register_cmd 'installer-pc' +} +__init cmd_installer_pc_register |