[PATCH] use custom names for binary builds. fixes #9

Tim Niemeyer tim.niemeyer at mastersword.de
Fr Feb 5 22:49:01 CET 2016


Hallo

Unten einige Kommentare. Im Grunde sind es nur n paar Kleinigkeiten, es
sieht allerdings recht viel aus, weil einige neue Features (die mMn in
einen eigenen Patch sollten) hier eingeflossen sind.

Am Dienstag, den 02.02.2016, 00:11 +0100 schrieb Alexander Wunschik:
> From: mojoaxel <alex at wunschik.net>
> 
> Signed-off-by: mojoaxel <alex at wunschik.net>
Bei den letzten Patches hast du hier mit Realname gearbeitet, stört mich
jetzt nicht, wundere mich nur.

> 
> ---
>  - use custom names for binary builds. 
>  - generate release.nfo file with all commits since the last tag (nedded from sysupgrade.sh).
>  - changed sysupgrade script to use new filename-scheme.
>  
>  Hints for deployment:
>  The deployment folder at the dev-server changed from "/dev/firmware/current" to "/dev/firmware/franken/current" for the franken community to be consistent with the aux builds. This also ensures that old firmwares are still able to upgrade using the old sysupgrade script. 
Wegen mir können wir das umbenennen, aber mMn sollte das wenn überhaupt
in einem separaten Patch sein.
[Bitte auch hin und wieder mal einen Zeilenumbruch verwenden]

