summaryrefslogtreecommitdiff
path: root/distrib/miniroot
diff options
context:
space:
mode:
Diffstat (limited to 'distrib/miniroot')
-rw-r--r--distrib/miniroot/dot.profile4
-rw-r--r--distrib/miniroot/install.sh316
-rw-r--r--distrib/miniroot/install.sub330
-rw-r--r--distrib/miniroot/list9
-rw-r--r--distrib/miniroot/upgrade.sh95
5 files changed, 334 insertions, 420 deletions
diff --git a/distrib/miniroot/dot.profile b/distrib/miniroot/dot.profile
index bfa1c2b0646..911f4da9a5f 100644
--- a/distrib/miniroot/dot.profile
+++ b/distrib/miniroot/dot.profile
@@ -1,4 +1,4 @@
-# $OpenBSD: dot.profile,v 1.30 2016/01/26 22:26:54 rpe Exp $
+# $OpenBSD: dot.profile,v 1.31 2016/04/02 12:23:46 rpe Exp $
# $NetBSD: dot.profile,v 1.1 1995/12/18 22:54:43 pk Exp $
#
# Copyright (c) 2009 Kenneth R. Westerback
@@ -107,7 +107,7 @@ __EOT
fi
case $REPLY in
- [aA]*) /install -a && break
+ [aA]*) /autoinstall && break
;;
[iI]*) /install && break
;;
diff --git a/distrib/miniroot/install.sh b/distrib/miniroot/install.sh
index dcaa5dd391f..e69de29bb2d 100644
--- a/distrib/miniroot/install.sh
+++ b/distrib/miniroot/install.sh
@@ -1,316 +0,0 @@
-#!/bin/ksh
-# $OpenBSD: install.sh,v 1.275 2016/02/11 14:24:28 rpe Exp $
-# $NetBSD: install.sh,v 1.5.2.8 1996/08/27 18:15:05 gwr Exp $
-#
-# Copyright (c) 1997-2015 Todd Miller, Theo de Raadt, Ken Westerback
-# Copyright (c) 2015, Robert Peichaer <rpe@openbsd.org>
-#
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-# Copyright (c) 1996 The NetBSD Foundation, Inc.
-# All rights reserved.
-#
-# This code is derived from software contributed to The NetBSD Foundation
-# by Jason R. Thorpe.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
-# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-#
-
-# OpenBSD installation script.
-
-# install.sub needs to know the MODE.
-MODE=install
-
-# Include common subroutines and initialization code.
-. install.sub
-
-# Ask for/set the system hostname and add the hostname specific siteXX set.
-ask_until "System hostname? (short form, e.g. 'foo')" "$(hostname -s)"
-[[ ${resp%%.*} != $(hostname -s) ]] && hostname "$resp"
-THESETS="$THESETS site$VERSION-$(hostname -s).tgz"
-
-echo
-
-# Configure the network.
-donetconfig
-
-# If there's network connectivity, fetch list of mirror servers and installer
-# choices from previous runs.
-((NIFS)) && startcgiinfo
-
-echo
-
-while :; do
- askpassword "Password for root account?"
- _rootpass="$_password"
- [[ -n "$_password" ]] && break
- echo "The root password must be set."
-done
-
-# Ask for the root user public ssh key during autoinstall.
-rootkey=
-if $AUTO; then
- ask "Public ssh key for root account?" none
- [[ $resp != none ]] && rootkey=$resp
-fi
-
-# Ask user about daemon startup on boot, X Window usage and console setup.
-questions
-
-# Gather information for setting up the initial user account.
-user_setup
-ask_root_sshd
-
-# Set TZ variable based on zonefile and user selection.
-set_timezone /var/tzlist
-
-echo
-
-# Get information about ROOTDISK, etc.
-get_rootinfo
-
-DISKS_DONE=
-FSENT=
-
-# Remove traces of previous install attempt.
-rm -f /tmp/fstab*
-
-# Configure the disk(s).
-while :; do
- # Always do ROOTDISK first, and repeat until it is configured.
- if ! isin $ROOTDISK $DISKS_DONE; then
- resp=$ROOTDISK
- rm -f /tmp/fstab
- else
- # Force the user to think and type in a disk name by
- # making 'done' the default choice.
- ask_which "disk" "do you wish to initialize" \
- '$(get_dkdevs_uninitialized)' done
- [[ $resp == done ]] && break
- fi
- _disk=$resp
- configure_disk $_disk || continue
- DISKS_DONE=$(addel $_disk $DISKS_DONE)
-done
-
-# Write fstab entries to fstab in mount point alphabetic order
-# to enforce a rational mount order.
-for _mp in $(bsort $FSENT); do
- _pp=${_mp##*!}
- _mp=${_mp%!*}
- echo -n "$_pp $_mp ffs rw"
-
- # Only '/' is neither nodev nor nosuid. i.e. it can obviously
- # *always* contain devices or setuid programs.
- [[ $_mp == / ]] && { echo " 1 1"; continue; }
-
- # Every other mounted filesystem is nodev. If the user chooses
- # to mount /dev as a separate filesystem, then on the user's
- # head be it.
- echo -n ",nodev"
-
- # The only directories that the install puts suid binaries into
- # (as of 3.2) are:
- #
- # /sbin
- # /usr/bin
- # /usr/sbin
- # /usr/libexec
- # /usr/libexec/auth
- # /usr/X11R6/bin
- #
- # and ports and users can do who knows what to /usr/local and
- # sub directories thereof.
- #
- # So try to ensure that only filesystems that are mounted at
- # or above these directories can contain suid programs. In the
- # case of /usr/libexec, give blanket permission for
- # subdirectories.
- case $_mp in
- /sbin|/usr) ;;
- /usr/bin|/usr/sbin) ;;
- /usr/libexec|/usr/libexec/*) ;;
- /usr/local|/usr/local/*) ;;
- /usr/X11R6|/usr/X11R6/bin) ;;
- *) echo -n ",nosuid" ;;
- esac
- echo " 1 2"
-done >>/tmp/fstab
-
-# Create a skeletal /etc/fstab which is usable for the installation process.
-munge_fstab
-
-# Use async options for faster mounts of the filesystems.
-mount_fs "-o async"
-
-# Feed the random pool some entropy before we read from it.
-feed_random
-
-# Ask the user for locations, and install whatever sets the user selected.
-install_sets
-
-# If we did not succeed at setting TZ yet, we try again
-# using the timezone names extracted from the base set.
-if [[ -z $TZ ]]; then
- (cd /mnt/usr/share/zoneinfo
- ls -1dF $(tar cvf /dev/null [A-Za-y]*) >/mnt/tmp/tzlist )
- echo
- set_timezone /mnt/tmp/tzlist
- rm -f /mnt/tmp/tzlist
-fi
-
-# If we got a timestamp from the cgi server, and that time diffs by more
-# than 120 seconds, ask if the user wants to adjust the time.
-if _time=$(http_time) && _now=$(date +%s) &&
- (( _now - _time > 120 || _time - _now > 120 )); then
- _tz=/mnt/usr/share/zoneinfo/$TZ
- if ask_yn "Time appears wrong. Set to '$(TZ=$_tz date -r "$(http_time)")'?" yes; then
- # We do not need to specify TZ below since both date
- # invocations use the same one.
- date $(date -r "$(http_time)" "+%Y%m%d%H%M.%S") >/dev/null
- # N.B. This will screw up SECONDS.
- fi
-fi
-
-# If we managed to talk to the cgi server before, tell it what
-# location we used... so it can perform magic next time.
-if [[ -s $HTTP_LIST ]]; then
- _i=${INSTALL:+install=$INSTALL&}
- _i=$_i${TZ:+TZ=$TZ&}
- _i=$_i${METHOD:+method=$METHOD}
- _i=${_i%&}
- [[ -n $_i ]] && ftp -Vao - \
- "http://129.128.5.191/cgi-bin/ftpinstall.cgi?$_i" >/dev/null 2>&1 &
-fi
-
-# Ensure an enabled console has the correct speed in /etc/ttys.
-sed "/^console.*on.*secure.*$/s/std\.[0-9]*/std.$(stty speed </dev/console)/" \
- /mnt/etc/ttys >/tmp/ttys
-mv /tmp/ttys /mnt/etc/ttys
-
-echo -n "Saving configuration files..."
-
-# Save any leases obtained during install.
-(cd /var/db; for _f in dhclient.leases.*; do
- [[ -f $_f ]] && mv $_f /mnt/var/db/.
-done)
-
-# Move configuration files from /tmp to /mnt/etc.
-hostname >/tmp/myname
-
-# Append entries to installed hosts file, changing '1.2.3.4 hostname'
-# to '1.2.3.4 hostname.$FQDN hostname'. Leave untouched lines containing
-# domain information or aliases. These are lines the user added/changed
-# manually.
-
-# Add common entries.
-echo "127.0.0.1\tlocalhost" >/mnt/etc/hosts
-echo "::1\t\tlocalhost" >>/mnt/etc/hosts
-
-# Note we may have no hosts file if no interfaces were configured.
-if [[ -f /tmp/hosts ]]; then
- _dn=$(get_fqdn)
- while read _addr _hn _aliases; do
- if [[ -n $_aliases || $_hn != ${_hn%%.*} || -z $_dn ]]; then
- echo "$_addr\t$_hn $_aliases"
- else
- echo "$_addr\t$_hn.$_dn $_hn"
- fi
- done </tmp/hosts >>/mnt/etc/hosts
- rm /tmp/hosts
-fi
-
-# Append dhclient.conf to installed dhclient.conf.
-_f=dhclient.conf
-[[ -f /tmp/$_f ]] && { cat /tmp/$_f >>/mnt/etc/$_f; rm /tmp/$_f; }
-
-# Possible files to copy from /tmp: fstab hostname.* kbdtype mygate
-# myname ttys boot.conf resolv.conf sysctl.conf resolv.conf.tail
-# Save only non-empty (-s) regular (-f) files.
-(cd /tmp; for _f in fstab hostname* kbdtype my* ttys *.conf *.tail; do
- [[ -f $_f && -s $_f ]] && mv $_f /mnt/etc/.
-done)
-
-echo "done."
-
-# Apply configuration settings based on information from questions().
-apply
-
-# Create user account based on information from user_setup().
-if [[ -n $user ]]; then
- _encr=$(encr_pwd "$userpass")
- _home=/home/$user
- uline="${user}:${_encr}:1000:1000:staff:0:0:${username}:$_home:/bin/ksh"
- echo "$uline" >>/mnt/etc/master.passwd
- echo "${user}:*:1000:" >>/mnt/etc/group
- echo ${user} >/mnt/root/.forward
-
- _home=/mnt$_home
- mkdir -p $_home
- (cd /mnt/etc/skel; cp -pR . $_home)
- (umask 077 && sed "s,^To: root\$,To: ${username} <${user}>," \
- /mnt/var/mail/root >/mnt/var/mail/$user )
- chown -R 1000:1000 $_home /mnt/var/mail/$user
- sed -i -e "s@^wheel:.:0:root\$@wheel:\*:0:root,${user}@" \
- /mnt/etc/group 2>/dev/null
-
- # During autoinstall, add public ssh key to authorized_keys.
- [[ -n "$userkey" ]] &&
- print -r -- "$userkey" >>$_home/.ssh/authorized_keys
-fi
-
-# Store root password and rebuild password database.
-if [[ -n "$_rootpass" ]]; then
- _encr=$(encr_pwd "$_rootpass")
- sed -i -e "s@^root::@root:${_encr}:@" /mnt/etc/master.passwd 2>/dev/null
-fi
-pwd_mkdb -p -d /mnt/etc /etc/master.passwd
-
-# During autoinstall, add root user's public ssh key to authorized_keys.
-[[ -n "$rootkey" ]] && (
- umask 077
- mkdir /mnt/root/.ssh
- print -r -- "$rootkey" >>/mnt/root/.ssh/authorized_keys
-)
-
-# Perform final steps common to both an install and an upgrade.
-finish_up
diff --git a/distrib/miniroot/install.sub b/distrib/miniroot/install.sub
index c50a7908127..61e076a4199 100644
--- a/distrib/miniroot/install.sub
+++ b/distrib/miniroot/install.sub
@@ -1,4 +1,5 @@
-# $OpenBSD: install.sub,v 1.883 2016/03/05 17:18:27 rpe Exp $
+#!/bin/ksh
+# $OpenBSD: install.sub,v 1.884 2016/04/02 12:23:46 rpe Exp $
#
# Copyright (c) 1997-2015 Todd Miller, Theo de Raadt, Ken Westerback
# Copyright (c) 2015, Robert Peichaer <rpe@openbsd.org>
@@ -60,7 +61,7 @@
# ------------------------------------------------------------------------------
usage() {
- echo "usage: ${0##*/} [-a] [-f filename]" >&2
+ echo "usage: ${0##*/} [-a] [-f filename] [-m install | upgrade]" >&2
exit 1
}
@@ -2329,6 +2330,312 @@ __EOT
$AUTO && >/ai.done
}
+do_install(){
+ # Ask for/set the system hostname and add the hostname specific siteXX set.
+ ask_until "System hostname? (short form, e.g. 'foo')" "$(hostname -s)"
+ [[ ${resp%%.*} != $(hostname -s) ]] && hostname "$resp"
+ THESETS="$THESETS site$VERSION-$(hostname -s).tgz"
+
+ echo
+
+ # Configure the network.
+ donetconfig
+
+ # If there's network connectivity, fetch list of mirror servers and installer
+ # choices from previous runs.
+ ((NIFS)) && startcgiinfo
+
+ echo
+
+ while :; do
+ askpassword "Password for root account?"
+ _rootpass="$_password"
+ [[ -n "$_password" ]] && break
+ echo "The root password must be set."
+ done
+
+ # Ask for the root user public ssh key during autoinstall.
+ rootkey=
+ if $AUTO; then
+ ask "Public ssh key for root account?" none
+ [[ $resp != none ]] && rootkey=$resp
+ fi
+
+ # Ask user about daemon startup on boot, X Window usage and console setup.
+ questions
+
+ # Gather information for setting up the initial user account.
+ user_setup
+ ask_root_sshd
+
+ # Set TZ variable based on zonefile and user selection.
+ set_timezone /var/tzlist
+
+ echo
+
+ # Get information about ROOTDISK, etc.
+ get_rootinfo
+
+ DISKS_DONE=
+ FSENT=
+
+ # Remove traces of previous install attempt.
+ rm -f /tmp/fstab*
+
+ # Configure the disk(s).
+ while :; do
+ # Always do ROOTDISK first, and repeat until it is configured.
+ if ! isin $ROOTDISK $DISKS_DONE; then
+ resp=$ROOTDISK
+ rm -f /tmp/fstab
+ else
+ # Force the user to think and type in a disk name by
+ # making 'done' the default choice.
+ ask_which "disk" "do you wish to initialize" \
+ '$(get_dkdevs_uninitialized)' done
+ [[ $resp == done ]] && break
+ fi
+ _disk=$resp
+ configure_disk $_disk || continue
+ DISKS_DONE=$(addel $_disk $DISKS_DONE)
+ done
+
+ # Write fstab entries to fstab in mount point alphabetic order
+ # to enforce a rational mount order.
+ for _mp in $(bsort $FSENT); do
+ _pp=${_mp##*!}
+ _mp=${_mp%!*}
+ echo -n "$_pp $_mp ffs rw"
+
+ # Only '/' is neither nodev nor nosuid. i.e. it can obviously
+ # *always* contain devices or setuid programs.
+ [[ $_mp == / ]] && { echo " 1 1"; continue; }
+
+ # Every other mounted filesystem is nodev. If the user chooses
+ # to mount /dev as a separate filesystem, then on the user's
+ # head be it.
+ echo -n ",nodev"
+
+ # The only directories that the install puts suid binaries into
+ # (as of 3.2) are:
+ #
+ # /sbin
+ # /usr/bin
+ # /usr/sbin
+ # /usr/libexec
+ # /usr/libexec/auth
+ # /usr/X11R6/bin
+ #
+ # and ports and users can do who knows what to /usr/local and
+ # sub directories thereof.
+ #
+ # So try to ensure that only filesystems that are mounted at
+ # or above these directories can contain suid programs. In the
+ # case of /usr/libexec, give blanket permission for
+ # subdirectories.
+ case $_mp in
+ /sbin|/usr) ;;
+ /usr/bin|/usr/sbin) ;;
+ /usr/libexec|/usr/libexec/*) ;;
+ /usr/local|/usr/local/*) ;;
+ /usr/X11R6|/usr/X11R6/bin) ;;
+ *) echo -n ",nosuid" ;;
+ esac
+ echo " 1 2"
+ done >>/tmp/fstab
+
+ # Create a skeletal /etc/fstab which is usable for the installation process.
+ munge_fstab
+
+ # Use async options for faster mounts of the filesystems.
+ mount_fs "-o async"
+
+ # Feed the random pool some entropy before we read from it.
+ feed_random
+
+ # Ask the user for locations, and install whatever sets the user selected.
+ install_sets
+
+ # If we did not succeed at setting TZ yet, we try again
+ # using the timezone names extracted from the base set.
+ if [[ -z $TZ ]]; then
+ (cd /mnt/usr/share/zoneinfo
+ ls -1dF $(tar cvf /dev/null [A-Za-y]*) >/mnt/tmp/tzlist )
+ echo
+ set_timezone /mnt/tmp/tzlist
+ rm -f /mnt/tmp/tzlist
+ fi
+
+ # If we got a timestamp from the cgi server, and that time diffs by more
+ # than 120 seconds, ask if the user wants to adjust the time.
+ if _time=$(http_time) && _now=$(date +%s) &&
+ (( _now - _time > 120 || _time - _now > 120 )); then
+ _tz=/mnt/usr/share/zoneinfo/$TZ
+ if ask_yn "Time appears wrong. Set to '$(TZ=$_tz date -r "$(http_time)")'?" yes; then
+ # We do not need to specify TZ below since both date
+ # invocations use the same one.
+ date $(date -r "$(http_time)" "+%Y%m%d%H%M.%S") >/dev/null
+ # N.B. This will screw up SECONDS.
+ fi
+ fi
+
+ # If we managed to talk to the cgi server before, tell it what
+ # location we used... so it can perform magic next time.
+ if [[ -s $HTTP_LIST ]]; then
+ _i=${INSTALL:+install=$INSTALL&}
+ _i=$_i${TZ:+TZ=$TZ&}
+ _i=$_i${METHOD:+method=$METHOD}
+ _i=${_i%&}
+ [[ -n $_i ]] && ftp -Vao - \
+ "http://129.128.5.191/cgi-bin/ftpinstall.cgi?$_i" >/dev/null 2>&1 &
+ fi
+
+ # Ensure an enabled console has the correct speed in /etc/ttys.
+ sed "/^console.*on.*secure.*$/s/std\.[0-9]*/std.$(stty speed </dev/console)/" \
+ /mnt/etc/ttys >/tmp/ttys
+ mv /tmp/ttys /mnt/etc/ttys
+
+ echo -n "Saving configuration files..."
+
+ # Save any leases obtained during install.
+ (cd /var/db; for _f in dhclient.leases.*; do
+ [[ -f $_f ]] && mv $_f /mnt/var/db/.
+ done)
+
+ # Move configuration files from /tmp to /mnt/etc.
+ hostname >/tmp/myname
+
+ # Append entries to installed hosts file, changing '1.2.3.4 hostname'
+ # to '1.2.3.4 hostname.$FQDN hostname'. Leave untouched lines containing
+ # domain information or aliases. These are lines the user added/changed
+ # manually.
+
+ # Add common entries.
+ echo "127.0.0.1\tlocalhost" >/mnt/etc/hosts
+ echo "::1\t\tlocalhost" >>/mnt/etc/hosts
+
+ # Note we may have no hosts file if no interfaces were configured.
+ if [[ -f /tmp/hosts ]]; then
+ _dn=$(get_fqdn)
+ while read _addr _hn _aliases; do
+ if [[ -n $_aliases || $_hn != ${_hn%%.*} || -z $_dn ]]; then
+ echo "$_addr\t$_hn $_aliases"
+ else
+ echo "$_addr\t$_hn.$_dn $_hn"
+ fi
+ done </tmp/hosts >>/mnt/etc/hosts
+ rm /tmp/hosts
+ fi
+
+ # Append dhclient.conf to installed dhclient.conf.
+ _f=dhclient.conf
+ [[ -f /tmp/$_f ]] && { cat /tmp/$_f >>/mnt/etc/$_f; rm /tmp/$_f; }
+
+ # Possible files to copy from /tmp: fstab hostname.* kbdtype mygate
+ # myname ttys boot.conf resolv.conf sysctl.conf resolv.conf.tail
+ # Save only non-empty (-s) regular (-f) files.
+ (cd /tmp; for _f in fstab hostname* kbdtype my* ttys *.conf *.tail; do
+ [[ -f $_f && -s $_f ]] && mv $_f /mnt/etc/.
+ done)
+
+ echo "done."
+
+ # Apply configuration settings based on information from questions().
+ apply
+
+ # Create user account based on information from user_setup().
+ if [[ -n $user ]]; then
+ _encr=$(encr_pwd "$userpass")
+ _home=/home/$user
+ uline="${user}:${_encr}:1000:1000:staff:0:0:${username}:$_home:/bin/ksh"
+ echo "$uline" >>/mnt/etc/master.passwd
+ echo "${user}:*:1000:" >>/mnt/etc/group
+ echo ${user} >/mnt/root/.forward
+
+ _home=/mnt$_home
+ mkdir -p $_home
+ (cd /mnt/etc/skel; cp -pR . $_home)
+ (umask 077 && sed "s,^To: root\$,To: ${username} <${user}>," \
+ /mnt/var/mail/root >/mnt/var/mail/$user )
+ chown -R 1000:1000 $_home /mnt/var/mail/$user
+ sed -i -e "s@^wheel:.:0:root\$@wheel:\*:0:root,${user}@" \
+ /mnt/etc/group 2>/dev/null
+
+ # During autoinstall, add public ssh key to authorized_keys.
+ [[ -n "$userkey" ]] &&
+ print -r -- "$userkey" >>$_home/.ssh/authorized_keys
+ fi
+
+ # Store root password and rebuild password database.
+ if [[ -n "$_rootpass" ]]; then
+ _encr=$(encr_pwd "$_rootpass")
+ sed -i -e "s@^root::@root:${_encr}:@" /mnt/etc/master.passwd 2>/dev/null
+ fi
+ pwd_mkdb -p -d /mnt/etc /etc/master.passwd
+
+ # During autoinstall, add root user's public ssh key to authorized_keys.
+ [[ -n "$rootkey" ]] && (
+ umask 077
+ mkdir /mnt/root/.ssh
+ print -r -- "$rootkey" >>/mnt/root/.ssh/authorized_keys
+ )
+
+ # Perform final steps common to both an install and an upgrade.
+ finish_up
+}
+
+do_upgrade(){
+ # Have the user confirm that $ROOTDEV is the root filesystem.
+ get_rootinfo
+ while :; do
+ ask "Root filesystem?" $ROOTDEV
+ resp=${resp##*/}
+ [[ -b /dev/$resp ]] && break
+ echo "$resp is not a block device."
+ done
+ ROOTDEV=$resp
+
+ echo -n "Checking root filesystem (fsck -fp /dev/$ROOTDEV)..."
+ fsck -fp /dev/$ROOTDEV >/dev/null 2>&1 || { echo "FAILED."; exit; }
+ echo "OK."
+
+ echo -n "Mounting root filesystem (mount -o ro /dev/$ROOTDEV /mnt)..."
+ mount -o ro /dev/$ROOTDEV /mnt || { echo "FAILED."; exit; }
+ echo "OK."
+
+ # The fstab, hosts and myname files are required.
+ for _f in /mnt/etc/{fstab,hosts,myname}; do
+ [[ -f $_f ]] || { echo "No $_f!"; exit; }
+ cp $_f /tmp/${_f##*/}
+ done
+ hostname $(stripcom /tmp/myname)
+ THESETS="$THESETS site$VERSION-$(hostname -s).tgz"
+
+ # Configure the network.
+ enable_network
+
+ # Fetch the list of mirror servers and installer choices from previous runs.
+ startcgiinfo
+
+ # Create a skeletal /etc/fstab which is usable for the upgrade process.
+ munge_fstab
+
+ # fsck -p non-root filesystems in /etc/fstab.
+ check_fs
+
+ # Mount filesystems in /etc/fstab.
+ umount /mnt || { echo "Can't umount $ROOTDEV!"; exit; }
+ mount_fs
+
+ # Feed the random pool some entropy before we read from it.
+ feed_random
+
+ # Ask the user for locations, and install whatever sets the user selected.
+ install_sets
+
+ # Perform final steps common to both an install and an upgrade.
+ finish_up
+}
# ------------------------------------------------------------------------------
#
@@ -2342,17 +2649,29 @@ __EOT
# Parse parameters.
AUTO=false
+MODE=
+PROGNAME=${0##*/}
RESPFILE=
-while getopts "af:" opt; do
+while getopts "af:m:" opt; do
case $opt in
a) AUTO=true;;
f) RESPFILE=$OPTARG;;
+ m) MODE=$OPTARG;;
*) usage;;
esac
done
shift $((OPTIND-1))
(($# == 0)) || usage
+if [[ -z $MODE ]]; then
+ case $PROGNAME in
+ autoinstall) AUTO=true;;
+ install|upgrade) MODE=$PROGNAME;;
+ *) exit 1;;
+ esac
+fi
+
+
# Include machine-dependent functions and definitions.
#
# The following functions must be provided:
@@ -2513,3 +2832,8 @@ fi
# Configure the terminal and keyboard.
set_term
+
+case $MODE in
+install) do_install;;
+upgrade) do_upgrade;;
+esac
diff --git a/distrib/miniroot/list b/distrib/miniroot/list
index 92a682237c3..0b692158755 100644
--- a/distrib/miniroot/list
+++ b/distrib/miniroot/list
@@ -1,4 +1,4 @@
-# $OpenBSD: list,v 1.65 2015/04/13 21:27:07 deraadt Exp $
+# $OpenBSD: list,v 1.66 2016/04/02 12:23:46 rpe Exp $
SRCDIRS distrib/special
@@ -66,9 +66,10 @@ COPY ${CURDIR}/../miniroot/services etc/services
# and the installation scripts
SCRIPT ${CURDIR}/dot.profile .profile
-SCRIPT ${CURDIR}/upgrade.sh upgrade
-SCRIPT ${CURDIR}/install.sh install
SCRIPT ${CURDIR}/install.sub install.sub
-SPECIAL chmod 755 install upgrade
+SPECIAL chmod 755 install.sub
+SYMLINK install.sub autoinstall
+SYMLINK install.sub install
+SYMLINK install.sub upgrade
TZ
diff --git a/distrib/miniroot/upgrade.sh b/distrib/miniroot/upgrade.sh
index 3c198684391..e69de29bb2d 100644
--- a/distrib/miniroot/upgrade.sh
+++ b/distrib/miniroot/upgrade.sh
@@ -1,95 +0,0 @@
-#!/bin/ksh
-# $OpenBSD: upgrade.sh,v 1.89 2015/12/23 17:51:08 rpe Exp $
-# $NetBSD: upgrade.sh,v 1.2.4.5 1996/08/27 18:15:08 gwr Exp $
-#
-# Copyright (c) 1997-2015 Todd Miller, Theo de Raadt, Ken Westerback
-# Copyright (c) 2015, Robert Peichaer <rpe@openbsd.org>
-#
-# All rights reserved.
-#
-# Copyright (c) 1996 The NetBSD Foundation, Inc.
-# All rights reserved.
-#
-# This code is derived from software contributed to The NetBSD Foundation
-# by Jason R. Thorpe.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
-# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-#
-
-# OpenBSD upgrade script.
-
-# install.sub needs to know the MODE.
-MODE=upgrade
-
-# Include common subroutines and initialization code.
-. install.sub
-
-# Have the user confirm that $ROOTDEV is the root filesystem.
-get_rootinfo
-while :; do
- ask "Root filesystem?" $ROOTDEV
- resp=${resp##*/}
- [[ -b /dev/$resp ]] && break
- echo "$resp is not a block device."
-done
-ROOTDEV=$resp
-
-echo -n "Checking root filesystem (fsck -fp /dev/$ROOTDEV)..."
-fsck -fp /dev/$ROOTDEV >/dev/null 2>&1 || { echo "FAILED."; exit; }
-echo "OK."
-
-echo -n "Mounting root filesystem (mount -o ro /dev/$ROOTDEV /mnt)..."
-mount -o ro /dev/$ROOTDEV /mnt || { echo "FAILED."; exit; }
-echo "OK."
-
-# The fstab, hosts and myname files are required.
-for _f in /mnt/etc/{fstab,hosts,myname}; do
- [[ -f $_f ]] || { echo "No $_f!"; exit; }
- cp $_f /tmp/${_f##*/}
-done
-hostname $(stripcom /tmp/myname)
-THESETS="$THESETS site$VERSION-$(hostname -s).tgz"
-
-# Configure the network.
-enable_network
-
-# Fetch the list of mirror servers and installer choices from previous runs.
-startcgiinfo
-
-# Create a skeletal /etc/fstab which is usable for the upgrade process.
-munge_fstab
-
-# fsck -p non-root filesystems in /etc/fstab.
-check_fs
-
-# Mount filesystems in /etc/fstab.
-umount /mnt || { echo "Can't umount $ROOTDEV!"; exit; }
-mount_fs
-
-# Feed the random pool some entropy before we read from it.
-feed_random
-
-# Ask the user for locations, and install whatever sets the user selected.
-install_sets
-
-# Perform final steps common to both an install and an upgrade.
-finish_up