diff options
author | P. J. McDermott <pj@pehjota.net> | 2015-05-24 16:20:53 (EDT) |
---|---|---|
committer | P. J. McDermott <pj@pehjota.net> | 2015-05-24 16:20:53 (EDT) |
commit | a65c79664f476441e7115ffd8a81e5241ac7d55d (patch) | |
tree | 108bb186737847c00ace85bd2c2b6efd48069724 | |
parent | eaa04118f50314a22adb0acd9123d9f9d8bb3ae8 (diff) |
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.
-rw-r--r-- | lib/cmd/installer-pc.sh | 92 | ||||
-rw-r--r-- | lib/cmd/local.mk | 3 | ||||
-rw-r--r-- | locale/en_US.sh | 5 |
3 files changed, 99 insertions, 1 deletions
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 +# <http://www.gnu.org/licenses/>. + +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 diff --git a/locale/en_US.sh b/locale/en_US.sh index da64443..441e32a 100644 --- a/locale/en_US.sh +++ b/locale/en_US.sh @@ -97,6 +97,11 @@ msg_prokit_cmd_build_summary='build a package' msg_prokit_cmd_build_usage='<root-dir> [<option> ...] <pkg-dir>' msg_prokit_cmd_build_not_a_dir='Not a directory: %s' +# lib/cmd/installer-pc.sh +msg_prokit_cmd_installer_pc_summary='install a PC system onto a block device' +msg_prokit_cmd_installer_pc_usage='-a <arch> -p <plat> [-m <mirror>] '\ +'<suite> <device>' + # lib/profile.sh msg_prokit_profile_not_found='Profile "%s" not found' |