atlas-probe: add new package
authorJan Pavlinec <redacted>
Fri, 26 Mar 2021 11:58:59 +0000 (12:58 +0100)
committerJan Pavlinec <redacted>
Fri, 9 Apr 2021 13:21:32 +0000 (15:21 +0200)
Signed-off-by: Jan Pavlinec <redacted>
net/atlas-probe/Makefile [new file with mode: 0644]
net/atlas-probe/patches/001-fix-stime-glibc-remove.patch [new file with mode: 0644]

diff --git a/net/atlas-probe/Makefile b/net/atlas-probe/Makefile
new file mode 100644 (file)
index 0000000..eafebcd
--- /dev/null
@@ -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 <jan.pavlinec@nic.cz>
+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 (file)
index 0000000..8c41019
--- /dev/null
@@ -0,0 +1,178 @@
+From 402150eed057fc9fa52c8471ae645e23913a2805 Mon Sep 17 00:00:00 2001
+From: Philip Homburg <phomburg@ripe.net>
+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(&current_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)
git clone https://git.99rst.org/PROJECT