====== Firmware ======
Die von der Community Pinneberg verwendete Firmware ist [[Gluon]].
Siehe:
* https://wiki.freifunk.net/Freifunk_Firmware_Gluon
* Quelltext: https://github.com/freifunk-gluon/gluon
* Dokumentation: https://gluon.readthedocs.io
Es gibt verschiedene Zweige:
* stable - Das sollte normalerweise installiert werden
* beta - die nächste, kommende Version z.B. 2017.1
* experimental - hier werden neue Versionen und Features ausprobiert
===== Pinneberger Versionen =====
* 0.7.0 - erste Version die Community basierend auf Gluon 2015.1.1
* 0.7.1 - Version ab 28.11.2015 bastierend auf Gluon 2015.1.2
* 0.9 - basierend auf Gluon 2016.2.6
* 0.9.1 - basierend auf Gluon 2016.2.7
* anschließend dann Umstieg auf 802.11s
===== Firmware erstellen =====
Voraussetzungen
apt-get install build-essential git subversion python gawk unzip file libssl-dev zlib1g-dev libncurses5-dev
git clone https://github.com/freifunk-gluon/gluon.git
cd gluon
git clone git://github.com/thooge/ffpi-site.git site
cd site
git checkout [master|beta|experimental]
cd ..
git checkout v2015.1.2
make update
make -j10 GLUON_TARGET=ar71xx-generic GLUON_BRANCH=[stable|beta|experimental]
# Falls die Versin < 2017 ist, muß die Datei modules angepaßt werden:
# Das Reporitory muß von openwrt auf chaos_calmer umgestellt werden
make update
make manifest GLUON_BRANCH=[stable|beta|experimental]
Weitere Targets
* ''mpc85xx-generic'' - TLWDR4900
* ''ar71xx-nand'' - WNDR4300
* ''x86-generic''
* ''x86-64''
* ''x86-kvm_guest''
==== Erstellen wiederholen ====
cd gluon
git pull
make clean GLUON_TARGET=ar71xx-generic GLUON_BRANCH=[stable|beta|experimental]
make update
make -j10 GLUON_TARGET=ar71xx-generic GLUON_BRANCH=[stable|beta|experimental]
Alles löschen: ''make dirclean''
==== Fehlerbehebung ====
Falls der Build mit einer Fehlermeldung abbricht, kann das Kommando um ''V=s''
ergänzt werden. Damit wird eine ausführliche Protokollierung eingeschaltet.
Fehler aufgrund Änderungen in glibc
Fehler bei m4:
cd ./openwrt-ramips/build_dir/host/m4-1.4.17
sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' lib/*.c
echo "#define _IO_IN_BACKUP 0x100" >> lib/stdio-impl.h
Subject: Workaround change in glibc
Temporary workaround to compile with glibc 2.28, which
deprecated some constants
Based on the workaround made for the tools/m4 package
--- a/lib/stdio-impl.h
+++ b/lib/stdio-impl.h
@@ -18,6 +18,12 @@
the same implementation of stdio extension API, except that some fields
have different naming conventions, or their access requires some casts. */
+/* Glibc 2.28 made _IO_IN_BACKUP private. For now, work around this
+ problem by defining it ourselves. FIXME: Do not rely on glibc
+ internals. */
+#if !defined _IO_IN_BACKUP && defined _IO_EOF_SEEN
+# define _IO_IN_BACKUP 0x100
+#endif
/* BSD stdio derived implementations. */
--- a/lib/fseterr.c
+++ b/lib/fseterr.c
@@ -29,7 +29,7 @@
/* Most systems provide FILE as a struct and the necessary bitmask in
, because they need it for implementing getc() and putc() as
fast macros. */
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
fp->_flags |= _IO_ERR_SEEN;
#elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin */
fp_->_flags |= __SERR;
Fixes the following build error with GCC 10:
/usr/bin/ld: read_fs.o:(.bss+0x0): multiple definition of `swap'; mksquashfs.o:(.bss+0x1b2a88): first defined here
And a compile warning.
--- a/squashfs-tools/read_fs.c
+++ b/squashfs-tools/read_fs.c
@@ -61,7 +61,7 @@ extern int add_file(long long, long long
fprintf(stderr, s, ## args); \
} while(0)
-int swap;
+static int swap;
int read_block(int fd, long long start, long long *next, unsigned char *block, squashfs_super_block *sBlk)
{
--- a/squashfs-tools/mksquashfs.c
+++ b/squashfs-tools/mksquashfs.c
@@ -258,6 +258,7 @@ int read_sort_file(char *filename, int s
void sort_files_and_write(struct dir_info *dir);
struct file_info *duplicate(char *(get_next_file_block)(struct duplicate_buffer_handle *, unsigned int), struct duplicate_buffer_handle *file_start, long long bytes, unsigned int **block_list, long long *start, int blocks, struct fragment **fragment, char *frag_data, int frag_bytes);
struct dir_info *dir_scan1(char *, int (_readdir)(char *, char *, struct dir_info *));
+int dir_scan2(squashfs_inode *inode, struct dir_info *dir_info);
#define MKINODE(A) ((squashfs_inode)(((squashfs_inode) inode_bytes << 16) + (((char *)A) - data_cache)))
Meistens fehlt:
#include
Mögliche betroffene Dateien:
* ''make-ext4fs''
* ''contents.c''
* ''e2fsprogs-1.43.3''
* ''lib/ext2fs/ext2fs.h''
* ''e2fsck/e2fsck.h''
* ''lib/blkid/blkid.h''
* ''mtd-utils-1.5.1''
* ''mkfs.jffs2.c''
* ''ubiutils/libubi.c''
* ''mkfs.ubifs/mkfs.ubifs.h''
* ''squashfs''
* ''mksquashfs.c''
* ''unsquashfs.c''
* ''findutils'', fix wie bei bison
* ''freadahead.c''
* ''fseeko.c''
siehe auch: https://forum.openwrt.org/t/solved-error-undefined-reference-to-major/108258
===== Firmware signieren =====
Benötigte Bibliotheken:
* ''[[libuecc]]''
* ''[[ecdsautils]]''
make manifest GLUON_BRANCH=[stable|beta|experimental]
contrib/sign.sh output/images/sysupgrade/[stable|beta|experimental].manifest