Browse Source

Documentation and helper script for the new upgrade script handling

Matthias Schiffer 9 years ago
parent
commit
4c8866ffb7
3 changed files with 88 additions and 0 deletions
  1. 44 0
      contrib/lsupgrade.sh
  2. 43 0
      docs/dev/upgrade.rst
  3. 1 0
      docs/index.rst

+ 44 - 0
contrib/lsupgrade.sh

@@ -0,0 +1,44 @@
+#!/bin/bash
+
+# Script to list all upgrade scripts in a clear manner
+# Limitations:
+#  * Does only show scripts of packages whose `files' directory represent the whole image filesystem (which are all Gluon packages)
+
+
+SUFFIX=files/lib/gluon/upgrade
+
+
+shopt -s nullglob
+
+
+if tty -s <&1; then
+	RED="$(echo -e '\x1b[01;31m')"
+	GREEN="$(echo -e '\x1b[01;32m')"
+	BLUE="$(echo -e '\x1b[01;34m')"
+	RESET="$(echo -e '\x1b[0m')"
+else
+	RED=
+	GREEN=
+	BLUE=
+	RESET=
+fi
+
+
+pushd "$(dirname "$0")/.." >/dev/null
+
+find packages -name Makefile | while read makefile; do
+	dir="$(dirname "$makefile")"
+
+	pushd "$dir" >/dev/null
+
+	repo="$(dirname "$dir" | cut -d/ -f 2)"
+	dirname="$(dirname "$dir" | cut -d/ -f 3-)"
+	package="$(basename "$dir")"
+
+	for file in "${SUFFIX}"/*; do
+		echo "${GREEN}$(basename "${file}")${RESET}" "(${BLUE}${repo}${RESET}/${dirname}/${RED}${package}${RESET}/${SUFFIX})"
+	done
+	popd >/dev/null
+done | sort
+
+popd >/dev/null

+ 43 - 0
docs/dev/upgrade.rst

@@ -0,0 +1,43 @@
+Upgrade scripts
+===============
+
+Basics
+------
+
+After each sysupgrade (including the initial installation), Gluon will execute all scripts
+under ``/lib/gluon/upgrade``. These scripts' filenames usually begin with a 3-digit number
+specifying the order of execution.
+
+To get an overview of the ordering of all scripts of all packages, the helper script ``contrib/lsupgrade.sh``
+in the Gluon repository can be used, which will print all upgrade scripts' filenames and directories. If executed
+on a TTY, the filename will be highlighted in green, the repository in blue and the package in red.
+
+Best practices
+--------------
+
+* Most upgrade scripts are written in Lua. This allows using lots of helper functions provided
+  by LuCi and Gluon, e.g. to access the site configuration or edit UCI configuration files.
+
+* Whenever possible, scripts shouldn't check if they are running for the first time, but just edit configuration
+  files to achive a valid configuration (without overwriting configuration changes made by the user where desirable).
+  This allows using the same code to create the initial configuration and upgrade configurations on upgrades.
+
+* If it is unavoidable to run different code during the initial installation, the ``sysconfig.gluon_version`` variable
+  can be checked. This variable in ``nil`` during the initial installation and contains the previously install Gluon
+  version otherwise. The package ``gluon-legacy`` (which is responsible for upgrades from the old firmwares of
+  Hamburg/Kiel/Lübeck) uses the special value ``legacy``; other packages should handle this value just as any other
+  string.
+
+Script ordering
+---------------
+
+These are some guidelines for the script numbers:
+
+* ``0xx``: Basic ``sysconfig`` setup
+* ``1xx``: Basic system setup (including basic network configuration)
+* ``2xx``: Wireless setup
+* ``3xx``: Advanced network and system setup
+* ``4xx``: Extended network and system setup (e.g. mesh VPN and next-node)
+* ``5xx``: Miscellaneous (everything not fitting into any other category)
+* ``6xx`` .. ``8xx``: Currently unused
+* ``9xx``: Upgrade finalization

+ 1 - 0
docs/index.rst

@@ -36,6 +36,7 @@ Developer Documentation
 
    dev/basics
    dev/hardware
+   dev/upgrade
    dev/configmode
 
 Supported Devices