mirror of https://github.com/OpenIPC/firmware.git
Update work
parent
50b3e6bd0e
commit
eed64bf686
|
@ -4,5 +4,6 @@ source "$BR2_EXTERNAL_HISILICON_PATH/package/hisi_gpio_scanner/Config.in"
|
|||
source "$BR2_EXTERNAL_HISILICON_PATH/package/hisilicon-osdrv4/Config.in"
|
||||
source "$BR2_EXTERNAL_HISILICON_PATH/package/fwprintenv-ng/Config.in"
|
||||
source "$BR2_EXTERNAL_HISILICON_PATH/package/ipctool/Config.in"
|
||||
source "$BR2_EXTERNAL_HISILICON_PATH/package/majestic/Config.in"
|
||||
source "$BR2_EXTERNAL_HISILICON_PATH/package/libevent-mini/Config.in"
|
||||
source "$BR2_EXTERNAL_HISILICON_PATH/package/majestic/Config.in"
|
||||
source "$BR2_EXTERNAL_HISILICON_PATH/package/node-exporter/Config.in"
|
||||
|
|
|
@ -0,0 +1,80 @@
|
|||
# Architecture
|
||||
BR2_arm=y
|
||||
BR2_cortex_a7=y
|
||||
BR2_ARM_EABI=y
|
||||
BR2_ARM_FPU_NEON_VFPV4=y
|
||||
BR2_ARM_INSTRUCTIONS_THUMB2=y
|
||||
BR2_KERNEL_HEADERS_VERSION=y
|
||||
BR2_DEFAULT_KERNEL_VERSION="4.9.37"
|
||||
BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_9=y
|
||||
|
||||
# Toolchain
|
||||
BR2_GCC_VERSION_7_X=y
|
||||
# BR2_TOOLCHAIN_USES_UCLIBC is not set
|
||||
# BR2_TOOLCHAIN_BUILDROOT_UCLIBC is not set
|
||||
# BR2_TOOLCHAIN_BUILDROOT_LIBC="uclibc"
|
||||
BR2_TOOLCHAIN_USES_MUSL=y
|
||||
BR2_TOOLCHAIN_BUILDROOT_MUSL=y
|
||||
BR2_TOOLCHAIN_BUILDROOT_LIBC="musl"
|
||||
BR2_TOOLCHAIN_BUILDROOT_LOCALE=y
|
||||
BR2_TOOLCHAIN_BUILDROOT_USE_SSP=y
|
||||
|
||||
# Kernel
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.9.37"
|
||||
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_HISILICON_PATH)/board/hi3516ev200/kernel/hi3516ev200.generic.config"
|
||||
BR2_LINUX_KERNEL_UIMAGE=y
|
||||
BR2_LINUX_KERNEL_XZ=y
|
||||
BR2_LINUX_KERNEL_EXT_HISI_PATCHER=y
|
||||
BR2_LINUX_KERNEL_EXT_HISI_PATCHER_LIST="$(BR2_EXTERNAL_HISILICON_PATH)/board/hi3516ev200/kernel/patches/ $(BR2_EXTERNAL_HISILICON_PATH)/board/hi3516ev200/kernel/overlay"
|
||||
|
||||
# Filesystem
|
||||
# BR2_TARGET_TZ_INFO is not set
|
||||
BR2_TARGET_ROOTFS_SQUASHFS=y
|
||||
BR2_TARGET_ROOTFS_SQUASHFS4_XZ=y
|
||||
BR2_ROOTFS_OVERLAY="$(TOPDIR)/../general/overlay"
|
||||
|
||||
# OpenIPC configuration
|
||||
BR2_TOOLCHAIN_BUILDROOT_VENDOR="openipc"
|
||||
BR2_TARGET_GENERIC_ISSUE="Welcome to OpenIPC v21.04.25.1"
|
||||
BR2_TARGET_GENERIC_HOSTNAME="ipcam"
|
||||
BR2_GLOBAL_PATCH_DIR="$(TOPDIR)/../general/package/all-patches"
|
||||
|
||||
# Packages
|
||||
BR2_PACKAGE_BUSYBOX_CONFIG="$(TOPDIR)/../general/package/busybox/busybox.config"
|
||||
BR2_PACKAGE_DROPBEAR=y
|
||||
BR2_PACKAGE_FWPRINTENV_NG=y
|
||||
BR2_PACKAGE_HISI_GPIO_SCANNER=y
|
||||
BR2_PACKAGE_HISILICON_OSDRV4=y
|
||||
BR2_PACKAGE_IPCTOOL=y
|
||||
BR2_PACKAGE_JSON_C=y
|
||||
BR2_PACKAGE_LAME=y
|
||||
BR2_PACKAGE_LIBEVENT_MINI=y
|
||||
BR2_PACKAGE_MAJESTIC=y
|
||||
BR2_PACKAGE_MINI_SNMPD=y
|
||||
|
||||
# Unused
|
||||
# BR2_SHARED_STATIC_LIBS is not set
|
||||
# BR2_PACKAGE_JPEG_TURBO is not set
|
||||
# BR2_PACKAGE_MINIHTTP is not set
|
||||
# BR2_PACKAGE_MXML is not set
|
||||
# BR2_PACKAGE_SSHPASS is not set
|
||||
# BR2_PACKAGE_RTL8188EU is not set
|
||||
|
||||
# Experimental
|
||||
BR2_PER_PACKAGE_DIRECTORIES=y
|
||||
BR2_PACKAGE_WIRELESS_TOOLS=y
|
||||
# BR2_PACKAGE_WPA_SUPPLICANT is not set
|
||||
# BR2_PACKAGE_WPA_SUPPLICANT_NL80211 is not set
|
||||
|
||||
# Lua
|
||||
BR2_PACKAGE_LUA=y
|
||||
BR2_PACKAGE_PROVIDES_LUAINTERPRETER="lua"
|
||||
BR2_PACKAGE_LUA_5_1=y
|
||||
BR2_PACKAGE_LUAINTERPRETER_ABI_VERSION="5.1"
|
||||
BR2_PACKAGE_LUA_EDITING_NONE=y
|
||||
BR2_PACKAGE_HAS_LUAINTERPRETER=y
|
||||
BR2_PACKAGE_LUASOCKET=y
|
||||
BR2_PACKAGE_NODE_EXPORTER=y
|
|
@ -82,3 +82,13 @@ BR2_PER_PACKAGE_DIRECTORIES=y
|
|||
BR2_PACKAGE_WIRELESS_TOOLS=y
|
||||
BR2_PACKAGE_WPA_SUPPLICANT=y
|
||||
BR2_PACKAGE_WPA_SUPPLICANT_NL80211=y
|
||||
|
||||
# Lua
|
||||
BR2_PACKAGE_LUA=y
|
||||
BR2_PACKAGE_PROVIDES_LUAINTERPRETER="lua"
|
||||
BR2_PACKAGE_LUA_5_1=y
|
||||
BR2_PACKAGE_LUAINTERPRETER_ABI_VERSION="5.1"
|
||||
BR2_PACKAGE_LUA_EDITING_NONE=y
|
||||
BR2_PACKAGE_HAS_LUAINTERPRETER=y
|
||||
BR2_PACKAGE_LUASOCKET=y
|
||||
BR2_PACKAGE_NODE_EXPORTER=y
|
||||
|
|
|
@ -6,3 +6,4 @@ include $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv4/hisilicon-osdrv4
|
|||
include $(BR2_EXTERNAL_HISILICON_PATH)/package/ipctool/ipctool.mk
|
||||
include $(BR2_EXTERNAL_HISILICON_PATH)/package/libevent-mini/libevent-mini.mk
|
||||
include $(BR2_EXTERNAL_HISILICON_PATH)/package/majestic/majestic.mk
|
||||
include $(BR2_EXTERNAL_HISILICON_PATH)/package/node-exporter/node-exporter.mk
|
||||
|
|
|
@ -11,6 +11,7 @@ MAJESTIC_ARGS=""
|
|||
# The majestic does not create a pidfile, and use "-m" to instruct start-stop-daemon to create one.
|
||||
start() {
|
||||
logger -s -p daemon.info -t hisilicon "Loading of kernel modules and initialization of the video system has started"
|
||||
export TZ=$(cat /etc/TZ)
|
||||
load_hisilicon -i
|
||||
#
|
||||
printf 'Starting %s: ' "$DAEMON"
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
../../general/package/node-exporter
|
|
@ -4,3 +4,4 @@ source "$BR2_EXTERNAL_SIGMASTAR_PATH/package/sigmastar-osdrv-ssc335/Config.in"
|
|||
source "$BR2_EXTERNAL_SIGMASTAR_PATH/package/fwprintenv-ng/Config.in"
|
||||
source "$BR2_EXTERNAL_SIGMASTAR_PATH/package/ipctool/Config.in"
|
||||
source "$BR2_EXTERNAL_SIGMASTAR_PATH/package/libevent-mini/Config.in"
|
||||
source "$BR2_EXTERNAL_SIGMASTAR_PATH/package/node-exporter/Config.in"
|
||||
|
|
|
@ -0,0 +1,78 @@
|
|||
# Architecture
|
||||
BR2_arm=y
|
||||
BR2_cortex_a7=y
|
||||
BR2_ARM_EABI=y
|
||||
BR2_ARM_FPU_NEON_VFPV4=y
|
||||
BR2_ARM_INSTRUCTIONS_THUMB2=y
|
||||
BR2_KERNEL_HEADERS_VERSION=y
|
||||
BR2_DEFAULT_KERNEL_VERSION="4.9.84"
|
||||
BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_9=y
|
||||
|
||||
# Toolchain
|
||||
BR2_GCC_VERSION_7_X=y
|
||||
# BR2_TOOLCHAIN_USES_UCLIBC is not set
|
||||
# BR2_TOOLCHAIN_BUILDROOT_UCLIBC is not set
|
||||
# BR2_TOOLCHAIN_BUILDROOT_LIBC="uclibc"
|
||||
BR2_TOOLCHAIN_USES_MUSL=y
|
||||
BR2_TOOLCHAIN_BUILDROOT_MUSL=y
|
||||
BR2_TOOLCHAIN_BUILDROOT_LIBC="musl"
|
||||
BR2_TOOLCHAIN_BUILDROOT_LOCALE=y
|
||||
BR2_TOOLCHAIN_BUILDROOT_USE_SSP=y
|
||||
|
||||
# U-Boot
|
||||
# BR2_TARGET_UBOOT=y
|
||||
# BR2_TARGET_UBOOT_BOARD_DEFCONFIG="x600"
|
||||
# BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y
|
||||
# #BR2_TARGET_UBOOT_CUSTOM_VERSION=y
|
||||
# BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2015.01"
|
||||
# BR2_TARGET_UBOOT_VERSION="2015.01"
|
||||
# BR2_TARGET_UBOOT_FORMAT_BIN=y
|
||||
|
||||
# Kernel
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.9.84"
|
||||
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_SIGMASTAR_PATH)/board/infinity6b0/kernel/ssc335.generic.config"
|
||||
BR2_LINUX_KERNEL_UIMAGE=y
|
||||
BR2_LINUX_KERNEL_XZ=y
|
||||
BR2_LINUX_KERNEL_EXT_SIGMASTAR_PATCHER=y
|
||||
BR2_LINUX_KERNEL_EXT_SIGMASTAR_PATCHER_LIST="$(BR2_EXTERNAL_SIGMASTAR_PATH)/board/infinity6b0/kernel/patches/ $(BR2_EXTERNAL_SIGMASTAR_PATH)/board/infinity6b0/kernel/overlay"
|
||||
|
||||
# Filesystem
|
||||
# BR2_TARGET_TZ_INFO is not set
|
||||
BR2_TARGET_ROOTFS_SQUASHFS=y
|
||||
BR2_TARGET_ROOTFS_SQUASHFS4_XZ=y
|
||||
BR2_ROOTFS_OVERLAY="$(TOPDIR)/../general/overlay"
|
||||
|
||||
# OpenIPC configuration
|
||||
BR2_TOOLCHAIN_BUILDROOT_VENDOR="openipc"
|
||||
BR2_TARGET_GENERIC_ISSUE="Welcome to OpenIPC v21.04.25.1"
|
||||
BR2_TARGET_GENERIC_HOSTNAME="ipcam"
|
||||
BR2_GLOBAL_PATCH_DIR="$(TOPDIR)/../general/package/all-patches"
|
||||
|
||||
# Packages
|
||||
BR2_PACKAGE_BUSYBOX_CONFIG="$(TOPDIR)/../general/package/busybox/busybox.config"
|
||||
BR2_PACKAGE_DROPBEAR=y
|
||||
BR2_PACKAGE_FWPRINTENV_NG=y
|
||||
BR2_PACKAGE_SIGMASTAR_OSDRV_SSC335=y
|
||||
BR2_PACKAGE_IPCTOOL=y
|
||||
BR2_PACKAGE_JSON_C=y
|
||||
BR2_PACKAGE_LAME=y
|
||||
BR2_PACKAGE_LIBEVENT_MINI=y
|
||||
# BR2_PACKAGE_MAJESTIC is not set
|
||||
BR2_PACKAGE_MINI_SNMPD=y
|
||||
|
||||
# Unused
|
||||
# BR2_SHARED_STATIC_LIBS is not set
|
||||
# BR2_PACKAGE_JPEG_TURBO is not set
|
||||
# BR2_PACKAGE_MINIHTTP is not set
|
||||
# BR2_PACKAGE_MXML is not set
|
||||
# BR2_PACKAGE_SSHPASS is not set
|
||||
# BR2_PACKAGE_RTL8188EU is not set
|
||||
|
||||
# Experimental
|
||||
BR2_PER_PACKAGE_DIRECTORIES=y
|
||||
BR2_PACKAGE_WIRELESS_TOOLS=y
|
||||
BR2_PACKAGE_WPA_SUPPLICANT=y
|
||||
BR2_PACKAGE_WPA_SUPPLICANT_NL80211=y
|
|
@ -4,4 +4,5 @@ include $(BR2_EXTERNAL_SIGMASTAR_PATH)/package/sigmastar-osdrv-ssc335/sigmastar-
|
|||
include $(BR2_EXTERNAL_SIGMASTAR_PATH)/package/fwprintenv-ng/fwprintenv-ng.mk
|
||||
include $(BR2_EXTERNAL_SIGMASTAR_PATH)/package/ipctool/ipctool.mk
|
||||
include $(BR2_EXTERNAL_SIGMASTAR_PATH)/package/libevent-mini/libevent-mini.mk
|
||||
include $(BR2_EXTERNAL_SIGMASTAR_PATH)/package/node-exporter/node-exporter.mk
|
||||
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
../../general/package/node-exporter
|
|
@ -4,5 +4,6 @@ source "$BR2_EXTERNAL_XIONGMAI_PATH/package/xiongmai-osdrv-xm510/Config.in"
|
|||
source "$BR2_EXTERNAL_XIONGMAI_PATH/package/xiongmai-osdrv-xm530/Config.in"
|
||||
source "$BR2_EXTERNAL_XIONGMAI_PATH/package/fwprintenv-ng/Config.in"
|
||||
source "$BR2_EXTERNAL_XIONGMAI_PATH/package/ipctool/Config.in"
|
||||
source "$BR2_EXTERNAL_XIONGMAI_PATH/package/majestic/Config.in"
|
||||
source "$BR2_EXTERNAL_XIONGMAI_PATH/package/libevent-mini/Config.in"
|
||||
source "$BR2_EXTERNAL_XIONGMAI_PATH/package/majestic/Config.in"
|
||||
source "$BR2_EXTERNAL_XIONGMAI_PATH/package/node-exporter/Config.in"
|
||||
|
|
|
@ -6,4 +6,5 @@ include $(BR2_EXTERNAL_XIONGMAI_PATH)/package/fwprintenv-ng/fwprintenv-ng.mk
|
|||
include $(BR2_EXTERNAL_XIONGMAI_PATH)/package/ipctool/ipctool.mk
|
||||
include $(BR2_EXTERNAL_XIONGMAI_PATH)/package/libevent-mini/libevent-mini.mk
|
||||
include $(BR2_EXTERNAL_XIONGMAI_PATH)/package/majestic/majestic.mk
|
||||
include $(BR2_EXTERNAL_XIONGMAI_PATH)/package/node-exporter/node-exporter.mk
|
||||
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
../../general/package/node-exporter
|
|
@ -1,353 +0,0 @@
|
|||
diff -urn -- a/miscutils/rng_fips.h b/miscutils/rng_fips.h
|
||||
--- a/miscutils/rng_fips.h 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ b/miscutils/rng_fips.h 2008-08-17 13:28:27.000000000 +0000
|
||||
@@ -0,0 +1,152 @@
|
||||
+/* vi: set sw=4 ts=4: */
|
||||
+/* rng_fips.h
|
||||
+ *
|
||||
+ * Ported to busybox by Malek Degachi
|
||||
+ *
|
||||
+ * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
|
||||
+ */
|
||||
+
|
||||
+#ifndef _RNG_FIPS_H
|
||||
+#define _RNG_FIPS_H
|
||||
+
|
||||
+#include "libbb.h"
|
||||
+
|
||||
+/**********************************************
|
||||
+ * FIPS part
|
||||
+ *********************************************/
|
||||
+
|
||||
+/* Size of a FIPS test buffer, do not change this */
|
||||
+#define FIPS_RNG_BUFFER_SIZE 2500
|
||||
+
|
||||
+/* Context for running FIPS tests */
|
||||
+typedef struct {
|
||||
+ int poker[16];
|
||||
+ int runs[12];
|
||||
+ int ones;
|
||||
+ int rlength;
|
||||
+ int current_bit;
|
||||
+ int last_bit;
|
||||
+ int longrun;
|
||||
+ unsigned int last32;
|
||||
+} fips_ctx_t;
|
||||
+
|
||||
+/*
|
||||
+ * Return values for fips_run_rng_test. These values are OR'ed together
|
||||
+ * for all tests that failed.
|
||||
+ */
|
||||
+#define FIPS_RNG_MONOBIT 0x0001 /* FIPS 140-2 2001-10-10 monobit */
|
||||
+#define FIPS_RNG_POKER 0x0002 /* FIPS 140-2 2001-10-10 poker */
|
||||
+#define FIPS_RNG_RUNS 0x0004 /* FIPS 140-2 2001-10-10 runs */
|
||||
+#define FIPS_RNG_LONGRUN 0x0008 /* FIPS 140-2 2001-10-10 long run */
|
||||
+#define FIPS_RNG_CONTINUOUS_RUN 0x0010 /* FIPS 140-2 continuous run */
|
||||
+
|
||||
+/*
|
||||
+ * fips_test_store - store 8 bits of entropy in FIPS
|
||||
+ * internal test data pool
|
||||
+ */
|
||||
+static void fips_test_store(fips_ctx_t *ctx, unsigned int rng_data)
|
||||
+{
|
||||
+ int j;
|
||||
+
|
||||
+ ctx->poker[rng_data >> 4]++;
|
||||
+ ctx->poker[rng_data & 15]++;
|
||||
+
|
||||
+ /* Note in the loop below rlength is always one less than the actual
|
||||
+ run length. This makes things easier. */
|
||||
+ for (j = 7; j >= 0; j--) {
|
||||
+ ctx->ones += ctx->current_bit = ((rng_data >> j) & 1);
|
||||
+ if (ctx->current_bit != ctx->last_bit) {
|
||||
+ /* If runlength is 1-6 count it in correct bucket. 0's go in
|
||||
+ runs[0-5] 1's go in runs[6-11] hence the 6*current_bit below */
|
||||
+ if (ctx->rlength < 5) {
|
||||
+ ctx->runs[ctx->rlength +
|
||||
+ (6 * ctx->current_bit)]++;
|
||||
+ } else {
|
||||
+ ctx->runs[5 + (6 * ctx->current_bit)]++;
|
||||
+ }
|
||||
+
|
||||
+ /* Check if we just failed longrun test */
|
||||
+ if (ctx->rlength >= 25)
|
||||
+ ctx->longrun = 1;
|
||||
+ ctx->rlength = 0;
|
||||
+ /* flip the current run type */
|
||||
+ ctx->last_bit = ctx->current_bit;
|
||||
+ } else {
|
||||
+ ctx->rlength++;
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static int fips_run_rng_test(fips_ctx_t *ctx, const void *buf)
|
||||
+{
|
||||
+ int i, j;
|
||||
+ int rng_test = 0;
|
||||
+ unsigned char *rngdatabuf;
|
||||
+
|
||||
+ if (!ctx) return -1;
|
||||
+ if (!buf) return -1;
|
||||
+ rngdatabuf = (unsigned char *)buf;
|
||||
+
|
||||
+ for (i=0; i<FIPS_RNG_BUFFER_SIZE; i += 4) {
|
||||
+ int new32 = rngdatabuf[i] |
|
||||
+ ( rngdatabuf[i+1] << 8 ) |
|
||||
+ ( rngdatabuf[i+2] << 16 ) |
|
||||
+ ( rngdatabuf[i+3] << 24 );
|
||||
+ if (new32 == ctx->last32) rng_test |= FIPS_RNG_CONTINUOUS_RUN;
|
||||
+ ctx->last32 = new32;
|
||||
+ fips_test_store(ctx, rngdatabuf[i]);
|
||||
+ fips_test_store(ctx, rngdatabuf[i+1]);
|
||||
+ fips_test_store(ctx, rngdatabuf[i+2]);
|
||||
+ fips_test_store(ctx, rngdatabuf[i+3]);
|
||||
+ }
|
||||
+
|
||||
+ /* add in the last (possibly incomplete) run */
|
||||
+ if (ctx->rlength < 5)
|
||||
+ ctx->runs[ctx->rlength + (6 * ctx->current_bit)]++;
|
||||
+ else {
|
||||
+ ctx->runs[5 + (6 * ctx->current_bit)]++;
|
||||
+ if (ctx->rlength >= 25)
|
||||
+ rng_test |= FIPS_RNG_LONGRUN;
|
||||
+ }
|
||||
+
|
||||
+ if (ctx->longrun) {
|
||||
+ rng_test |= FIPS_RNG_LONGRUN;
|
||||
+ ctx->longrun = 0;
|
||||
+ }
|
||||
+
|
||||
+ /* Ones test */
|
||||
+ if ((ctx->ones >= 10275) || (ctx->ones <= 9725))
|
||||
+ rng_test |= FIPS_RNG_MONOBIT;
|
||||
+ /* Poker calcs */
|
||||
+ for (i = 0, j = 0; i < 16; i++)
|
||||
+ j += ctx->poker[i] * ctx->poker[i];
|
||||
+ /* 16/5000*1563176-5000 = 2.1632 */
|
||||
+ /* 16/5000*1576928-5000 = 46.1696 */
|
||||
+ if ((j > 1576928) || (j < 1563176))
|
||||
+ rng_test |= FIPS_RNG_POKER;
|
||||
+
|
||||
+ if ((ctx->runs[0] < 2315) || (ctx->runs[0] > 2685) ||
|
||||
+ (ctx->runs[1] < 1114) || (ctx->runs[1] > 1386) ||
|
||||
+ (ctx->runs[2] < 527) || (ctx->runs[2] > 723) ||
|
||||
+ (ctx->runs[3] < 240) || (ctx->runs[3] > 384) ||
|
||||
+ (ctx->runs[4] < 103) || (ctx->runs[4] > 209) ||
|
||||
+ (ctx->runs[5] < 103) || (ctx->runs[5] > 209) ||
|
||||
+ (ctx->runs[6] < 2315) || (ctx->runs[6] > 2685) ||
|
||||
+ (ctx->runs[7] < 1114) || (ctx->runs[7] > 1386) ||
|
||||
+ (ctx->runs[8] < 527) || (ctx->runs[8] > 723) ||
|
||||
+ (ctx->runs[9] < 240) || (ctx->runs[9] > 384) ||
|
||||
+ (ctx->runs[10] < 103) || (ctx->runs[10] > 209) ||
|
||||
+ (ctx->runs[11] < 103) || (ctx->runs[11] > 209)) {
|
||||
+ rng_test |= FIPS_RNG_RUNS;
|
||||
+ }
|
||||
+
|
||||
+ /* finally, clear out FIPS variables for start of next run */
|
||||
+ memset(ctx->poker, 0, sizeof (ctx->poker));
|
||||
+ memset(ctx->runs, 0, sizeof (ctx->runs));
|
||||
+ ctx->ones = 0;
|
||||
+ ctx->rlength = -1;
|
||||
+ ctx->current_bit = 0;
|
||||
+
|
||||
+ return rng_test;
|
||||
+}
|
||||
+#endif /* _RNG_FIPS_H */
|
||||
diff -urn -- a/miscutils/rngd.c b/miscutils/rngd.c
|
||||
--- a/miscutils/rngd.c 2021-04-14 10:06:59.131381906 +0300
|
||||
+++ b/miscutils/rngd.c 2021-04-14 10:04:59.785401231 +0300
|
||||
@@ -0,0 +1,193 @@
|
||||
+/* vi: set sw=4 ts=4: */
|
||||
+/*
|
||||
+ * rngd implementation for busybox
|
||||
+ *
|
||||
+ * Ported to busybox by Malek Degachi
|
||||
+ *
|
||||
+ * Licensed under GPLv2 or later, see file License in this tarball for details.
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+//config:config RNGD
|
||||
+//config: bool "rngd"
|
||||
+//config: default n
|
||||
+//config: help
|
||||
+//config: Hardware random number generation daemon.
|
||||
+//config:config FEATURE_RNGD_LONG_OPTIONS
|
||||
+//config: bool "Enable long options"
|
||||
+//config: default n
|
||||
+//config: depends on RNGD && GETOPT_LONG
|
||||
+//config: help
|
||||
+//config: Support long options for the rngd applet.
|
||||
+
|
||||
+//applet:IF_RNGD(APPLET(rngd, BB_DIR_USR_SBIN, BB_SUID_DROP))
|
||||
+
|
||||
+//kbuild:lib-$(CONFIG_RNGD) += rngd.o
|
||||
+
|
||||
+//usage:#define rngd_trivial_usage
|
||||
+//usage: "[-bf] [-o random file] [-r rng file] [-s step] [-t nnn] [-W n]"
|
||||
+//usage:#define rngd_full_usage "\n\n"
|
||||
+//usage: "Check and feed random data from hardware device to kernel entropy pool.\n"
|
||||
+//usage: "\nOptions:"
|
||||
+//usage: "\n -b,--background Become a daemon (default)"
|
||||
+//usage: "\n -f,--foreground Do not fork and become a daemon"
|
||||
+//usage: "\n -o,--rng-device=file Kernel device used for random number output"
|
||||
+//usage: "\n (default: /dev/random)"
|
||||
+//usage: "\n -r,--random-step=nnn Kernel device used for random number input"
|
||||
+//usage: "\n (default: /dev/hw_random)"
|
||||
+//usage: "\n -s,--random-step=nnn Number of bytes written to random-device at a time"
|
||||
+//usage: "\n (default: 64)"
|
||||
+//usage: "\n -t,--timeout=nnn Interval written to random-device when the entropy"
|
||||
+//usage: "\n pool is full, in seconds (default: 60)"
|
||||
+//usage: "\n -W,--fill-watermark=n Do not stop feeding entropy to random-device until"
|
||||
+//usage: "\n at least n bits of entropy are available in the"
|
||||
+//usage: "\n pool (default: 2048), 0 <= n <= 4096"
|
||||
+
|
||||
+
|
||||
+#include "libbb.h"
|
||||
+#include "rng_fips.h"
|
||||
+#include <syslog.h>
|
||||
+
|
||||
+#ifndef __u32
|
||||
+typedef unsigned int __u32;
|
||||
+#endif
|
||||
+#include <linux/random.h> /* struct rand_pool_info, RNDADDENTROPY and RNDGETENTCNT */
|
||||
+
|
||||
+enum {
|
||||
+ RNG_b = (1 << 0),
|
||||
+ RNG_f = (1 << 1),
|
||||
+ RNG_o = (1 << 2),
|
||||
+ RNG_r = (1 << 3),
|
||||
+ RNG_s = (1 << 4),
|
||||
+ RNG_t = (1 << 5),
|
||||
+ RNG_W = (1 << 6),
|
||||
+};
|
||||
+
|
||||
+static void random_add_entropy(int random_fd, void *buf, size_t size)
|
||||
+{
|
||||
+ struct rand_pool_info *entropy;
|
||||
+
|
||||
+ entropy = xmalloc(sizeof(struct rand_pool_info) + size);
|
||||
+
|
||||
+ entropy->entropy_count = size * 8;
|
||||
+ entropy->buf_size = size;
|
||||
+ memcpy(entropy->buf, buf, size);
|
||||
+
|
||||
+ ioctl_or_perror_and_die(random_fd, RNDADDENTROPY, entropy, "RNDADDENTROPY failed: %s\n",
|
||||
+ strerror(errno));
|
||||
+}
|
||||
+
|
||||
+static void random_sleep(int random_fd, double timeout, unsigned fill_watermark)
|
||||
+{
|
||||
+ int ent_count;
|
||||
+ struct pollfd pfd[1];
|
||||
+
|
||||
+ pfd[0].fd = random_fd;
|
||||
+ pfd[0].events = POLLOUT;
|
||||
+
|
||||
+ ioctl_or_perror_and_die(random_fd, RNDGETENTCNT, &ent_count, "RNDGETENTCNT failed: %s\n",
|
||||
+ strerror(errno));
|
||||
+ if (ent_count < fill_watermark) return;
|
||||
+
|
||||
+ safe_poll(pfd, 1, 1000.0 * timeout);
|
||||
+}
|
||||
+
|
||||
+/* Initialize entropy source */
|
||||
+static int discard_initial_data(int rng_fd)
|
||||
+{
|
||||
+ /* Trash 32 bits of what is probably stale (non-random)
|
||||
+ * initial state from the RNG. For Intel's, 8 bits would
|
||||
+ * be enough, but since AMD's generates 32 bits at a time...
|
||||
+ *
|
||||
+ * The kernel drivers should be doing this at device powerup,
|
||||
+ * but at least up to 2.4.24, it doesn't. */
|
||||
+ unsigned char tempbuf[4];
|
||||
+
|
||||
+ xread(rng_fd, tempbuf, sizeof tempbuf);
|
||||
+
|
||||
+ /* Return 32 bits of bootstrap data */
|
||||
+ xread(rng_fd, tempbuf, sizeof tempbuf);
|
||||
+
|
||||
+ return tempbuf[0] | (tempbuf[1] << 8) |
|
||||
+ (tempbuf[2] << 16) | (tempbuf[3] << 24);
|
||||
+}
|
||||
+
|
||||
+
|
||||
+#if ENABLE_FEATURE_RNGD_LONG_OPTIONS
|
||||
+static const char rngd_longopts[] ALIGN1 =
|
||||
+ "background\0" No_argument "b"
|
||||
+ "foreground\0" No_argument "f"
|
||||
+ "random-device\0" Required_argument "o"
|
||||
+ "rng-device\0" Required_argument "r"
|
||||
+ "random-step\0" Required_argument "s"
|
||||
+ "timeout\0" Required_argument "t"
|
||||
+ "fill-watermark\0" Required_argument "W"
|
||||
+ ;
|
||||
+#endif
|
||||
+
|
||||
+int rngd_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
|
||||
+int rngd_main(int argc UNUSED_PARAM, char **argv)
|
||||
+{
|
||||
+ const char *random_name = "/dev/random";
|
||||
+ const char *rng_name = "/dev/hw_random";
|
||||
+ int random_step = 64;
|
||||
+ unsigned fill_watermark;
|
||||
+ double poll_timeout = 60;
|
||||
+
|
||||
+ const char *watermark = "2048";
|
||||
+ static int rng_fd;
|
||||
+ static int random_fd;
|
||||
+
|
||||
+ unsigned char buf[FIPS_RNG_BUFFER_SIZE];
|
||||
+ unsigned char *p;
|
||||
+ int fips;
|
||||
+ fips_ctx_t *fipsctx;
|
||||
+
|
||||
+#if ENABLE_FEATURE_RNGD_LONG_OPTIONS
|
||||
+ applet_long_options = rngd_longopts;
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
+ getopt32(argv, "bfo:r:s:t:W:", &random_name, &rng_name, &random_step, &poll_timeout, &watermark);
|
||||
+ argv += optind;
|
||||
+
|
||||
+ fill_watermark = xatou_range(watermark, 0, 4096);
|
||||
+
|
||||
+ /* Init entropy source, and open hardware RNG device */
|
||||
+ rng_fd = xopen(rng_name, O_RDONLY);
|
||||
+
|
||||
+ /* Bootstrap FIPS tests */
|
||||
+ fipsctx = (fips_ctx_t *) xzalloc(sizeof(fips_ctx_t));
|
||||
+ fipsctx->rlength = -1;
|
||||
+ fipsctx->last32 = discard_initial_data(rng_fd);
|
||||
+
|
||||
+ /* Init entropy sink and open random device */
|
||||
+ random_fd = xopen(random_name, O_RDWR);
|
||||
+
|
||||
+ if (!(option_mask32 & RNG_f)) { /* no -f */
|
||||
+ bb_daemonize_or_rexec(DAEMON_CHDIR_ROOT, argv);
|
||||
+ openlog(applet_name, LOG_PID, LOG_DAEMON);
|
||||
+ logmode = LOGMODE_SYSLOG;
|
||||
+ }
|
||||
+
|
||||
+ write_pidfile("/var/run/rngd.pid");
|
||||
+ for (;;) {
|
||||
+ xread(rng_fd, buf, sizeof buf);
|
||||
+
|
||||
+ fips = fips_run_rng_test(fipsctx, buf);
|
||||
+
|
||||
+ if (fips) {
|
||||
+ bb_info_msg("failed fips test");
|
||||
+ sleep(1);
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ for (p = buf; p + random_step <= &buf[sizeof buf]; p += random_step) {
|
||||
+ random_add_entropy(random_fd, p, random_step);
|
||||
+ random_sleep(random_fd, poll_timeout ? : -1.0, fill_watermark);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return EXIT_SUCCESS;
|
||||
+}
|
||||
+
|
|
@ -0,0 +1,6 @@
|
|||
config BR2_PACKAGE_NODE_EXPORTER
|
||||
bool "node-exporter"
|
||||
help
|
||||
node-exporter - Monitoring Linux host metrics with Prometheus
|
||||
|
||||
https://openipc.org
|
|
@ -0,0 +1,12 @@
|
|||
local function scrape()
|
||||
local count = get_contents("/proc/sys/net/netfilter/nf_conntrack_count")
|
||||
local max = get_contents("/proc/sys/net/netfilter/nf_conntrack_max")
|
||||
if count ~= "" then
|
||||
metric("node_nf_conntrack_entries", "gauge", nil, string.sub(count, 1, -2))
|
||||
end
|
||||
if max ~= "" then
|
||||
metric("node_nf_conntrack_entries_limit", "gauge", nil, string.sub(max, 1, -2))
|
||||
end
|
||||
end
|
||||
|
||||
return { scrape = scrape }
|
|
@ -0,0 +1,47 @@
|
|||
-- stat/cpu collector
|
||||
local function scrape()
|
||||
local stat = get_contents("/proc/stat")
|
||||
|
||||
-- system boot time, seconds since epoch
|
||||
metric("node_boot_time_seconds", "gauge", nil,
|
||||
string.match(stat, "btime ([0-9]+)"))
|
||||
|
||||
-- context switches since boot (all CPUs)
|
||||
metric("node_context_switches_total", "counter", nil,
|
||||
string.match(stat, "ctxt ([0-9]+)"))
|
||||
|
||||
-- cpu times, per CPU, per mode
|
||||
local cpu_mode = {"user", "nice", "system", "idle", "iowait", "irq",
|
||||
"softirq", "steal", "guest", "guest_nice"}
|
||||
local i = 0
|
||||
local cpu_metric = metric("node_cpu_seconds_total", "counter")
|
||||
while true do
|
||||
local cpu = {string.match(stat,
|
||||
"cpu"..i.." (%d+) (%d+) (%d+) (%d+) (%d+) (%d+) (%d+) (%d+) (%d+) (%d+)")}
|
||||
if #cpu ~= 10 then
|
||||
break
|
||||
end
|
||||
for ii, mode in ipairs(cpu_mode) do
|
||||
cpu_metric({cpu="cpu"..i, mode=mode}, cpu[ii] / 100)
|
||||
end
|
||||
i = i + 1
|
||||
end
|
||||
|
||||
-- interrupts served
|
||||
metric("node_intr_total", "counter", nil,
|
||||
string.match(stat, "intr ([0-9]+)"))
|
||||
|
||||
-- processes forked
|
||||
metric("node_forks_total", "counter", nil,
|
||||
string.match(stat, "processes ([0-9]+)"))
|
||||
|
||||
-- processes running
|
||||
metric("node_procs_running_total", "gauge", nil,
|
||||
string.match(stat, "procs_running ([0-9]+)"))
|
||||
|
||||
-- processes blocked for I/O
|
||||
metric("node_procs_blocked_total", "gauge", nil,
|
||||
string.match(stat, "procs_blocked ([0-9]+)"))
|
||||
end
|
||||
|
||||
return { scrape = scrape }
|
|
@ -0,0 +1,8 @@
|
|||
local function scrape()
|
||||
local file_nr = space_split(get_contents("/proc/sys/fs/file-nr"))
|
||||
|
||||
metric("node_filefd_allocated", "gauge", nil, file_nr[1])
|
||||
metric("node_filefd_maximum", "gauge", nil, file_nr[3])
|
||||
end
|
||||
|
||||
return { scrape = scrape }
|
|
@ -0,0 +1,9 @@
|
|||
local function scrape()
|
||||
local loadavg = space_split(get_contents("/proc/loadavg"))
|
||||
|
||||
metric("node_load1", "gauge", nil, loadavg[1])
|
||||
metric("node_load5", "gauge", nil, loadavg[2])
|
||||
metric("node_load15", "gauge", nil, loadavg[3])
|
||||
end
|
||||
|
||||
return { scrape = scrape }
|
|
@ -0,0 +1,12 @@
|
|||
local function scrape()
|
||||
for line in io.lines("/proc/meminfo") do
|
||||
local name, size, unit = string.match(line, "([^:]+):%s+(%d+)%s?(k?B?)")
|
||||
if unit == 'kB' then
|
||||
size = size * 1024
|
||||
end
|
||||
metric("node_memory_"..name:gsub("[):]", ""):gsub("[(]", "_").."_bytes",
|
||||
"gauge", nil, size)
|
||||
end
|
||||
end
|
||||
|
||||
return { scrape = scrape }
|
|
@ -0,0 +1,39 @@
|
|||
|
||||
local netdevsubstat = {
|
||||
"receive_bytes_total",
|
||||
"receive_packets_total",
|
||||
"receive_errs_total",
|
||||
"receive_drop_total",
|
||||
"receive_fifo_total",
|
||||
"receive_frame_total",
|
||||
"receive_compressed_total",
|
||||
"receive_multicast_total",
|
||||
"transmit_bytes_total",
|
||||
"transmit_packets_total",
|
||||
"transmit_errs_total",
|
||||
"transmit_drop_total",
|
||||
"transmit_fifo_total",
|
||||
"transmit_colls_total",
|
||||
"transmit_carrier_total",
|
||||
"transmit_compressed_total"
|
||||
}
|
||||
|
||||
local pattern = "([^%s:]+):%s+(%d+)%s+(%d+)%s+(%d+)%s+(%d+)%s+(%d+)%s+(%d+)%s+(%d+)%s+(%d+)%s+(%d+)%s+(%d+)%s+(%d+)%s+(%d+)%s+(%d+)%s+(%d+)%s+(%d+)%s+(%d+)"
|
||||
|
||||
local function scrape()
|
||||
local nds_table = {}
|
||||
for line in io.lines("/proc/net/dev") do
|
||||
local t = {string.match(line, pattern)}
|
||||
if #t == 17 then
|
||||
nds_table[t[1]] = t
|
||||
end
|
||||
end
|
||||
for i, ndss in ipairs(netdevsubstat) do
|
||||
netdev_metric = metric("node_network_" .. ndss, "counter")
|
||||
for dev, nds_dev in pairs(nds_table) do
|
||||
netdev_metric({device=dev}, nds_dev[i+1])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return { scrape = scrape }
|
|
@ -0,0 +1,30 @@
|
|||
local netsubstat = {
|
||||
"IcmpMsg",
|
||||
"Icmp",
|
||||
"IpExt",
|
||||
"Ip",
|
||||
"TcpExt",
|
||||
"Tcp",
|
||||
"UdpLite",
|
||||
"Udp"
|
||||
}
|
||||
|
||||
local function scrape()
|
||||
-- NOTE: Both of these are missing in OpenWRT kernels.
|
||||
-- See: https://dev.openwrt.org/ticket/15781
|
||||
local netstat = get_contents("/proc/net/netstat") .. get_contents("/proc/net/snmp")
|
||||
|
||||
-- all devices
|
||||
for i, nss in ipairs(netsubstat) do
|
||||
local substat_s = string.match(netstat, nss .. ": ([A-Z][A-Za-z0-9 ]+)")
|
||||
if substat_s then
|
||||
local substat = space_split(substat_s)
|
||||
local substatv = space_split(string.match(netstat, nss .. ": ([0-9 -]+)"))
|
||||
for ii, ss in ipairs(substat) do
|
||||
metric("node_netstat_" .. nss .. "_" .. ss, "gauge", nil, substatv[ii])
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return { scrape = scrape }
|
|
@ -0,0 +1,6 @@
|
|||
local function scrape()
|
||||
-- current time
|
||||
metric("node_time_seconds", "gauge", nil, os.time())
|
||||
end
|
||||
|
||||
return { scrape = scrape }
|
|
@ -0,0 +1,20 @@
|
|||
local uname_fd = io.popen("uname -m")
|
||||
|
||||
local labels = {
|
||||
domainname = "",
|
||||
nodename = "",
|
||||
release = string.sub(get_contents("/proc/sys/kernel/osrelease"), 1, -2),
|
||||
sysname = string.sub(get_contents("/proc/sys/kernel/ostype"), 1, -2),
|
||||
version = string.sub(get_contents("/proc/sys/kernel/version"), 1, -2),
|
||||
machine = string.sub(uname_fd:read("*a"), 1, -2)
|
||||
}
|
||||
|
||||
uname_fd:close()
|
||||
|
||||
local function scrape()
|
||||
labels["domainname"] = string.sub(get_contents("/proc/sys/kernel/domainname"), 1, -2)
|
||||
labels["nodename"] = string.sub(get_contents("/proc/sys/kernel/hostname"), 1, -2)
|
||||
metric("node_uname_info", "gauge", labels, 1)
|
||||
end
|
||||
|
||||
return { scrape = scrape }
|
|
@ -0,0 +1,56 @@
|
|||
#!/bin/sh
|
||||
|
||||
DAEMON="prometheus-node-exporter-lua"
|
||||
PIDFILE="/var/run/$DAEMON.pid"
|
||||
|
||||
PROMETHEUS_ARGS="--bind * --port 9100"
|
||||
|
||||
# shellcheck source=/dev/null
|
||||
[ -r "/etc/default/$DAEMON" ] && . "/etc/default/$DAEMON"
|
||||
|
||||
# The majestic does not create a pidfile, and use "-m" to instruct start-stop-daemon to create one.
|
||||
start() {
|
||||
logger -s -p daemon.info -t prometheus "Start $DAEMON"
|
||||
#
|
||||
printf 'Starting %s: ' "$DAEMON"
|
||||
# shellcheck disable=SC2086 # we need the word splitting
|
||||
start-stop-daemon -b -m -S -q -p "$PIDFILE" -x "/usr/bin/$DAEMON" \
|
||||
-- $PROMETHEUS_ARGS
|
||||
status=$?
|
||||
if [ "$status" -eq 0 ]; then
|
||||
echo "OK"
|
||||
else
|
||||
echo "FAIL"
|
||||
fi
|
||||
return "$status"
|
||||
}
|
||||
|
||||
stop() {
|
||||
printf 'Stopping %s: ' "$DAEMON"
|
||||
start-stop-daemon -K -q -p "$PIDFILE"
|
||||
status=$?
|
||||
if [ "$status" -eq 0 ]; then
|
||||
rm -f "$PIDFILE"
|
||||
echo "OK"
|
||||
else
|
||||
echo "FAIL"
|
||||
fi
|
||||
return "$status"
|
||||
}
|
||||
|
||||
restart() {
|
||||
stop
|
||||
sleep 1
|
||||
start
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
start|stop|restart)
|
||||
"$1";;
|
||||
reload)
|
||||
# Restart, since there is no true "reload" feature.
|
||||
restart;;
|
||||
*)
|
||||
echo "Usage: $0 {start|stop|restart|reload}"
|
||||
exit 1
|
||||
esac
|
|
@ -0,0 +1,148 @@
|
|||
#!/usr/bin/lua
|
||||
|
||||
-- Metrics web server
|
||||
|
||||
-- Copyright (c) 2016 Jeff Schornick <jeff@schornick.org>
|
||||
-- Copyright (c) 2015 Kevin Lyda
|
||||
-- Licensed under the Apache License, Version 2.0
|
||||
|
||||
socket = require("socket")
|
||||
|
||||
-- Parsing
|
||||
|
||||
function space_split(s)
|
||||
local elements = {}
|
||||
for element in s:gmatch("%S+") do
|
||||
table.insert(elements, element)
|
||||
end
|
||||
return elements
|
||||
end
|
||||
|
||||
function get_contents(filename)
|
||||
local f = io.open(filename, "rb")
|
||||
local contents = ""
|
||||
if f then
|
||||
contents = f:read "*a"
|
||||
f:close()
|
||||
end
|
||||
|
||||
return contents
|
||||
end
|
||||
|
||||
-- Metric printing
|
||||
|
||||
function print_metric(metric, labels, value)
|
||||
local label_string = ""
|
||||
if labels then
|
||||
for label,value in pairs(labels) do
|
||||
label_string = label_string .. label .. '="' .. value .. '",'
|
||||
end
|
||||
label_string = "{" .. string.sub(label_string, 1, -2) .. "}"
|
||||
end
|
||||
output(string.format("%s%s %s", metric, label_string, value))
|
||||
end
|
||||
|
||||
function metric(name, mtype, labels, value)
|
||||
output("# TYPE " .. name .. " " .. mtype)
|
||||
local outputter = function(labels, value)
|
||||
print_metric(name, labels, value)
|
||||
end
|
||||
if value then
|
||||
outputter(labels, value)
|
||||
end
|
||||
return outputter
|
||||
end
|
||||
|
||||
function timed_scrape(collector)
|
||||
local start_time = socket.gettime()
|
||||
local success = 1
|
||||
local status, err = pcall(collector.scrape)
|
||||
if not status then
|
||||
success = 0
|
||||
print(err)
|
||||
end
|
||||
return (socket.gettime() - start_time), success
|
||||
end
|
||||
|
||||
function run_all_collectors(collectors)
|
||||
local metric_duration = metric("node_scrape_collector_duration_seconds", "gauge")
|
||||
local metric_success = metric("node_scrape_collector_success", "gauge")
|
||||
for _,cname in pairs(collectors) do
|
||||
if col_mods[cname] ~= nil then
|
||||
local duration, success = timed_scrape(col_mods[cname])
|
||||
local labels = {collector=cname}
|
||||
metric_duration(labels, duration)
|
||||
metric_success(labels, success)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Web server-specific functions
|
||||
|
||||
function http_ok_header()
|
||||
output("HTTP/1.0 200 OK\r\nServer: lua-metrics\r\nContent-Type: text/plain; version=0.0.4\r\n\r")
|
||||
end
|
||||
|
||||
function http_not_found()
|
||||
output("HTTP/1.0 404 Not Found\r\nServer: lua-metrics\r\nContent-Type: text/plain\r\n\r\nERROR: File Not Found.")
|
||||
end
|
||||
|
||||
function serve(request)
|
||||
local q = request:match("^GET /metrics%??([^ ]*) HTTP/1%.[01]$")
|
||||
if q == nil then
|
||||
http_not_found()
|
||||
else
|
||||
http_ok_header()
|
||||
local cols = {}
|
||||
for c in q:gmatch("collect[^=]*=([^&]+)") do
|
||||
cols[#cols+1] = c
|
||||
end
|
||||
if #cols == 0 then
|
||||
cols = col_names
|
||||
end
|
||||
run_all_collectors(cols)
|
||||
end
|
||||
client:close()
|
||||
return true
|
||||
end
|
||||
|
||||
-- Main program
|
||||
|
||||
for k,v in ipairs(arg) do
|
||||
if (v == "-p") or (v == "--port") then
|
||||
port = arg[k+1]
|
||||
end
|
||||
if (v == "-b") or (v == "--bind") then
|
||||
bind = arg[k+1]
|
||||
end
|
||||
end
|
||||
|
||||
col_mods = {}
|
||||
col_names = {}
|
||||
ls_fd = io.popen("ls -1 /usr/lib/lua/5.1/prometheus-collectors/*.lua")
|
||||
for c in ls_fd:lines() do
|
||||
c = c:match("([^/]+)%.lua$")
|
||||
col_mods[c] = require('prometheus-collectors.'..c)
|
||||
col_names[#col_names+1] = c
|
||||
end
|
||||
ls_fd:close()
|
||||
|
||||
if port then
|
||||
server = assert(socket.bind(bind, port))
|
||||
|
||||
while 1 do
|
||||
client = server:accept()
|
||||
client:settimeout(60)
|
||||
local request, err = client:receive()
|
||||
|
||||
if not err then
|
||||
output = function (str) client:send(str.."\n") end
|
||||
if not serve(request) then
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
output = print
|
||||
run_all_collectors(col_names)
|
||||
end
|
|
@ -0,0 +1,31 @@
|
|||
################################################################################
|
||||
#
|
||||
# node-exporter
|
||||
#
|
||||
################################################################################
|
||||
|
||||
NODE_EXPORTER_VERSION =
|
||||
NODE_EXPORTER_SITE =
|
||||
NODE_EXPORTER_LICENSE = MIT
|
||||
NODE_EXPORTER_LICENSE_FILES = LICENSE
|
||||
NODE_EXPORTER_INSTALL_STAGING = YES
|
||||
|
||||
|
||||
define NODE_EXPORTER_INSTALL_TARGET_CMDS
|
||||
$(INSTALL) -m 755 -d $(TARGET_DIR)/etc/init.d
|
||||
$(INSTALL) -m 755 -t $(TARGET_DIR)/etc/init.d $(TOPDIR)/../general/package/node-exporter/files/script/S95prometheus
|
||||
|
||||
$(INSTALL) -m 755 -d $(TARGET_DIR)/usr/bin
|
||||
$(INSTALL) -m 755 -t $(TARGET_DIR)/usr/bin $(TOPDIR)/../general/package/node-exporter/files/script/prometheus-node-exporter-lua
|
||||
|
||||
$(INSTALL) -m 755 -d $(TARGET_DIR)/usr/lib/lua/5.1/prometheus-collectors
|
||||
$(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/lua/5.1/prometheus-collectors $(TOPDIR)/../general/package/node-exporter/files/prometheus-collectors/*.lua
|
||||
endef
|
||||
|
||||
$(eval $(generic-package))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue