From a65c79664f476441e7115ffd8a81e5241ac7d55d Mon Sep 17 00:00:00 2001 From: P. J. McDermott Date: Sun, 24 May 2015 16:20:53 -0400 Subject: cmd/installer-pc: New command TODO: Either throw an error if arch and plat aren't given or make them optional to enter an interactive mode. --- (limited to 'lib') diff --git a/lib/cmd/installer-pc.sh b/lib/cmd/installer-pc.sh new file mode 100644 index 0000000..51d8a69 --- /dev/null +++ b/lib/cmd/installer-pc.sh @@ -0,0 +1,92 @@ +# "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 +# . + +use getopt +use profile +use block +use install +use session + +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 [ ${#} -lt 2 ]; then + print_cmd_usage 'install' >&2 + exit 1 + fi + + suite="${1}" + dev="${2}" + + 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}")" + + install_system "${cmd_install_pc_opt_m-}" "${suite}" \ + "${cmd_install_pc_opt_a-}" "${cmd_install_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 "${mountpoint}/boot/vmlinuz" "${mountpoint}/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" +} diff --git a/lib/cmd/local.mk b/lib/cmd/local.mk index 8c56946..dc6e2ae 100644 --- a/lib/cmd/local.mk +++ b/lib/cmd/local.mk @@ -4,4 +4,5 @@ pkgdatacmd_sources = \ lib/cmd/install.sh \ lib/cmd/shell.sh \ lib/cmd/opkg.sh \ - lib/cmd/build.sh + lib/cmd/build.sh \ + lib/cmd/installer-pc.sh -- cgit v0.9.1