From 8fab75241c59ba821ddd0429fad69fe4045e0313 Mon Sep 17 00:00:00 2001 From: Nick Peng Date: Sat, 29 Apr 2023 00:21:40 +0800 Subject: [PATCH] smartdns: change pid file path from /var/run to /run --- Dockerfile | 2 +- Makefile | 2 +- etc/init.d/smartdns | 5 ++++- package/openwrt/files/etc/init.d/smartdns | 6 +++++- package/optware/S50smartdns | 5 ++++- src/smartdns.c | 11 +++++++++-- 6 files changed, 24 insertions(+), 7 deletions(-) diff --git a/Dockerfile b/Dockerfile index 831cc3b..ae06045 100644 --- a/Dockerfile +++ b/Dockerfile @@ -32,7 +32,7 @@ RUN cd /build/smartdns && \ \ ( cd package && tar -xvf *.tar.gz && chmod a+x smartdns/etc/init.d/smartdns ) && \ \ - mkdir -p /release/var/log /release/var/run && \ + mkdir -p /release/var/log /release/run && \ cp package/smartdns/etc /release/ -a && \ cp package/smartdns/usr /release/ -a && \ cd / && rm -rf /build diff --git a/Makefile b/Makefile index 3354baf..4d3dab0 100644 --- a/Makefile +++ b/Makefile @@ -18,7 +18,7 @@ DESTDIR := PREFIX := /usr SBINDIR := $(PREFIX)/sbin SYSCONFDIR := /etc -RUNSTATEDIR := /var/run +RUNSTATEDIR := /run SYSTEMDSYSTEMUNITDIR := $(shell ${PKG_CONFIG} --variable=systemdsystemunitdir systemd) SMARTDNS_SYSTEMD = systemd/smartdns.service diff --git a/etc/init.d/smartdns b/etc/init.d/smartdns index f0f1cf7..c42221a 100644 --- a/etc/init.d/smartdns +++ b/etc/init.d/smartdns @@ -28,7 +28,10 @@ PATH=/sbin:/bin:/usr/sbin:/usr/bin . /etc/default/smartdns SMARTDNS=/usr/sbin/smartdns -PIDFILE=/var/run/smartdns.pid +PIDFILE=/run/smartdns.pid +if [ ! -d "/run" ]; then + PIDFILE=/var/run/smartdns.pid +fi test -x $SMARTDNS || exit 5 diff --git a/package/openwrt/files/etc/init.d/smartdns b/package/openwrt/files/etc/init.d/smartdns index a2d81a1..32ee49d 100644 --- a/package/openwrt/files/etc/init.d/smartdns +++ b/package/openwrt/files/etc/init.d/smartdns @@ -22,7 +22,11 @@ USE_PROCD=1 SERVICE_USE_PID=1 SERVICE_WRITE_PID=1 SERVICE_DAEMONIZE=1 -SERVICE_PID_FILE="/var/run/smartdns.pid" +SERVICE_PID_FILE="/run/smartdns.pid" +if [ ! -d "/run" ]; then + SERVICE_PID_FILE="/var/run/smartdns.pid" +fi + SMARTDNS_CONF_DIR="/etc/smartdns" SMARTDNS_CONF_DOWNLOAD_DIR="$SMARTDNS_CONF_DIR/conf.d" SMARTDNS_DOMAIN_LIST_DOWNLOAD_DIR="$SMARTDNS_CONF_DIR/domain-set" diff --git a/package/optware/S50smartdns b/package/optware/S50smartdns index b3d7274..51ed987 100644 --- a/package/optware/S50smartdns +++ b/package/optware/S50smartdns @@ -18,7 +18,10 @@ SMARTDNS_BIN=/opt/usr/sbin/smartdns SMARTDNS_CONF=/opt/etc/smartdns/smartdns.conf DNSMASQ_CONF="/etc/dnsmasq.conf /var/etc/dnsmasq.conf /etc/storage/dnsmasq/dnsmasq.conf" -SMARTDNS_PID=/var/run/smartdns.pid +SMARTDNS_PID=/run/smartdns.pid +if [ ! -d "/run" ]; then + SMARTDNS_PID=/var/run/smartdns.pid +fi SMARTDNS_PORT=535 SMARTDNS_OPT=/opt/etc/smartdns/smartdns-opt.conf # workmode diff --git a/src/smartdns.c b/src/smartdns.c index b52efda..506ae4a 100644 --- a/src/smartdns.c +++ b/src/smartdns.c @@ -47,7 +47,8 @@ #include #define MAX_KEY_LEN 64 -#define SMARTDNS_PID_FILE "/var/run/smartdns.pid" +#define SMARTDNS_PID_FILE "/run/smartdns.pid" +#define SMARTDNS_LEGACY_PID_FILE "/var/run/smartdns.pid" #define TMP_BUFF_LEN_32 32 static int verbose_screen; @@ -696,9 +697,15 @@ int main(int argc, char *argv[]) char pid_file[MAX_LINE_LEN]; int signal_ignore = 0; sigset_t empty_sigblock; + struct stat sb; safe_strncpy(config_file, SMARTDNS_CONF_FILE, MAX_LINE_LEN); - safe_strncpy(pid_file, SMARTDNS_PID_FILE, MAX_LINE_LEN); + + if (stat("/run", &sb) == 0 && S_ISDIR(sb.st_mode)) { + safe_strncpy(pid_file, SMARTDNS_PID_FILE, MAX_LINE_LEN); + } else { + safe_strncpy(pid_file, SMARTDNS_LEGACY_PID_FILE, MAX_LINE_LEN); + } /* patch for Asus router: unblock all signal*/ sigemptyset(&empty_sigblock);