DragonFly upgrade script
Tse
1 at tse.gratis
Mon Jul 8 04:51:18 PDT 2019
Hiya dears,
I'm not sure if this the appropriate place, or if this is something you'd
like to consider; but I wanted to look at simplifying the OS upgrade
process. Turning this:
------
> cd /usr
> make src-create
> ...
> make buildworld
> make buildkernel
> ...
> make upgrade
------
Into this:
------
> /usr/upgrade
Upgrading DragonFly BSD
For more information see:
`man build` `man config`
/usr/src/README /usr/src/UPDATING
http://www.dragonflybsd.org/docs/handbook/
It is possible to run this script without root privileges
Usage: upgrade [configuration]
Configuration is "X86_64_GENERIC"
Latest releases:
[1] DragonFly_RELEASE_5_6
[2] DragonFly_RELEASE_5_4
[3] DragonFly_RELEASE_5_2
[4] DragonFly_RELEASE_5_0
[5] DragonFly_RELEASE_4_8
Select [1-5]:
------
I've tested it on new installs of 4.8, 5.2, and 5.4, and with installs
previously upgraded with `make src-create/src-create-shallow`
Anyway, here's the script:
------
#!/bin/sh
# ensure PATH contains what we use
export PATH=/sbin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
echo 'Upgrading DragonFly BSD'
echo ''
echo 'For more information see:'
echo ' `man build` `man config`'
echo ' /usr/src/README /usr/src/UPDATING'
echo ' http://www.dragonflybsd.org/docs/handbook/'
echo ''
errmsg() { echo "Failed: $1"; exit; }
# warn if root, or enable non-root usage
test `id -u` -eq 0 \
&& echo 'It is possible to run this script without root privileges' \
|| test `stat -f '%u' /usr/src` -eq 0 -o `stat -f '%u' /usr/obj` -eq 0 \
&& su -m root -c "chown -R `id -u` /usr/src; chown -R `id -u` /usr/obj"
2>/dev/null
# get KERNCONF
KERNCONF="$1"
test "$KERNCONF" \
|| { echo 'Usage: upgrade [configuration]'; KERNCONF='X86_64_GENERIC'; }
echo "Configuration is \"$KERNCONF\""
echo ''
# create the base repository
test -d /usr/src \
|| {
su -m root -c "mkdir /usr/src && chown `id -u` /usr/src" \
&& cd /usr/src \
&& git init >/dev/null \
&& git remote add origin git://git.dragonflybsd.org/dragonfly.git; }
cd /usr/src
# test network connection
git ls-remote origin not-here >/dev/null 2>&1 \
|| errmsg 'Could not reach git://git.dragonflybsd.org'
# list possible releases to choose from
RELEASES=`git ls-remote -q | grep 'DragonFly_RELEASE' | tail -5 -r | sed -E
's/.*\/heads\///'`
echo 'Latest releases:'
echo "$RELEASES" | cat -n | sed -E 's/^ +([0-9]+)./ [\1] /'
echo ''
printf 'Select [1-5]: '; read choice
# choice is acceptable number in range 1-5
test $choice -ge 1 -a $choice -le 5 2>/dev/null \
&& echo "$RELEASES" | head -"$choice" 2>/dev/null >&2 \
|| { echo 'Requires a number [1-5]'; exit; }
CHOICE=`echo "$RELEASES" | head -"$choice" | tail -1`
# install
git fetch --depth=1 origin "$CHOICE" \
|| errmsg 'git fetch' \
&& git checkout "$CHOICE" \
|| errmsg 'git checkout' \
&& test -f "/usr/src/sys/config/$KERNCONF" \
|| errmsg "Configuration \"$KERNCONF\" not in /usr/src/sys/config" \
&& make -j`sysctl -n hw.ncpu` buildworld \
|| errmsg 'make buildworld' \
&& make -j`sysctl -n hw.ncpu` buildkernel KERNCONF="$KERNCONF" \
|| errmsg 'make buildkernel' \
&& su -m root -c "make installkernel KERNCONF='$KERNCONF'" \
|| errmsg 'make installkernel' \
&& su -m root -c 'make installworld' \
|| errmsg 'make installworld' \
&& su -m root -c 'make upgrade' \
|| errmsg 'make upgrade'
------
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.dragonflybsd.org/pipermail/users/attachments/20190708/81f23569/attachment.html>
More information about the Users
mailing list