>  For that to work e.g. symlinks with the old name-scheme must be deployed to the depricated folder "/dev/firmware/current".
>  The file release.nfo must be placed in the same folder on the dev-server as all the binaries. It is used by the sysupgrade script to determine the latest released version.
> 
>  bsp/board_ar71xx.bsp                               | 46 +++++++++++-----------
>  bsp/board_wdr4300.bsp                              | 31 ++++++++-------
>  bsp/board_wdr4900.bsp                              | 15 +++++--
>  .../root_file_system/etc/config/firmware.tpl       |  5 ++-
>  bsp/default/root_file_system/etc/sysupgrade.sh     | 26 ++++++------
>  buildscript                                        |  9 +++++
>  community/aux.cfg                                  |  1 +
>  community/franken.cfg                              |  3 +-
>  8 files changed, 83 insertions(+), 53 deletions(-)
> 
> diff --git a/bsp/board_ar71xx.bsp b/bsp/board_ar71xx.bsp
> index 4876631..d18da37 100644
> --- a/bsp/board_ar71xx.bsp
> +++ b/bsp/board_ar71xx.bsp
> @@ -1,5 +1,22 @@
>  machine=ar71xx
> +chipset=ar71xx
>  target=$builddir/$machine
> +boards=(
> +    ubnt-nano-m
Hier fehlt "ubnt-loco-m-xw".

> +    tl-wr740n-v4
> +    tl-wr741nd-v2
> +    tl-wr741nd-v4
> +    tl-wr841nd-v7
> +    tl-wr841n-v8
> +    tl-wr841n-v9
> +    tl-wr841n-v10
> +    tl-wr842n-v2
> +    tl-wr1043nd-v1
> +    tl-wr1043nd-v2
> +    tl-wr1043nd-v3
> +    tl-wa850re-v1
> +    tl-wa860re-v1
Hier fehlt "gl-ar150".

> +)
>  
>  board_prepare() {
>      echo "nothing todo" > /dev/null
> @@ -10,30 +27,13 @@ board_prebuild() {
>  }
>  
>  board_postbuild() {
> -    cp $target/bin/ar71xx/openwrt-ar71xx-generic-ubnt-nano-m-squashfs-*.bin ./bin/
> +    for board in ${boards[@]}; do
> +        filename_openwrt=openwrt-${chipset}-generic-${board}-squashfs
> +        filename_build=fff-${community}_${version}_${board}
>  
> -    cp $target/bin/ar71xx/openwrt-ar71xx-generic-ubnt-loco-m-xw-squashfs-*.bin ./bin/
Hier wiederum war "ubnt-loco-m-xw" noch da.

> -
> -    cp $target/bin/ar71xx/openwrt-ar71xx-generic-tl-wr740n-v4-squashfs-*.bin ./bin/
> -
> -    cp $target/bin/ar71xx/openwrt-ar71xx-generic-tl-wr741nd-v2-squashfs-*.bin ./bin/
> -    cp $target/bin/ar71xx/openwrt-ar71xx-generic-tl-wr741nd-v4-squashfs-*.bin ./bin/
> -
> -    cp $target/bin/ar71xx/openwrt-ar71xx-generic-tl-wr841nd-v7-squashfs-*.bin ./bin/
> -    cp $target/bin/ar71xx/openwrt-ar71xx-generic-tl-wr841n-v8-squashfs-*.bin ./bin/
> -    cp $target/bin/ar71xx/openwrt-ar71xx-generic-tl-wr841n-v9-squashfs-*.bin ./bin/
> -    cp $target/bin/ar71xx/openwrt-ar71xx-generic-tl-wr841n-v10-squashfs-*.bin ./bin/
> -
> -    cp $target/bin/ar71xx/openwrt-ar71xx-generic-tl-wr842n-v2-squashfs-*.bin ./bin/
> -
> -    cp $target/bin/ar71xx/openwrt-ar71xx-generic-tl-wr1043nd-v1-squashfs-*.bin ./bin/
> -    cp $target/bin/ar71xx/openwrt-ar71xx-generic-tl-wr1043nd-v2-squashfs-*.bin ./bin/
> -    cp $target/bin/ar71xx/openwrt-ar71xx-generic-tl-wr1043nd-v3-squashfs-*.bin ./bin/
> -
> -    cp $target/bin/ar71xx/openwrt-ar71xx-generic-tl-wa860re-v1-squashfs-*.bin ./bin/
> -    cp $target/bin/ar71xx/openwrt-ar71xx-generic-tl-wa850re-v1-squashfs-*.bin ./bin/
> -
> -    cp $target/bin/ar71xx/openwrt-ar71xx-generic-gl-ar150-squashfs-*.bin ./bin/
Hier war "gl-ar150" noch da.

> +        cp $target/bin/${chipset}/${filename_openwrt}-factory.bin ./bin/${filename_build}_factory.bin
> +        cp $target/bin/${chipset}/${filename_openwrt}-sysupgrade.bin ./bin/${filename_build}_sysupgrade.bin
> +    done
>  }
>  
>  board_clean() {

Abgesehen davon, dass board_clean versehentlich auch die Binaries des
wdr4300-bsp entfernt, geht hier durch das umbenennen das board_clean
komplett kaputt, weil $machine (ar71xx) nicht mehr Bestandteil des
Imagenames ist.

> diff --git a/bsp/board_wdr4300.bsp b/bsp/board_wdr4300.bsp
> index 7e6c66e..025219c 100644
> --- a/bsp/board_wdr4300.bsp
> +++ b/bsp/board_wdr4300.bsp
> @@ -1,28 +1,31 @@
>  machine=wdr4300
> +chipset=ar71xx
>  target=$builddir/$machine
> +boards=(
> +    tl-wdr3500-v1
> +    tl-wdr3600-v1
> +    tl-wdr4300-v1
> +    tl-wdr4310-v1
> +)
>  
>  board_prepare() {
> -	echo "nothing todo" > /dev/null
> +    echo "nothing todo" > /dev/null
>  }
>  
>  board_prebuild() {
> -	echo "nothing todo" > /dev/null
> +    echo "nothing todo" > /dev/null
>  }
>  
>  board_postbuild() {
> -    cp $target/bin/ar71xx/openwrt-ar71xx-generic-tl-wdr3500-v1-squashfs-factory.bin ./bin/
> -    cp $target/bin/ar71xx/openwrt-ar71xx-generic-tl-wdr3500-v1-squashfs-sysupgrade.bin ./bin/
> +    for board in ${boards[@]}; do
> +        filename_openwrt=openwrt-${chipset}-generic-${board}-squashfs
> +        filename_build=fff-${community}_${version}_${board}
>  
> -    cp $target/bin/ar71xx/openwrt-ar71xx-generic-tl-wdr3600-v1-squashfs-factory.bin ./bin/
> -    cp $target/bin/ar71xx/openwrt-ar71xx-generic-tl-wdr3600-v1-squashfs-sysupgrade.bin ./bin/
> -
> -    cp $target/bin/ar71xx/openwrt-ar71xx-generic-tl-wdr4300-v1-squashfs-factory.bin ./bin/
> -    cp $target/bin/ar71xx/openwrt-ar71xx-generic-tl-wdr4300-v1-squashfs-sysupgrade.bin ./bin/
> -
> -    cp $target/bin/ar71xx/openwrt-ar71xx-generic-tl-wdr4310-v1-squashfs-factory.bin ./bin/
> -    cp $target/bin/ar71xx/openwrt-ar71xx-generic-tl-wdr4310-v1-squashfs-sysupgrade.bin ./bin/
> +        cp $target/bin/${chipset}/${filename_openwrt}-factory.bin ./bin/${filename_build}_factory.bin
> +        cp $target/bin/${chipset}/${filename_openwrt}-sysupgrade.bin ./bin/${filename_build}_sysupgrade.bin
> +    done
>  }
>  
>  board_clean() {
> -	/bin/rm -rf $target bin/*$machine*
> -}
> \ No newline at end of file
> +    /bin/rm -rf $target bin/*$machine*
Hier war das board_clean bereits kaputt, denn hier wird nur das Image
vom wdr4300 gelöscht.

> +}
> diff --git a/bsp/board_wdr4900.bsp b/bsp/board_wdr4900.bsp
> index 777b3b5..5c0d6fb 100644
> --- a/bsp/board_wdr4900.bsp
> +++ b/bsp/board_wdr4900.bsp
> @@ -1,5 +1,9 @@
>  machine=wdr4900
> +chipset=mpc85xx
>  target=$builddir/$machine
> +boards=(
> +    tl-wdr4900-v1
> +)
>  
>  board_prepare() {
>  	echo "nothing todo" > /dev/null
> @@ -10,10 +14,15 @@ board_prebuild() {
>  }
>  
>  board_postbuild() {
> -    cp $target/bin/mpc85xx/openwrt-mpc85xx-generic-tl-wdr4900-v1-squashfs-factory.bin ./bin/
> -    cp $target/bin/mpc85xx/openwrt-mpc85xx-generic-tl-wdr4900-v1-squashfs-sysupgrade.bin ./bin/
> +    for board in ${boards[@]}; do
> +        filename_openwrt=openwrt-${chipset}-generic-${board}-squashfs
> +        filename_build=fff-${community}_${version}_${board}
> +
> +        cp $target/bin/${chipset}/${filename_openwrt}-factory.bin ./bin/${filename_build}_factory.bin
> +        cp $target/bin/${chipset}/${filename_openwrt}-sysupgrade.bin ./bin/${filename_build}_sysupgrade.bin
> +    done
>  }
>  
>  board_clean() {
>  	/bin/rm -rf $target bin/*$machine*
Das sollte funktionieren.

> -}
> \ No newline at end of file
> +}
> diff --git a/bsp/default/root_file_system/etc/config/firmware.tpl b/bsp/default/root_file_system/etc/config/firmware.tpl
> index 1c2e7d6..13c8408 100644
> --- a/bsp/default/root_file_system/etc/config/firmware.tpl
> +++ b/bsp/default/root_file_system/etc/config/firmware.tpl
> @@ -1,4 +1,7 @@
> +config info 'info'
> +	option community '${COMMUNITY_NAME}'
> +
Das sollte nicht nötig sein. (s.u.)

>  config upgrade 'upgrade'
>  	option path '${UPGRADE_PATH}'
>  	option auto 0
> -	option remote 1
> \ No newline at end of file
> +	option remote 1
> diff --git a/bsp/default/root_file_system/etc/sysupgrade.sh b/bsp/default/root_file_system/etc/sysupgrade.sh
> index e954514..4d70437 100755
> --- a/bsp/default/root_file_system/etc/sysupgrade.sh
> +++ b/bsp/default/root_file_system/etc/sysupgrade.sh
> @@ -1,21 +1,25 @@
>  #!/bin/sh
> +cd /tmp/
>  
> -BOARD=`uci get board.model.name`
> +COMMUNITY=`uci get firmware.info.community`
Ich fänd es besser, wenn hier der selbe Mechanismus, wie beim
Nodewatcher verwendet werden würde:

. /etc/firmware_release
COMMUNITY=$FIRMWARE_COMMUNITY

Grundsätzlich bin ich offen den Mechanismus im Nodewatcher zu ändern,
aber aktuell ist der eben dort so vorhanden. Aus diesem Grund macht es
Sinn den von dort erst einmal zu übernehmen und bei Nichtgefallen dann
einen Separaten Patch zu schicken, der beides ändert.

>  
> -case $BOARD in
> -    tl-wdr4900-v1 )
> -        SOC="mpc85xx" ;;
> -    * )
> -        SOC="ar71xx" ;;
> -esac
> +BOARD=`uci get board.model.name`
> +echo -ne "\nHardware: $BOARD\n"
>  
> -FILE="openwrt-${SOC}-generic-${BOARD}-squashfs-sysupgrade.bin"
> +wget $(uci get firmware.upgrade.path)/release.nfo
> +if [ ! -f release.nfo ]; then
> +  echo -ne "Last release info not found. Please try to update manually.\n\n"
> +  exit 1
> +fi
> +VERSION=`cat release.nfo | grep -Po '(?<=^VERSION:).*'`
> +rm -f release.nfo
> +echo -ne "Firmware found on server: $VERSION\n"
>  
> -echo -ne "\nHardware: $BOARD\n"
> +FILE="fff-${COMMUNITY}_${VERSION}_${BOARD}-sysupgrade.bin"
>  echo -ne "Downloading $FILE\n\n"
> -cd /tmp/
>  wget $(uci get firmware.upgrade.path)/${FILE}
>  wget $(uci get firmware.upgrade.path)/${FILE}.md5
> +
>  echo -ne "\ndone. Comparing md5 sums: "
>  md5sum -c ${FILE}.md5
>  ret=$?
> @@ -32,4 +36,4 @@ else
>          [Nn]|* ) echo -ne "\nAborting firmware upgrade.\n\n"; rm -f ${FILE}*; exit 0;;
>      esac
>    done
> -fi
> \ No newline at end of file
> +fi
> diff --git a/buildscript b/buildscript
> index ec9ae64..9f6b57b 100755
> --- a/buildscript
> +++ b/buildscript
> @@ -272,6 +272,15 @@ config() {
>  
>  postbuild() {
>      board_postbuild
> +
> +    # generate release.nfo
> +    RELEASE_NFO="./bin/release.nfo"
> +    touch $RELEASE_NFO
> +    # add version info at the top of the file; needed by etc/sysupgrade.sh
> +    echo -e "VERSION:$version\n\n" > $RELEASE_NFO
Ich persönlich mag es auch lieber, wenn in der Nähe des
Download-Verzeichnisses einfach eine Datei mit dem Namen
"current_is_x.y.z" liegt, da sieht man es ohne Download, aber das ist
Geschmackssache.

> +    # add alle commits since the last tag
> +    echo -e "Commits since last release:\n" >> $RELEASE_NFO
> +    git log `git describe --tags --abbrev=0`..HEAD --format=short >> $RELEASE_NFO

Es schadet im Grunde nur wenig, denn das Generieren nimmt vermutlich
wenig Zeit in Anspruch und das Downloaden auf den Router hält sich
vermutlich auch in Grenzen. Trotzdem ist es irgendwie unnötig und
dupliziert die Informationen aus dem Git. Wenn ich wählen dürfte würde
ich darum bitten das hier weg zu lassen. Ich schlage daher vor das
Hinzufügen der Commits in einen separaten Patch auszulagern. Dann kann
das Thema für sich besprochen werden.

>  }
>  
>  clean() {
> diff --git a/community/aux.cfg b/community/aux.cfg
> index b1b921f..c1dd894 100644
> --- a/community/aux.cfg
> +++ b/community/aux.cfg
> @@ -1,3 +1,4 @@
> +COMMUNITY_NAME=aux
s.o.

>  BATMAN_CHANNEL=1
>  BATMAN_CHANNEL_5GHZ=36
>  ESSID_AP=aux.franken.freifunk.net
> diff --git a/community/franken.cfg b/community/franken.cfg
> index 833e98e..73f30c4 100644
> --- a/community/franken.cfg
> +++ b/community/franken.cfg
> @@ -1,3 +1,4 @@
> +COMMUNITY_NAME=franken
s.o.

>  BATMAN_CHANNEL=1
>  BATMAN_CHANNEL_5GHZ=36
>  ESSID_AP=franken.freifunk.net
> @@ -5,4 +6,4 @@ ESSID_MESH=batman.franken.freifunk.net
>  BSSID_MESH=02:CA:FF:EE:BA:BE
>  VPN_PROJECT=fff
>  NTPD_IP=fe80::ff:feee:1%br-mesh
> -UPGRADE_PATH=http://[fe80::ff:feee:1%br-mesh]/dev/firmware/current
> +UPGRADE_PATH=http://[fe80::ff:feee:1%br-mesh]/dev/firmware/franken/current
Joar, kann man machen, seh ich jetzt aber kein Vorteil drin. Wir
arbeiten ja (hoffentlich) drauf zu, dass wir langfristig kein extra
Image für Aux benötigen. (Siehe auch Kommentar oben)

Lieben Gruß
Tim

PS: Ich würde es begrüßen, wenn das "pingen" (in diesem Fall eher
drängeln) nicht bereits nach drei Tagen los gehen würde.

> -- 
> 1.8.3.2
> 

-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : signature.asc
Dateityp    : application/pgp-signature
Dateigröße  : 473 bytes
Beschreibung: This is a digitally signed message part
URL         : <http://lists.freifunk.net/pipermail/franken-dev-freifunk.net/attachments/20160205/a3c127cf/attachment-0002.sig>


Mehr Informationen über die Mailingliste franken-dev