Skip to content

Commit

Permalink
bsdinstall: Fix installation script splitting
Browse files Browse the repository at this point in the history
This allows writing setup scripts that contain lines starting with
"#!", e.g., a shebang when creating a shell script using cat:

    #!/bin/sh
    echo "Populate rc.local"
    cat >/etc/rc.local<<EOF
    #!/bin/sh
    echo booted | logger -s -t 'example'
    EOF

Prevent accidentally running a setup script left behind by a
previous invocation of bsdinstall.

Reviewed by:	imp, jrtc27
Differential Revision:	https://reviews.freebsd.org/D43350
  • Loading branch information
grembo authored and bsdjhb committed Mar 14, 2024
2 parents a84791c + 731704f commit 6a6ce1a
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 10 deletions.
18 changes: 12 additions & 6 deletions usr.sbin/bsdinstall/scripts/jail
Original file line number Diff line number Diff line change
Expand Up @@ -61,11 +61,16 @@ export BSDINSTALL_CHROOT=$1
rm -rf $BSDINSTALL_TMPETC
mkdir $BSDINSTALL_TMPETC
mkdir -p $1 || error "mkdir failed for $1"
rm -f $TMPDIR/bsdinstall-installscript-setup

if [ -n "$SCRIPT" ]
then
split -a 2 -p '^#!.*' "$SCRIPT" $TMPDIR/bsdinstall-installscript-
. $TMPDIR/bsdinstall-installscript-aa
if [ -n "$SCRIPT" ]; then
# split script into preamble and setup script at first shebang
awk 'BEGIN {pathb=ARGV[2]; ARGV[2]=""} /^#!/{b=1} {
if (b) print >pathb; else print}' \
"$SCRIPT" $TMPDIR/bsdinstall-installscript-setup \
>$TMPDIR/bsdinstall-installscript-preamble

. $TMPDIR/bsdinstall-installscript-preamble
fi

test ! -d $BSDINSTALL_DISTDIR && mkdir -p $BSDINSTALL_DISTDIR
Expand Down Expand Up @@ -146,8 +151,9 @@ cp /etc/localtime $1/etc
cp /var/db/zoneinfo $1/var/db

# Run post-install script
if [ -f $TMPDIR/bsdinstall-installscript-ab ]; then
cp $TMPDIR/bsdinstall-installscript-ab $BSDINSTALL_CHROOT/tmp/installscript
if [ -f $TMPDIR/bsdinstall-installscript-setup ]; then
cp $TMPDIR/bsdinstall-installscript-setup \
$BSDINSTALL_CHROOT/tmp/installscript
chmod a+x $BSDINSTALL_CHROOT/tmp/installscript
mount -t devfs devfs "$BSDINSTALL_CHROOT/dev"
chroot $BSDINSTALL_CHROOT /tmp/installscript $@ 2>&1
Expand Down
14 changes: 10 additions & 4 deletions usr.sbin/bsdinstall/scripts/script
Original file line number Diff line number Diff line change
Expand Up @@ -88,10 +88,15 @@ shift
f_dprintf "Began Installation at %s" "$( date )"
rm -rf $BSDINSTALL_TMPETC
mkdir $BSDINSTALL_TMPETC
rm -f $TMPDIR/bsdinstall-installscript-setup

split -a 2 -p '^#!.*' "$SCRIPT" $TMPDIR/bsdinstall-installscript-
# split script into preamble and setup script at first shebang
awk 'BEGIN {pathb=ARGV[2]; ARGV[2]=""} /^#!/{b=1} {
if (b) print >pathb; else print}' \
"$SCRIPT" $TMPDIR/bsdinstall-installscript-setup \
>$TMPDIR/bsdinstall-installscript-preamble

. $TMPDIR/bsdinstall-installscript-aa
. $TMPDIR/bsdinstall-installscript-preamble
: ${DISTRIBUTIONS="kernel.txz base.txz"}; export DISTRIBUTIONS
export BSDINSTALL_DISTDIR

Expand Down Expand Up @@ -158,8 +163,9 @@ if [ ! -f $BSDINSTALL_CHROOT/etc/resolv.conf -a -f /etc/resolv.conf ]; then
fi

# Run post-install script
if [ -f $TMPDIR/bsdinstall-installscript-ab ]; then
cp $TMPDIR/bsdinstall-installscript-ab $BSDINSTALL_CHROOT/tmp/installscript
if [ -f $TMPDIR/bsdinstall-installscript-setup ]; then
cp $TMPDIR/bsdinstall-installscript-setup \
$BSDINSTALL_CHROOT/tmp/installscript
chmod a+x $BSDINSTALL_CHROOT/tmp/installscript
chroot $BSDINSTALL_CHROOT /tmp/installscript $@ 2>&1
rm $BSDINSTALL_CHROOT/tmp/installscript
Expand Down

0 comments on commit 6a6ce1a

Please sign in to comment.