<div dir="ltr">Hiya dears,<div><br></div><div>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:</div><div>------</div><div>> cd /usr</div><div>> make src-create</div><div>> ...</div><div>> make buildworld</div><div>> make buildkernel</div><div>> ...</div><div>> make upgrade</div><div>------</div><div><br></div><div>Into this:</div><div>------</div><div>> /usr/upgrade</div><div>Upgrading DragonFly BSD<br><br>For more information see:<br>  `man build`      `man config`<br>  /usr/src/README  /usr/src/UPDATING<br>  <a href="http://www.dragonflybsd.org/docs/handbook/" target="_blank">http://www.dragonflybsd.org/docs/handbook/</a><br><br>It is possible to run this script without root privileges</div><div>Usage:  upgrade [configuration]<br>Configuration is "X86_64_GENERIC"<br><br>Latest releases:<br>  [1]  DragonFly_RELEASE_5_6<br>  [2]  DragonFly_RELEASE_5_4<br>  [3]  DragonFly_RELEASE_5_2<br>  [4]  DragonFly_RELEASE_5_0<br>  [5]  DragonFly_RELEASE_4_8<br><br>Select [1-5]: <br></div><div>------</div><div><br></div><div>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`</div><div><br></div><div>Anyway, here's the script:</div><div>------</div><div>#!/bin/sh<br><br># ensure PATH contains what we use<br>export PATH=/sbin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin<br><br>echo 'Upgrading DragonFly BSD'<br>echo ''<br>echo 'For more information see:'<br>echo '  `man build`      `man config`'<br>echo '  /usr/src/README  /usr/src/UPDATING'<br>echo '  <a href="http://www.dragonflybsd.org/docs/handbook/" target="_blank">http://www.dragonflybsd.org/docs/handbook/</a>'<br>echo ''<br><br>errmsg() { echo "Failed:  $1"; exit; }<br><br># warn if root, or enable non-root usage<br>test `id -u` -eq 0 \<br>&& echo 'It is possible to run this script without root privileges' \<br>|| test `stat -f '%u' /usr/src` -eq 0  -o  `stat -f '%u' /usr/obj` -eq 0 \<br>&& su -m root -c "chown -R `id -u` /usr/src; chown -R `id -u` /usr/obj" 2>/dev/null<br><br># get KERNCONF<br>KERNCONF="$1"<br>test "$KERNCONF" \<br>|| { echo 'Usage:  upgrade [configuration]'; KERNCONF='X86_64_GENERIC'; }<br>echo "Configuration is \"$KERNCONF\""<br>echo ''<br><br># create the base repository<br>test -d /usr/src \<br>|| {<br>  su -m root -c "mkdir /usr/src && chown `id -u` /usr/src" \<br>  && cd /usr/src \<br>  && git init >/dev/null \<br>  && git remote add origin git://<a href="http://git.dragonflybsd.org/dragonfly.git" target="_blank">git.dragonflybsd.org/dragonfly.git</a>; }<br>cd /usr/src<br><br># test network connection<br>git ls-remote origin not-here >/dev/null 2>&1 \<br>|| errmsg 'Could not reach git://<a href="http://git.dragonflybsd.org" target="_blank">git.dragonflybsd.org</a>'<br><br># list possible releases to choose from<br>RELEASES=`git ls-remote -q | grep 'DragonFly_RELEASE' | tail -5 -r | sed -E 's/.*\/heads\///'`<br>echo 'Latest releases:'<br>echo "$RELEASES" | cat -n | sed -E 's/^ +([0-9]+)./  [\1]  /'<br>echo ''<br>printf 'Select [1-5]: '; read choice<br><br># choice is acceptable number in range 1-5<br>test $choice -ge 1 -a $choice -le 5     2>/dev/null \<br>&& echo "$RELEASES" | head -"$choice"   2>/dev/null >&2 \<br>|| { echo 'Requires a number [1-5]'; exit; }<br>CHOICE=`echo "$RELEASES" | head -"$choice" | tail -1`<br><br># install<br>git fetch --depth=1 origin "$CHOICE" \<br>|| errmsg 'git fetch' \<br>&& git checkout "$CHOICE" \<br>|| errmsg 'git checkout' \<br>&& test -f "/usr/src/sys/config/$KERNCONF" \<br>|| errmsg "Configuration \"$KERNCONF\" not in /usr/src/sys/config" \<br>&& make -j`sysctl -n hw.ncpu` buildworld \<br>|| errmsg 'make buildworld' \<br>&& make -j`sysctl -n hw.ncpu` buildkernel KERNCONF="$KERNCONF" \<br>|| errmsg 'make buildkernel' \<br>&& su -m root -c "make installkernel KERNCONF='$KERNCONF'" \<br>|| errmsg        'make installkernel' \<br>&& su -m root -c 'make installworld' \<br>|| errmsg        'make installworld' \<br>&& su -m root -c 'make upgrade' \<br>|| errmsg        'make upgrade'<br></div><div>------</div></div>