From 13c45a60427d610001f8a17c45a327ed3d177557 Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Mon, 25 Apr 2016 10:29:24 -0700 Subject: [PATCH 01/17] bwm-ng: add package --- .../network-tools-depends/bwm-ng/package.mk | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 packages/addons/addon-depends/network-tools-depends/bwm-ng/package.mk diff --git a/packages/addons/addon-depends/network-tools-depends/bwm-ng/package.mk b/packages/addons/addon-depends/network-tools-depends/bwm-ng/package.mk new file mode 100644 index 0000000000..89f26254a8 --- /dev/null +++ b/packages/addons/addon-depends/network-tools-depends/bwm-ng/package.mk @@ -0,0 +1,47 @@ +################################################################################ +# This file is part of LibreELEC - http://www.libreelec.tv +# Copyright (C) 2016 Team LibreELEC +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +PKG_NAME="bwm-ng" +PKG_VERSION="0.6.1" +PKG_REV="0" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.gropp.org/?id=projects&sub=bwm-ng" +PKG_URL="http://www.gropp.org/bwm-ng/bwm-ng-$PKG_VERSION.tar.gz" +PKG_DEPENDS_TARGET="toolchain netbsd-curses libstatgrab" +PKG_PRIORITY="optional" +PKG_SECTION="network/analyzer" +PKG_SHORTDESC="bwm-ng: small and simple console-based live network and disk io bandwidth monitor" +PKG_LONGDESC="Bandwidth Monitor NG is a small and simple console-based live network and disk io bandwidth monitor for Linux, BSD, Solaris, Mac OS X and others." +PKG_AUTORECONF="yes" + +PKG_CONFIGURE_OPTS_TARGET="--with-libstatgrab \ + --with-time \ + --with-getifaddrs \ + --with-sysctl \ + --with-sysctldisk \ + --with-procnetdev \ + --with-partitions" + +pre_configure_target() { + export LIBS="-ltermcap" +} + +makeinstall_target() { + : # nop +} From f9eb76226d4119c0e28938ea2f17cae69ddc805a Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Mon, 25 Apr 2016 10:29:24 -0700 Subject: [PATCH 02/17] iftop: add package --- .../network-tools-depends/iftop/package.mk | 45 ++++++++++++ .../iftop/patches/iftop-boo.patch | 73 +++++++++++++++++++ 2 files changed, 118 insertions(+) create mode 100644 packages/addons/addon-depends/network-tools-depends/iftop/package.mk create mode 100644 packages/addons/addon-depends/network-tools-depends/iftop/patches/iftop-boo.patch diff --git a/packages/addons/addon-depends/network-tools-depends/iftop/package.mk b/packages/addons/addon-depends/network-tools-depends/iftop/package.mk new file mode 100644 index 0000000000..c41d16037d --- /dev/null +++ b/packages/addons/addon-depends/network-tools-depends/iftop/package.mk @@ -0,0 +1,45 @@ +################################################################################ +# This file is part of LibreELEC - http://www.libreelec.tv +# Copyright (C) 2016 Team LibreELEC +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +PKG_NAME="iftop" +PKG_VERSION="1.0pre4" +PKG_REV="0" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://htop.sourceforge.net/" +PKG_URL="http://www.ex-parrot.com/pdw/iftop/download/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS_TARGET="toolchain netbsd-curses libpcap libnl" +PKG_PRIORITY="optional" +PKG_SECTION="network/analyzer" +PKG_SHORTDESC="iftop: display bandwidth usage on an interface" +PKG_LONGDESC="iftop does for network usage what top(1) does for CPU usage. It listens to network traffic on a named interface and displays a table of current bandwidth usage by pairs of hosts. Handy for answering the question 'why is our ADSL link so slow?'." +PKG_AUTORECONF="yes" + +pre_build_target() { + mkdir -p $PKG_BUILD/.$TARGET_NAME + cp -RP $PKG_BUILD/* $PKG_BUILD/.$TARGET_NAME +} + +pre_configure_target() { + export CFLAGS="$CFLAGS -I$SYSROOT_PREFIX/usr/include/pcap" + export LIBS="-lpcap -lnl-3 -lnl-genl-3 -lncurses -ltermcap" +} + +makeinstall_target() { + : # nop +} diff --git a/packages/addons/addon-depends/network-tools-depends/iftop/patches/iftop-boo.patch b/packages/addons/addon-depends/network-tools-depends/iftop/patches/iftop-boo.patch new file mode 100644 index 0000000000..e3622aef54 --- /dev/null +++ b/packages/addons/addon-depends/network-tools-depends/iftop/patches/iftop-boo.patch @@ -0,0 +1,73 @@ +diff --git a/configure.ac b/configure.ac +index 671241e..b6fece6 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -294,42 +294,6 @@ if test x$libpcap_prefix = x ; then + libpcap_prefix="/usr /usr/local /opt /software" + fi + +-AC_MSG_CHECKING([where to find pcap.h]) +-foundpcaph=0 +-oldCPPFLAGS=$CPPFLAGS +-for test_prefix in "" $libpcap_prefix ; do +- for x in "" /pcap ; do +- if test x$test_prefix != x ; then +- CPPFLAGS="$oldCPPFLAGS -I$test_prefix/include$x" +- fi +- AC_TRY_CPP([ +-#include +- ], [ +- AC_MSG_RESULT([$test_prefix/include$x]) +- foundpcaph=1 +- break +- ]) +- done +- if test $foundpcaph = 1 ; then +- break +- fi +-done +- +-if test $foundpcaph = 0 ; then +- AC_MSG_RESULT([no idea]) +- AC_MSG_ERROR([can't find pcap.h +- You're not going to get very far without libpcap.]) +-else +- dnl assume that -lpcap is under $test_prefix/lib +- if test x$test_prefix != x ; then +- LDFLAGS="$LDFLAGS -L$test_prefix/lib" +- fi +- AC_CHECK_LIB(pcap, pcap_open_live, , [ +- AC_MSG_ERROR([can't find libpcap +- You're not going to get very far without libpcap.]) +- ]) +-fi +- + foundpcap=0 + AC_CHECK_HEADERS([pcap.h pcap/pcap.h], [ + foundpcap=1 +diff --git a/edline.c b/edline.c +index 75f1a5a..aed80cf 100644 +--- a/edline.c ++++ b/edline.c +@@ -7,7 +7,7 @@ + static const char rcsid[] = "$Id: edline.c,v 1.2 2002/11/04 12:27:35 chris Exp $"; + + #include +-#include ++#include + #include + + #include "iftop.h" +diff --git a/iftop.c b/iftop.c +index a090dcf..5851c86 100644 +--- a/iftop.c ++++ b/iftop.c +@@ -23,7 +23,7 @@ + #endif + + #include +-#include ++#include + #include + #include + #include From ac2dbe2014321fa741a32bff37ff3045c72f2baf Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Mon, 25 Apr 2016 10:29:24 -0700 Subject: [PATCH 03/17] iperf: add package --- .../network-tools-depends/iperf/package.mk | 37 +++++++++++++++++++ .../iperf-0001_fix-build-with-gcc5.patch | 27 ++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 packages/addons/addon-depends/network-tools-depends/iperf/package.mk create mode 100644 packages/addons/addon-depends/network-tools-depends/iperf/patches/iperf-0001_fix-build-with-gcc5.patch diff --git a/packages/addons/addon-depends/network-tools-depends/iperf/package.mk b/packages/addons/addon-depends/network-tools-depends/iperf/package.mk new file mode 100644 index 0000000000..bee0a21234 --- /dev/null +++ b/packages/addons/addon-depends/network-tools-depends/iperf/package.mk @@ -0,0 +1,37 @@ +################################################################################ +# This file is part of LibreELEC - http://www.libreelec.tv +# Copyright (C) 2016 Team LibreELEC +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +PKG_NAME="iperf" +PKG_VERSION="3.1.2" +PKG_REV="2" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="https://iperf.fr/" +PKG_URL="https://iperf.fr/download/source/$PKG_NAME-$PKG_VERSION-source.tar.gz" +PKG_DEPENDS_TARGET="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="network/testing" +PKG_SHORTDESC="iperf: A modern alternative for measuring maximum TCP and UDP bandwidth performance" +PKG_LONGDESC="Iperf was developed by NLANR/DAST as a modern alternative for measuring maximum TCP and UDP bandwidth performance. Iperf allows the tuning of various parameters and UDP characteristics. Iperf reports bandwidth, delay jitter, datagram loss." +PKG_AUTORECONF="yes" + +PKG_CONFIGURE_OPTS_TARGET="--enable-static --disable-shared" + +makeinstall_target() { + : # nop +} diff --git a/packages/addons/addon-depends/network-tools-depends/iperf/patches/iperf-0001_fix-build-with-gcc5.patch b/packages/addons/addon-depends/network-tools-depends/iperf/patches/iperf-0001_fix-build-with-gcc5.patch new file mode 100644 index 0000000000..85c7f78cc0 --- /dev/null +++ b/packages/addons/addon-depends/network-tools-depends/iperf/patches/iperf-0001_fix-build-with-gcc5.patch @@ -0,0 +1,27 @@ +diff -Naur a/Makefile.am b/Makefile.am +--- a/Makefile.am 2015-10-16 19:01:09.000000000 +0200 ++++ b/Makefile.am 2016-01-06 21:22:34.118008794 +0100 +@@ -1 +1,8 @@ ++README: README.md ++ fgrep -v "[Build Status]" $< \ ++ | markdown \ ++ | html2text -style pretty -nobs \ ++ | sed -e 's:>:>:g' \ ++ > $@.tmp ++ + SUBDIRS = src examples +diff -Naur a/src/Makefile.am b/src/Makefile.am +--- a/src/Makefile.am 2015-10-16 19:01:09.000000000 +0200 ++++ b/src/Makefile.am 2016-01-06 21:26:12.352336266 +0100 +@@ -49,9 +49,9 @@ + iperf3_profile_SOURCES = main.c \ + $(libiperf_la_SOURCES) + +-iperf3_profile_CFLAGS = -pg -g ++iperf3_profile_CFLAGS = -g + iperf3_profile_LDADD = libiperf.la +-iperf3_profile_LDFLAGS = -pg -g ++iperf3_profile_LDFLAGS = -g + + # Specify the sources and various flags for the test cases + t_timer_SOURCES = t_timer.c From e7476bae3339e35faf889b49ce327864e1733e6b Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Mon, 25 Apr 2016 10:29:24 -0700 Subject: [PATCH 04/17] irssi: add package --- .../network-tools-depends/irssi/package.mk | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 packages/addons/addon-depends/network-tools-depends/irssi/package.mk diff --git a/packages/addons/addon-depends/network-tools-depends/irssi/package.mk b/packages/addons/addon-depends/network-tools-depends/irssi/package.mk new file mode 100644 index 0000000000..3c5b1dfc24 --- /dev/null +++ b/packages/addons/addon-depends/network-tools-depends/irssi/package.mk @@ -0,0 +1,51 @@ +################################################################################ +# This file is part of LibreELEC - http://www.libreelec.tv +# Copyright (C) 2016 Team LibreELEC +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +PKG_NAME="irssi" +PKG_VERSION="0.8.19" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.irssi.org/" +PKG_URL="https://github.com/irssi-import/irssi/releases/download/$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS_TARGET="toolchain glib netbsd-curses libressl" +PKG_PRIORITY="optional" +PKG_SECTION="tools" +PKG_SHORTDESC="IRC client" +PKG_LONGDESC="Irssi is a terminal based IRC client for UNIX systems" +PKG_AUTORECONF="yes" + +PKG_CONFIGURE_OPTS_TARGET="--with-sysroot=$SYSROOT_PREFIX \ + --enable-ssl \ + --disable-glibtest \ + --without-socks \ + --with-textui \ + --without-bot \ + --without-proxy \ + --with-gc \ + --without-perl \ + --without-sco" + +pre_configure_target() { + export CFLAGS="$CFLAGS -I$ROOT/$PKG_BUILD" + export LIBS="-ltermcap" +} + +makeinstall_target() { + : # nop +} From b50a4f834d79e3d84294aeb2a1f7b5cdacd06715 Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Mon, 25 Apr 2016 10:29:24 -0700 Subject: [PATCH 05/17] iw: add package --- .../network-tools-depends/iw/package.mk | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 packages/addons/addon-depends/network-tools-depends/iw/package.mk diff --git a/packages/addons/addon-depends/network-tools-depends/iw/package.mk b/packages/addons/addon-depends/network-tools-depends/iw/package.mk new file mode 100644 index 0000000000..9b519194f5 --- /dev/null +++ b/packages/addons/addon-depends/network-tools-depends/iw/package.mk @@ -0,0 +1,41 @@ +################################################################################ +# This file is part of LibreELEC - http://www.libreelec.tv +# Copyright (C) 2016 Team LibreELEC +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +PKG_NAME="iw" +PKG_VERSION="4.3" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="PUBLIC_DOMAIN" +PKG_SITE="http://wireless.kernel.org/en/users/Documentation/iw" +PKG_URL="https://www.kernel.org/pub/software/network/$PKG_NAME/$PKG_NAME-$PKG_VERSION.tar.xz" +PKG_DEPENDS_TARGET="toolchain libnl" +PKG_PRIORITY="optional" +PKG_SECTION="tools" +PKG_SHORTDESC="iw is a new nl80211 based CLI configuration utility for wireless devices" +PKG_LONGDESC="iw is a new nl80211 based CLI configuration utility for wireless devices. It supports all new drivers that have been added to the kernel recently." + +pre_configure_target() { + # iw fails at runtime with lto enabled + strip_lto + + export LDFLAGS="$LDFLAGS -pthread" +} + +makeinstall_target() { + : # meh +} From e2c63c60ef97b436aaf26801910252f3d07830f6 Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Mon, 25 Apr 2016 10:29:24 -0700 Subject: [PATCH 06/17] lftp: add package --- .../network-tools-depends/lftp/package.mk | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 packages/addons/addon-depends/network-tools-depends/lftp/package.mk diff --git a/packages/addons/addon-depends/network-tools-depends/lftp/package.mk b/packages/addons/addon-depends/network-tools-depends/lftp/package.mk new file mode 100644 index 0000000000..6a97cd13cd --- /dev/null +++ b/packages/addons/addon-depends/network-tools-depends/lftp/package.mk @@ -0,0 +1,42 @@ +################################################################################ +# This file is part of LibreELEC - http://www.libreelec.tv +# Copyright (C) 2016 Team LibreELEC +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +PKG_NAME="lftp" +PKG_VERSION="4.6.5" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://lftp.yar.ru/" +PKG_URL="http://lftp.yar.ru/ftp/${PKG_NAME}-${PKG_VERSION}.tar.gz" +PKG_DEPENDS_TARGET="toolchain readline libressl zlib" +PKG_PRIORITY="optional" +PKG_SECTION="tools" +PKG_SHORTDESC="ftp client" +PKG_LONGDESC="LFTP is a sophisticated ftp/http client, and a file transfer program supporting a number of network protocols" +PKG_AUTORECONF="yes" + +PKG_CONFIGURE_OPTS_TARGET="--disable-nls --with-gnu-ld --without-gnutls --with-openssl" + +makeinstall_target() { + : # nop +} + +pre_configure_target() { + # fails to build with gcc 4.9 + lto + strip_lto +} From 30d43098a5cb140205804db3138c52c76a18a83a Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Mon, 25 Apr 2016 10:29:25 -0700 Subject: [PATCH 07/17] ncftp: add package --- .../network-tools-depends/ncftp/package.mk | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 packages/addons/addon-depends/network-tools-depends/ncftp/package.mk diff --git a/packages/addons/addon-depends/network-tools-depends/ncftp/package.mk b/packages/addons/addon-depends/network-tools-depends/ncftp/package.mk new file mode 100644 index 0000000000..e6ab8f6286 --- /dev/null +++ b/packages/addons/addon-depends/network-tools-depends/ncftp/package.mk @@ -0,0 +1,50 @@ +################################################################################ +# This file is part of LibreELEC - http://www.libreelec.tv +# Copyright (C) 2016 Team LibreELEC +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +PKG_NAME="ncftp" +PKG_VERSION="3.2.5" +PKG_REV="0" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.ncftp.com/ncftp/" +PKG_URL="ftp://ftp.ncftp.com/ncftp/ncftp-${PKG_VERSION}-src.tar.bz2" +PKG_DEPENDS_TARGET="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="tools" +PKG_SHORTDESC="NcFTP Client (also known as just NcFTP) is a set of FREE application programs implementing the File Transfer Protocol (FTP)." +PKG_LONGDESC="NcFTP Client (also known as just NcFTP) is a set of FREE application programs implementing the File Transfer Protocol (FTP)." +PKG_AUTORECONF="no" + +PKG_CONFIGURE_OPTS_TARGET="ac_cv_header_librtmp_rtmp_h=yes \ + --enable-readline \ + --disable-universal \ + --disable-ccdv \ + --without-curses" + +pre_configure_target() { + export CFLAGS="$CFLAGS -I../" +} + +pre_build_target() { + mkdir -p $PKG_BUILD/.$TARGET_NAME + cp -RP $PKG_BUILD/* $PKG_BUILD/.$TARGET_NAME +} + +makeinstall_target() { + : # nop +} From 13b41fc50f3a58423c73d23c78173cda94d7bc91 Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Mon, 25 Apr 2016 10:29:25 -0700 Subject: [PATCH 08/17] ngrep: add package --- .../network-tools-depends/ngrep/package.mk | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 packages/addons/addon-depends/network-tools-depends/ngrep/package.mk diff --git a/packages/addons/addon-depends/network-tools-depends/ngrep/package.mk b/packages/addons/addon-depends/network-tools-depends/ngrep/package.mk new file mode 100644 index 0000000000..6709983ad7 --- /dev/null +++ b/packages/addons/addon-depends/network-tools-depends/ngrep/package.mk @@ -0,0 +1,43 @@ +################################################################################ +# This file is part of LibreELEC - http://www.libreelec.tv +# Copyright (C) 2016 Team LibreELEC +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +PKG_NAME="ngrep" +PKG_VERSION="1.45" +PKG_REV="0" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://ngrep.sourceforge.net/" +PKG_URL="http://prdownloads.sourceforge.net/ngrep/ngrep-${PKG_VERSION}.tar.bz2" +PKG_DEPENDS_TARGET="toolchain libpcap" +PKG_PRIORITY="optional" +PKG_SECTION="network/analyzer" +PKG_SHORTDESC="ngrep - network grep" +PKG_LONGDESC="ngrep - network grep" +PKG_DISCLAIMER="this is an unofficial addon. please don't ask for support in openelec forum / irc channel" +PKG_AUTORECONF="yes" + +PKG_CONFIGURE_OPTS_TARGET="--with-pcap-includes=$SYSROOT_PREFIX/usr/include --disable-dropprivs" + +pre_build_target() { + mkdir -p $PKG_BUILD/.$TARGET_NAME + cp -RP $PKG_BUILD/* $PKG_BUILD/.$TARGET_NAME +} + +makeinstall_target() { + : # nop +} From 7ed138268a38e2b9464824d161512157f8ced321 Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Mon, 25 Apr 2016 10:29:25 -0700 Subject: [PATCH 09/17] nmap: add package --- .../network-tools-depends/nmap/package.mk | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 packages/addons/addon-depends/network-tools-depends/nmap/package.mk diff --git a/packages/addons/addon-depends/network-tools-depends/nmap/package.mk b/packages/addons/addon-depends/network-tools-depends/nmap/package.mk new file mode 100644 index 0000000000..f9dc4a8228 --- /dev/null +++ b/packages/addons/addon-depends/network-tools-depends/nmap/package.mk @@ -0,0 +1,51 @@ +################################################################################ +# This file is part of LibreELEC - http://www.libreelec.tv +# Copyright (C) 2016 Team LibreELEC +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +PKG_NAME="nmap" +PKG_VERSION="7.11" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://nmap.org/" +PKG_URL="http://nmap.org/dist/${PKG_NAME}-${PKG_VERSION}.tgz" +PKG_DEPENDS_TARGET="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="tools" +PKG_SHORTDESC="network tool" +PKG_LONGDESC="Free Security Scanned for Network" +PKG_AUTORECONF="no" + +PKG_CONFIGURE_OPTS_TARGET="--enable-static \ + --with-pcap=linux \ + --with-libpcap=included \ + --with-libpcre=included \ + --with-libdnet=included \ + --with-liblua=included \ + --with-liblinear=included" + +pre_configure_target() { +# nmap fails to build in subdirs + cd $ROOT/$PKG_BUILD + rm -rf .$TARGET_NAME + + export CPPFLAGS="$CPPFLAGS -Iliblua" +} + +makeinstall_target() { + : # nop +} From ef4217434b024ac6ade10d47675523d50ca21e9a Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Mon, 25 Apr 2016 10:29:25 -0700 Subject: [PATCH 10/17] rsync: add package --- .../network-tools-depends/rsync/package.mk | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 packages/addons/addon-depends/network-tools-depends/rsync/package.mk diff --git a/packages/addons/addon-depends/network-tools-depends/rsync/package.mk b/packages/addons/addon-depends/network-tools-depends/rsync/package.mk new file mode 100644 index 0000000000..1cb76a1a7d --- /dev/null +++ b/packages/addons/addon-depends/network-tools-depends/rsync/package.mk @@ -0,0 +1,39 @@ +################################################################################ +# This file is part of LibreELEC - http://www.libreelec.tv +# Copyright (C) 2016 Team LibreELEC +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +PKG_NAME="rsync" +PKG_VERSION="3.1.2" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.samba.org/ftp/rsync/rsync.html" +PKG_URL="https://download.samba.org/pub/rsync/src/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS_TARGET="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="network/backup" +PKG_SHORTDESC="rsync: A replacement for rcp that has many more features" +PKG_LONGDESC="Rsync uses an own 'rsync' algorithm which provides a very fast method for bringing remote files into sync. It does this by sending just the differences in the files across the link, without requiring that both sets of files are present at one of the ends of the link beforehand. At first glance this may seem impossible because the calculation of diffs between two files normally requires local access to both files." +PKG_AUTORECONF="no" + +PKG_CONFIGURE_OPTS_TARGET="--disable-acl-support \ + --disable-xattr-support \ + --with-included-popt" + +makeinstall_target() { + : # nop +} From 274d1b3dc449c597ea9e4aa9d6ce0b2bf26e2de0 Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Mon, 25 Apr 2016 10:29:25 -0700 Subject: [PATCH 11/17] sshfs: add package --- .../network-tools-depends/sshfs/package.mk | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 packages/addons/addon-depends/network-tools-depends/sshfs/package.mk diff --git a/packages/addons/addon-depends/network-tools-depends/sshfs/package.mk b/packages/addons/addon-depends/network-tools-depends/sshfs/package.mk new file mode 100644 index 0000000000..f7765b23aa --- /dev/null +++ b/packages/addons/addon-depends/network-tools-depends/sshfs/package.mk @@ -0,0 +1,35 @@ +################################################################################ +# This file is part of LibreELEC - http://www.libreelec.tv +# Copyright (C) 2016 Team LibreELEC +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +PKG_NAME="sshfs" +PKG_VERSION="2.7" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="https://github.com/libfuse/sshfs" +PKG_URL="https://github.com/libfuse/sshfs/releases/download/sshfs-$PKG_VERSION/sshfs-$PKG_VERSION.tar.gz" +PKG_DEPENDS_TARGET="toolchain fuse glib" +PKG_PRIORITY="optional" +PKG_SECTION="tools" +PKG_SHORTDESC="sshfs: a filesystem client based on the SSH File Transfer Protocol" +PKG_LONGDESC="This is a filesystem client based on the SSH File Transfer Protocol. Since most SSH servers already support this protocol it is very easy to set up: i.e. on the server side there's nothing to do. On the client side mounting the filesystem is as easy as logging into the server with ssh." +PKG_AUTORECONF="no" + +makeinstall_target() { + : # nop +} From 09dfe6ee98e154498e97a2f37f75c6090de5bc7a Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Mon, 25 Apr 2016 10:29:25 -0700 Subject: [PATCH 12/17] tcpdump: add package --- .../network-tools-depends/tcpdump/package.mk | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 packages/addons/addon-depends/network-tools-depends/tcpdump/package.mk diff --git a/packages/addons/addon-depends/network-tools-depends/tcpdump/package.mk b/packages/addons/addon-depends/network-tools-depends/tcpdump/package.mk new file mode 100644 index 0000000000..213ef97913 --- /dev/null +++ b/packages/addons/addon-depends/network-tools-depends/tcpdump/package.mk @@ -0,0 +1,47 @@ +################################################################################ +# This file is part of LibreELEC - http://www.libreelec.tv +# Copyright (C) 2016 Team LibreELEC +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +PKG_NAME="tcpdump" +PKG_VERSION="4.7.4" +PKG_REV="1" +PKG_ARCH="any" +PKG_SITE="http://www.tcpdump.org/" +PKG_URL="http://www.tcpdump.org/release/tcpdump-${PKG_VERSION}.tar.gz" +PKG_DEPENDS_TARGET="toolchain libpcap" +PKG_PRIORITY=optional +PKG_SECTION="network/analyzer" +PKG_SHORTDESC="powerful tool for network monitoring and data acquisition" +PKG_LONGDESC="This program allows you to dump the traffic on a network. tcpdump is able to examine IPv4, ICMPv4, IPv6, ICMPv6, UDP, TCP, SNMP, AFS BGP, RIP, PIM, DVMRP, IGMP, SMB, OSPF, NFS and many other packet types." +PKG_AUTORECONF="yes" + +PKG_CONFIGURE_OPTS_TARGET="--with-pcap=linux --with-crypto=no --disable-ipv6" + +pre_configure_target() { + # When cross-compiling, configure can't set linux version + # forcing it + sed -i -e 's/ac_cv_linux_vers=unknown/ac_cv_linux_vers=2/' ../configure +} + +pre_build_target() { + # discard native system includes + sed -i "s%-I/usr/include%%g" Makefile +} + +makeinstall_target() { + : # nop +} From b850600bb27246fe4c88b900b66dce1c34708f80 Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Mon, 25 Apr 2016 10:29:25 -0700 Subject: [PATCH 13/17] udpxy: add package --- .../network-tools-depends/udpxy/package.mk | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 packages/addons/addon-depends/network-tools-depends/udpxy/package.mk diff --git a/packages/addons/addon-depends/network-tools-depends/udpxy/package.mk b/packages/addons/addon-depends/network-tools-depends/udpxy/package.mk new file mode 100644 index 0000000000..4d839984e8 --- /dev/null +++ b/packages/addons/addon-depends/network-tools-depends/udpxy/package.mk @@ -0,0 +1,41 @@ +################################################################################ +# This file is part of LibreELEC - http://www.libreelec.tv +# Copyright (C) 2016 Team LibreELEC +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +PKG_NAME="udpxy" +PKG_VERSION="1.0.23-0" +PKG_REV="0" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.udpxy.com/download-en.html" +PKG_URL="$SOURCEFORGE_SRC/project/udpxy/udpxy/Chipmunk-1.0/${PKG_NAME}.${PKG_VERSION}-prod.tar.gz" +PKG_DEPENDS_TARGET="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="tools" +PKG_SHORTDESC="udpxy is a UDP-to-HTTP multicast traffic relay daemon" +PKG_LONGDESC="udpxy is a UDP-to-HTTP multicast traffic relay daemon" +PKG_DISCLAIMER="this is an unofficial addon. please don't ask for support in openelec forum / irc channel" +PKG_AUTORECONF="no" + +pre_configure_target() { + # fails to build with gcc 4.9 + lto + strip_lto +} + +makeinstall_target() { + : # nop +} From e5ecb465c5ea4c92ec407a156fac0f098b1752fc Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Mon, 25 Apr 2016 10:29:25 -0700 Subject: [PATCH 14/17] wireless_tools: add package --- .../wireless_tools/package.mk | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 packages/addons/addon-depends/network-tools-depends/wireless_tools/package.mk diff --git a/packages/addons/addon-depends/network-tools-depends/wireless_tools/package.mk b/packages/addons/addon-depends/network-tools-depends/wireless_tools/package.mk new file mode 100644 index 0000000000..a2622bfda2 --- /dev/null +++ b/packages/addons/addon-depends/network-tools-depends/wireless_tools/package.mk @@ -0,0 +1,46 @@ +################################################################################ +# This file is part of LibreELEC - http://www.libreelec.tv +# Copyright (C) 2016 Team LibreELEC +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +PKG_NAME="wireless_tools" +PKG_VERSION="29" +PKG_REV="0" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html" +PKG_URL="http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/$PKG_NAME.$PKG_VERSION.tar.gz" +PKG_SOURCE_DIR="${PKG_NAME}.${PKG_VERSION}" +PKG_DEPENDS_TARGET="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="debug/tools" +PKG_SHORTDESC="wireless-tools: tools allowing to manipulate the Wireless Extensions" +PKG_LONGDESC="The Wireless Tools (WT) is a set of tools allowing to manipulate the Wireless Extensions. They use a textual interface and are rather crude, but aim to support the full Wireless Extension. There are many other tools you can use with Wireless Extensions, however Wireless Tools is the reference implementation." +PKG_AUTORECONF="no" + +pre_configure_Target() { + # wireless_tools fails to build on some systems with LTO enabled + strip_lto +} + +make_target() { + make PREFIX=/usr CC="$CC" AR="$AR" \ + CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" iwmulticall +} + +makeinstall_target() { + : # nop +} From 4fbfd0a87033cf9838f17baf9f257df16f308d91 Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Mon, 25 Apr 2016 10:29:25 -0700 Subject: [PATCH 15/17] libpcap: add package --- .../depends/libpcap/package.mk | 51 +++++++++++++++++++ .../patches/libpcap-crosscompiling.patch | 12 +++++ 2 files changed, 63 insertions(+) create mode 100644 packages/addons/addon-depends/network-tools-depends/depends/libpcap/package.mk create mode 100644 packages/addons/addon-depends/network-tools-depends/depends/libpcap/patches/libpcap-crosscompiling.patch diff --git a/packages/addons/addon-depends/network-tools-depends/depends/libpcap/package.mk b/packages/addons/addon-depends/network-tools-depends/depends/libpcap/package.mk new file mode 100644 index 0000000000..a7f38b3dc4 --- /dev/null +++ b/packages/addons/addon-depends/network-tools-depends/depends/libpcap/package.mk @@ -0,0 +1,51 @@ +################################################################################ +# This file is part of LibreELEC - http://www.libreelec.tv +# Copyright (C) 2016 Team LibreELEC +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +PKG_NAME="libpcap" +PKG_VERSION="1.7.4" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.tcpdump.org/" +PKG_URL="http://www.tcpdump.org/release/libpcap-${PKG_VERSION}.tar.gz" +PKG_DEPENDS_TARGET="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="devel" +PKG_SHORTDESC="system interface for user-level packet capture" +PKG_LONGDESC="libpcap (Packet CAPture) provides a portable framework for low-level network monitoring. Applications include network statistics collection, security monitoring, network debugging, etc." +PKG_AUTORECONF="yes" + +PKG_CONFIGURE_OPTS_TARGET="LIBS=-lpthread \ + ac_cv_header_libusb_1_0_libusb_h=no \ + --disable-shared \ + --with-pcap=linux \ + --disable-bluetooth \ + --disable-can \ + --without-libnl \ + --disable-dbus \ + --disable-canusb" + +pre_configure_target() { +# When cross-compiling, configure can't set linux version +# forcing it + sed -i -e 's/ac_cv_linux_vers=unknown/ac_cv_linux_vers=2/' ../configure +} + +post_makeinstall_target() { + rm -rf $INSTALL/usr/bin +} diff --git a/packages/addons/addon-depends/network-tools-depends/depends/libpcap/patches/libpcap-crosscompiling.patch b/packages/addons/addon-depends/network-tools-depends/depends/libpcap/patches/libpcap-crosscompiling.patch new file mode 100644 index 0000000000..2ad1214c45 --- /dev/null +++ b/packages/addons/addon-depends/network-tools-depends/depends/libpcap/patches/libpcap-crosscompiling.patch @@ -0,0 +1,12 @@ +diff -Naur libpcap-1.7.4/configure.in libpcap-1.7.4.patch/configure.in +--- libpcap-1.7.4/configure.in 2015-04-22 22:19:15.000000000 +0200 ++++ libpcap-1.7.4.patch/configure.in 2016-03-26 10:36:25.193757606 +0100 +@@ -456,7 +456,7 @@ + if test x$with_libnl != xno ; then + have_any_nl="no" + +- incdir=-I/usr/include/libnl3 ++# incdir=-I/usr/include/libnl3 + libnldir= + if test x$withval != x ; then + libnldir=-L${withval}/lib/.libs From e2dd9ca73714b0c853e19c178dc1baccb641530a Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Mon, 25 Apr 2016 10:29:25 -0700 Subject: [PATCH 16/17] libstatgrab: add package --- .../depends/libstatgrab/package.mk | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 packages/addons/addon-depends/network-tools-depends/depends/libstatgrab/package.mk diff --git a/packages/addons/addon-depends/network-tools-depends/depends/libstatgrab/package.mk b/packages/addons/addon-depends/network-tools-depends/depends/libstatgrab/package.mk new file mode 100644 index 0000000000..e54ef83ced --- /dev/null +++ b/packages/addons/addon-depends/network-tools-depends/depends/libstatgrab/package.mk @@ -0,0 +1,38 @@ +################################################################################ +# This file is part of LibreELEC - http://www.libreelec.tv +# Copyright (C) 2016 Team LibreELEC +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +PKG_NAME="libstatgrab" +PKG_VERSION="0.91" +PKG_REV="1" +PKG_SITE="http://www.i-scream.org/libstatgrab/" +PKG_URL="http://ftp.i-scream.org/pub/i-scream/libstatgrab/libstatgrab-$PKG_VERSION.tar.gz" +PKG_DEPENDS_TARGET="toolchain" +PKG_PRIORITY=optional +PKG_SECTION=libs +PKG_SHORTDESC="provides cross platform access to statistics about the system on which it's run" +PKG_LONGDESC="libstatgrab is a library that provides cross platform access to statistics about the system on which it's run. It's written in C and presents a selection of useful interfaces which can be used to access key system statistics. The current list of statistics includes CPU usage, memory utilisation, disk usage, process counts, network traffic, disk I/O, and more." +PKG_AUTORECONF="yes" + +PKG_CONFIGURE_OPTS_TARGET="ac_cv_func_malloc_0_nonnull=yes \ + --enable-static \ + --disable-shared \ + --disable-saidar \ + --disable-examples \ + --disable-manpages \ + --disable-setuid-binaries \ + --disable-setgid-binaries" From 047ae49413d8b52a26718c6abdcf75d14e427271 Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Mon, 25 Apr 2016 10:29:25 -0700 Subject: [PATCH 17/17] network-tools: initial add-on --- .../addons/tools/network-tools/changelog.txt | 2 + .../addons/tools/network-tools/icon/icon.png | Bin 0 -> 41817 bytes .../addons/tools/network-tools/package.mk | 111 ++++++++++++++++++ .../tools/network-tools/source/default.py | 22 ++++ 4 files changed, 135 insertions(+) create mode 100644 packages/addons/tools/network-tools/changelog.txt create mode 100644 packages/addons/tools/network-tools/icon/icon.png create mode 100644 packages/addons/tools/network-tools/package.mk create mode 100644 packages/addons/tools/network-tools/source/default.py diff --git a/packages/addons/tools/network-tools/changelog.txt b/packages/addons/tools/network-tools/changelog.txt new file mode 100644 index 0000000000..f6abfd1747 --- /dev/null +++ b/packages/addons/tools/network-tools/changelog.txt @@ -0,0 +1,2 @@ +8.0.100 +- Initial Release diff --git a/packages/addons/tools/network-tools/icon/icon.png b/packages/addons/tools/network-tools/icon/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5de6f7bf7745364bbc4f1cde187cf34dd7549051 GIT binary patch literal 41817 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. +################################################################################ + +PKG_NAME="network-tools" +PKG_VERSION="" +PKG_REV="100" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="" +PKG_URL="" +PKG_DEPENDS_TARGET="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="virtual" +PKG_SHORTDESC="A bundle of network tools and programs" +PKG_LONGDESC="A bundle of network tools and programs" + +PKG_IS_ADDON="yes" +PKG_ADDON_NAME="Network Tools" +PKG_ADDON_TYPE="xbmc.python.script" +PKG_ADDON_PROVIDES="" +PKG_ADDON_REPOVERSION="8.0" + +PKG_AUTORECONF="no" + +PKG_DEPENDS_TARGET="toolchain \ + bwm-ng \ + iftop \ + iperf \ + irssi \ + iw \ + lftp \ + ncftp \ + ngrep \ + nmap \ + rsync \ + sshfs \ + tcpdump \ + udpxy \ + wireless_tools" + +addon() { + mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/bin/ + # bwm-ng + cp -P $(get_build_dir bwm-ng)/.$TARGET_NAME/src/bwm-ng $ADDON_BUILD/$PKG_ADDON_ID/bin + + # iftop + cp -P $(get_build_dir iftop)/.$TARGET_NAME/iftop $ADDON_BUILD/$PKG_ADDON_ID/bin + + # iperf + cp -P $(get_build_dir iperf)/.$TARGET_NAME/src/iperf3 $ADDON_BUILD/$PKG_ADDON_ID/bin + ln -s iperf3 $ADDON_BUILD/$PKG_ADDON_ID/bin/iperf + + # irssi + cp -P $(get_build_dir irssi)/.$TARGET_NAME/src/fe-text/irssi $ADDON_BUILD/$PKG_ADDON_ID/bin + + # iw + cp -P $(get_build_dir iw)/iw $ADDON_BUILD/$PKG_ADDON_ID/bin + + # lftp + cp -P $(get_build_dir lftp)/.$TARGET_NAME/src/lftp $ADDON_BUILD/$PKG_ADDON_ID/bin + + # ncftp + cp -P $(get_build_dir ncftp)/.$TARGET_NAME/bin/ncftp $ADDON_BUILD/$PKG_ADDON_ID/bin + cp -P $(get_build_dir ncftp)/.$TARGET_NAME/bin/ncftpbatch $ADDON_BUILD/$PKG_ADDON_ID/bin + cp -P $(get_build_dir ncftp)/.$TARGET_NAME/bin/ncftpget $ADDON_BUILD/$PKG_ADDON_ID/bin + cp -P $(get_build_dir ncftp)/.$TARGET_NAME/bin/ncftpls $ADDON_BUILD/$PKG_ADDON_ID/bin + cp -P $(get_build_dir ncftp)/.$TARGET_NAME/bin/ncftpput $ADDON_BUILD/$PKG_ADDON_ID/bin + + # ngrep + cp -P $(get_build_dir ngrep)/.$TARGET_NAME/ngrep $ADDON_BUILD/$PKG_ADDON_ID/bin + + # nmap + cp -P $(get_build_dir nmap)/nmap $ADDON_BUILD/$PKG_ADDON_ID/bin + + # rsync + cp -P $(get_build_dir rsync)/.$TARGET_NAME/rsync $ADDON_BUILD/$PKG_ADDON_ID/bin + + # sshfs + cp -P $(get_build_dir sshfs)/.$TARGET_NAME/sshfs $ADDON_BUILD/$PKG_ADDON_ID/bin + + # tcpdump + cp -P $(get_build_dir tcpdump)/.$TARGET_NAME/tcpdump $ADDON_BUILD/$PKG_ADDON_ID/bin + + # udpxy + cp -P $(get_build_dir udpxy)/udpxy $ADDON_BUILD/$PKG_ADDON_ID/bin/ + + # wireless_tools + cp -P $(get_build_dir wireless_tools)/iwmulticall $ADDON_BUILD/$PKG_ADDON_ID/bin + ln -s iwmulticall $ADDON_BUILD/$PKG_ADDON_ID/bin/iwconfig + ln -s iwmulticall $ADDON_BUILD/$PKG_ADDON_ID/bin/iwgetid + ln -s iwmulticall $ADDON_BUILD/$PKG_ADDON_ID/bin/iwlist + ln -s iwmulticall $ADDON_BUILD/$PKG_ADDON_ID/bin/iwspy + ln -s iwmulticall $ADDON_BUILD/$PKG_ADDON_ID/bin/iwpriv + + debug_strip $ADDON_BUILD/$PKG_ADDON_ID/bin +} diff --git a/packages/addons/tools/network-tools/source/default.py b/packages/addons/tools/network-tools/source/default.py new file mode 100644 index 0000000000..67e12970fe --- /dev/null +++ b/packages/addons/tools/network-tools/source/default.py @@ -0,0 +1,22 @@ +################################################################################ +# This file is part of LibreELEC - http://www.libreelec.tv +# Copyright (C) 2016 Team LibreELEC +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +import xbmcgui + +dialog = xbmcgui.Dialog() +dialog.ok('', 'This is a console-only addon')