====== 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