diff --git a/net/atlas-probe/Makefile b/net/atlas-probe/Makefile new file mode 100644 index 000000000..eafebcde9 --- /dev/null +++ b/net/atlas-probe/Makefile @@ -0,0 +1,70 @@ +# +# Copyright (C) 2019-2021 CZ.NIC z.s.p.o. (https://www.nic.cz/) +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=atlas-probe +PKG_VERSION:=2.2.1 +PKG_RELEASE:=1 + +PKG_SOURCE:=ripe-atlas-probe-busybox-$(PKG_VERSION).tar.gz +PKG_SOURCE_URL:=https://github.com/RIPE-NCC/ripe-atlas-probe-busybox/archive/v$(PKG_VERSION) +PKG_HASH:=c5a3aca026cd1a3b93a77b159b36cd7a1098eb6d90e9ae4a69872cd7a419a87b + +PKG_BUILD_DIR:=$(BUILD_DIR)/ripe-atlas-probe-busybox-$(PKG_VERSION) + +PKG_MAINTAINER:=Jan Pavlinec +PKG_LICENSE:=GPL-2.0-or-later +PKG_LICENSE_FILES:=LICENSE + +PKG_FIXUP:=autoreconf + +include $(INCLUDE_DIR)/package.mk + +define Package/atlas-probe + SECTION:=net + CATEGORY:=Network + TITLE:=RIPE Atlas probe measurement + DEPENDS:=+librt +libopenssl +openssh-client +sudo + USERID:=atlas=444:atlas=444 + URL:=https://atlas.ripe.net/ +endef + +define Package/atlas-probe/description + RIPE Atlas is a global, open, distributed Internet measurement platform, + consisting of thousands of measurement devices that measure Internet + connectivity in real time. +endef + +TARGET_CFLAGS += $(FPIC) + +CONFIGURE_ARGS += \ + --disable-shared \ + --enable-static + +CONFIGURE_PATH = libevent-2.1.11-stable + +TARGET_LDFLAGS = -L$(PKG_BUILD_DIR)/$(CONFIGURE_PATH)/.libs + +define Build/Compile + +$(MAKE_VARS) \ + $(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR)/$(CONFIGURE_PATH) \ + $(MAKE_FLAGS) + +$(MAKE_VARS) \ + $(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \ + $(MAKE_FLAGS) +endef + +define Package/atlas-probe/install + +$(MAKE_VARS) \ + $(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \ + $(MAKE_FLAGS) CONFIG_PREFIX=$(1)/usr/libexec/atlas-probe install + $(INSTALL_DIR) $(1)/usr/libexec/atlas-probe/state + echo $(PKG_VERSION) > $(1)/usr/libexec/atlas-probe/state/VERSION +endef + +$(eval $(call BuildPackage,atlas-probe)) diff --git a/net/atlas-probe/patches/001-fix-stime-glibc-remove.patch b/net/atlas-probe/patches/001-fix-stime-glibc-remove.patch new file mode 100644 index 000000000..8c410197c --- /dev/null +++ b/net/atlas-probe/patches/001-fix-stime-glibc-remove.patch @@ -0,0 +1,178 @@ +From 402150eed057fc9fa52c8471ae645e23913a2805 Mon Sep 17 00:00:00 2001 +From: Philip Homburg +Date: Tue, 23 Jun 2020 12:25:08 -0400 +Subject: [PATCH] replace stime with clock_settime + +--- + coreutils/date.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +--- a/coreutils/date.c ++++ b/coreutils/date.c +@@ -246,6 +246,9 @@ int date_main(int argc UNUSED_PARAM, cha + if (*argv) + bb_show_usage(); + ++ /* Clear ts.tv_nsec, in case we need to set the time later */ ++ ts.tv_nsec= 0; ++ + /* Now we have parsed all the information except the date format + * which depends on whether the clock is being set or read */ + +@@ -310,7 +313,7 @@ int date_main(int argc UNUSED_PARAM, cha + } + + /* if setting time, set it */ +- if ((opt & OPT_SET) && stime(&ts.tv_sec) < 0) { ++ if ((opt & OPT_SET) && clock_settime(CLOCK_REALTIME, &ts) < 0) { + bb_perror_msg("can't set date"); + } + } +--- a/util-linux/rdate.c ++++ b/util-linux/rdate.c +@@ -65,27 +65,27 @@ static time_t askremotedate(const char * + int rdate_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; + int rdate_main(int argc UNUSED_PARAM, char **argv) + { +- time_t remote_time; ++ struct timespec remote_time; + unsigned flags; + + opt_complementary = "-1"; + flags = getopt32(argv, "sp"); + +- remote_time = askremotedate(argv[optind]); ++ remote_time.tv_sec = askremotedate(argv[optind]); + + if (!(flags & 2)) { /* no -p (-s may be present) */ + time_t current_time; + + time(¤t_time); +- if (current_time == remote_time) ++ if (current_time == remote_time.tv_sec) + bb_error_msg("current time matches remote time"); + else +- if (stime(&remote_time) < 0) ++ if (clock_settime(CLOCK_REALTIME,&remote_time) < 0) + bb_perror_msg_and_die("can't set time of day"); + } + + if (flags != 1) /* not lone -s */ +- printf("%s", ctime(&remote_time)); ++ printf("%s", ctime(&remote_time.tv_sec)); + + return EXIT_SUCCESS; + } +--- a/networking/httpget.c ++++ b/networking/httpget.c +@@ -947,8 +947,9 @@ static int eat_headers(FILE *tcp_file, i + if (time_tolerance && strncmp(line, "Date: ", 6) == 0) + { + /* Try to set time from server */ +- time_t now, tim, tolerance; ++ time_t now, tolerance; + struct tm tm; ++ struct timespec tim; + + tolerance= strtoul(time_tolerance, &cp, 10); + if (cp[0] != '\0') +@@ -966,16 +967,16 @@ static int eat_headers(FILE *tcp_file, i + line+6); + } + } +- tim= timegm(&tm); ++ tim.tv_sec= timegm(&tm); + now= time(NULL); +- if (now < tim-tolerance || now > tim+tolerance) ++ if (now < tim.tv_sec-tolerance || now > tim.tv_sec+tolerance) + { + if (debug) + { fprintf(stderr, + "setting time, time difference is %d\n", +- (int)(tim-now)); ++ (int)(tim.tv_sec-now)); + } +- stime(&tim); ++ clock_settime(CLOCK_REALTIME,&tim); + } + } + +--- a/networking/httppost.c ++++ b/networking/httppost.c +@@ -92,13 +92,14 @@ int httppost_main(int argc, char *argv[] + char *time_tolerance, *rebased_fn= NULL; + char *fn_new, *fn; + FILE *tcp_file, *out_file, *fh; +- time_t server_time, tolerance; ++ time_t tolerance; ++ struct timespec server_time; + struct stat sbF, sbH, sbS; + off_t cLength, dir_length, maxpostsize; + struct sigaction sa; + +- post_dir= NULL; +- post_file= NULL; ++ post_dir= NULL; ++ post_file= NULL; + post_footer=NULL; + post_header=NULL; + atlas_id= NULL; +@@ -470,12 +471,12 @@ int httppost_main(int argc, char *argv[] + if (!check_result(tcp_file)) + goto err; + fprintf(stderr, "httppost: getting reply headers \n"); +- server_time= 0; ++ server_time.tv_sec = 0; + content_length= -1; +- if (!eat_headers(tcp_file, &chunked, &content_length, &server_time)) ++ if (!eat_headers(tcp_file, &chunked, &content_length, &server_time.tv_sec)) + goto err; + +- if (tolerance && server_time > 0) ++ if (tolerance && server_time.tv_sec > 0) + { + /* Try to set time from server */ + int need_set_time; +@@ -486,35 +487,35 @@ int httppost_main(int argc, char *argv[] + rtt= now.tv_sec-start_time.tv_sec; + rtt += (now.tv_usec-start_time.tv_usec)/1e6; + if (rtt < 0) rtt= 0; +- need_set_time= (now.tv_sec < server_time-tolerance-rtt || +- now.tv_sec > server_time+tolerance+rtt); ++ need_set_time= (now.tv_sec < server_time.tv_sec-tolerance-rtt || ++ now.tv_sec > server_time.tv_sec+tolerance+rtt); + if (need_set_time && getenv("HTTPPOST_ALLOW_STIME")) + { + fprintf(stderr, + "setting time, time difference is %ld\n", +- (long)server_time-now.tv_sec); +- stime(&server_time); ++ (long)server_time.tv_sec-now.tv_sec); ++ clock_settime(CLOCK_REALTIME,&server_time); + if (atlas_id) + { + printf( + "RESULT %s ongoing %ld httppost setting time, local %ld, remote %ld\n", + atlas_id, (long)time(NULL), + (long)now.tv_sec, +- (long)server_time); ++ (long)server_time.tv_sec); + } + } + else if (need_set_time) + { + fprintf(stderr, + "not setting time, time difference is %ld\n", +- (long)server_time-now.tv_sec); ++ (long)server_time.tv_sec-now.tv_sec); + if (atlas_id) + { + printf( + "RESULT %s ongoing %ld httppost not in sync, local %ld, remote %ld\n", + atlas_id, (long)time(NULL), + (long)now.tv_sec, +- (long)server_time); ++ (long)server_time.tv_sec); + } + } + else if (rtt <= 1)