commit 28530ca2dc48d63aaaddd1ba0f53d1df12d3ddf5 Author: MSVSphere Packaging Team Date: Fri Mar 29 16:29:26 2024 +0300 import sanlock-3.8.4-5.el8 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..61fde41 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/sanlock-3.8.4.tar.gz diff --git a/.sanlock.metadata b/.sanlock.metadata new file mode 100644 index 0000000..b069991 --- /dev/null +++ b/.sanlock.metadata @@ -0,0 +1 @@ +494d5efc260b643ed9a3ee6bbdb0d31ecb14c201 SOURCES/sanlock-3.8.4.tar.gz diff --git a/SOURCES/0001-sanlock-fix-memory-leak-of-lockspace-renewal_history.patch b/SOURCES/0001-sanlock-fix-memory-leak-of-lockspace-renewal_history.patch new file mode 100644 index 0000000..fffb9e2 --- /dev/null +++ b/SOURCES/0001-sanlock-fix-memory-leak-of-lockspace-renewal_history.patch @@ -0,0 +1,30 @@ +From e82899fd996f4901e1ec89d77e4a17a1032fee8f Mon Sep 17 00:00:00 2001 +From: David Teigland +Date: Thu, 3 Mar 2022 09:39:52 -0600 +Subject: [PATCH 1/4] sanlock: fix memory leak of lockspace renewal_history + +Leak was in original commit for "sanlock: renewal history" +6313c709722b3ba63234a75d1651a160bf1728ee. + +With the default renewal history size, each lockspace that +was created would leak about 4kb of memory. +--- + src/lockspace.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/lockspace.c b/src/lockspace.c +index 2ebc247dce41..d23dccd84815 100644 +--- a/src/lockspace.c ++++ b/src/lockspace.c +@@ -939,6 +939,8 @@ static void free_sp(struct space *sp) + { + if (sp->lease_status.renewal_read_buf) + free(sp->lease_status.renewal_read_buf); ++ if (sp->renewal_history) ++ free(sp->renewal_history); + free(sp); + } + +-- +2.7.5 + diff --git a/SOURCES/0002-sanlock-fix-pthread_create-error-check.patch b/SOURCES/0002-sanlock-fix-pthread_create-error-check.patch new file mode 100644 index 0000000..5809dc7 --- /dev/null +++ b/SOURCES/0002-sanlock-fix-pthread_create-error-check.patch @@ -0,0 +1,51 @@ +From e44c47c48a3a71502deacbafda851cb6d93e78c8 Mon Sep 17 00:00:00 2001 +From: David Teigland +Date: Wed, 9 Mar 2022 15:25:11 -0600 +Subject: [PATCH 2/4] sanlock: fix pthread_create error check + +for non-zero rather than less than zero +--- + src/lockspace.c | 4 ++-- + src/main.c | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/src/lockspace.c b/src/lockspace.c +index d23dccd84815..582a0e973566 100644 +--- a/src/lockspace.c ++++ b/src/lockspace.c +@@ -1070,8 +1070,8 @@ int add_lockspace_start(struct sanlk_lockspace *ls, uint32_t io_timeout, struct + (unsigned long long)sp->host_id_disk.offset); + + rv = pthread_create(&sp->thread, NULL, lockspace_thread, sp); +- if (rv < 0) { +- log_erros(sp, "add_lockspace create thread failed"); ++ if (rv) { ++ log_erros(sp, "add_lockspace create thread failed %d", rv); + goto fail_del; + } + +diff --git a/src/main.c b/src/main.c +index 5b6fabc6d0b8..613fb0ee23d5 100644 +--- a/src/main.c ++++ b/src/main.c +@@ -995,7 +995,7 @@ static int thread_pool_add_work(struct cmd_args *ca) + if (!pool.free_workers && pool.num_workers < pool.max_workers) { + rv = pthread_create(&th, NULL, thread_pool_worker, + (void *)(long)pool.num_workers); +- if (rv < 0) { ++ if (rv) { + log_error("thread_pool_add_work ci %d error %d", ca->ci_in, rv); + list_del(&ca->list); + pthread_mutex_unlock(&pool.mutex); +@@ -1035,7 +1035,7 @@ static int thread_pool_create(int min_workers, int max_workers) + for (i = 0; i < min_workers; i++) { + rv = pthread_create(&th, NULL, thread_pool_worker, + (void *)(long)i); +- if (rv < 0) ++ if (rv) + break; + pool.num_workers++; + } +-- +2.7.5 + diff --git a/SOURCES/0003-Revert-sanlock-Shrink-thread-pool-when-there-is-no-w.patch b/SOURCES/0003-Revert-sanlock-Shrink-thread-pool-when-there-is-no-w.patch new file mode 100644 index 0000000..f07cdcf --- /dev/null +++ b/SOURCES/0003-Revert-sanlock-Shrink-thread-pool-when-there-is-no-w.patch @@ -0,0 +1,42 @@ +From 4ed90cfb2462d3463ae74935c5eeb9d9588ea098 Mon Sep 17 00:00:00 2001 +From: David Teigland +Date: Thu, 17 Mar 2022 13:41:31 -0500 +Subject: [PATCH 3/4] Revert "sanlock: Shrink thread pool when there is no + work" + +This reverts commit 0ff9c1ab8852bec846822ee2af55ebcb7e5f5967. + +This patch causes unexplained growth in memory usage. +Part of the problem may be that the worker threads are +not joined and the detached state is not set, but an +initial test setting the detached state didn't seem +to fix the problem. +--- + src/main.c | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git a/src/main.c b/src/main.c +index 613fb0ee23d5..b447b723a490 100644 +--- a/src/main.c ++++ b/src/main.c +@@ -946,9 +946,6 @@ static void *thread_pool_worker(void *data) + + while (1) { + while (!pool.quit && list_empty(&pool.work_data)) { +- if (pool.free_workers >= DEFAULT_MIN_WORKER_THREADS) +- goto out; +- + pool.free_workers++; + pthread_cond_wait(&pool.cond, &pool.mutex); + pool.free_workers--; +@@ -969,7 +966,6 @@ static void *thread_pool_worker(void *data) + break; + } + +-out: + pool.num_workers--; + if (!pool.num_workers) + pthread_cond_signal(&pool.quit_wait); +-- +2.7.5 + diff --git a/SOURCES/0004-sanlock-fix-pthread_create-error-paths.patch b/SOURCES/0004-sanlock-fix-pthread_create-error-paths.patch new file mode 100644 index 0000000..1b8fcd3 --- /dev/null +++ b/SOURCES/0004-sanlock-fix-pthread_create-error-paths.patch @@ -0,0 +1,63 @@ +From 574d3cc3ecccd1e8a6c1a8a861dd4847a05789f5 Mon Sep 17 00:00:00 2001 +From: David Teigland +Date: Fri, 18 Mar 2022 09:32:06 -0500 +Subject: [PATCH 4/4] sanlock: fix pthread_create error paths + +The fix for pthread_create errors in commit + 5abb9d50616d399914958b99352b8cf016e4928a + sanlock: fix pthread_create error check +missed error handling further in the exit path. +--- + src/lockspace.c | 1 + + src/main.c | 8 ++++++-- + 2 files changed, 7 insertions(+), 2 deletions(-) + +diff --git a/src/lockspace.c b/src/lockspace.c +index 582a0e973566..d9b79f6de257 100644 +--- a/src/lockspace.c ++++ b/src/lockspace.c +@@ -1072,6 +1072,7 @@ int add_lockspace_start(struct sanlk_lockspace *ls, uint32_t io_timeout, struct + rv = pthread_create(&sp->thread, NULL, lockspace_thread, sp); + if (rv) { + log_erros(sp, "add_lockspace create thread failed %d", rv); ++ rv = -1; + goto fail_del; + } + +diff --git a/src/main.c b/src/main.c +index b447b723a490..5a0f9ba677ff 100644 +--- a/src/main.c ++++ b/src/main.c +@@ -995,6 +995,7 @@ static int thread_pool_add_work(struct cmd_args *ca) + log_error("thread_pool_add_work ci %d error %d", ca->ci_in, rv); + list_del(&ca->list); + pthread_mutex_unlock(&pool.mutex); ++ rv = -1; + return rv; + } + pool.num_workers++; +@@ -1019,7 +1020,7 @@ static void thread_pool_free(void) + static int thread_pool_create(int min_workers, int max_workers) + { + pthread_t th; +- int i, rv; ++ int i, rv = 0; + + memset(&pool, 0, sizeof(pool)); + INIT_LIST_HEAD(&pool.work_data); +@@ -1031,8 +1032,11 @@ static int thread_pool_create(int min_workers, int max_workers) + for (i = 0; i < min_workers; i++) { + rv = pthread_create(&th, NULL, thread_pool_worker, + (void *)(long)i); +- if (rv) ++ if (rv) { ++ log_error("thread_pool_create failed %d", rv); ++ rv = -1; + break; ++ } + pool.num_workers++; + } + +-- +2.7.5 + diff --git a/SOURCES/0005-wdmd-adjust-values-for-iTCO_wdt.patch b/SOURCES/0005-wdmd-adjust-values-for-iTCO_wdt.patch new file mode 100644 index 0000000..2e293ab --- /dev/null +++ b/SOURCES/0005-wdmd-adjust-values-for-iTCO_wdt.patch @@ -0,0 +1,308 @@ +From acc0021a9490ae4964c08a6839308efa2709f926 Mon Sep 17 00:00:00 2001 +From: David Teigland +Date: Tue, 16 Jan 2024 11:01:01 -0600 +Subject: [PATCH] wdmd: adjust values for iTCO_wdt + +iTCO_wdt does not fire until two successive timeouts, so the +values for set/get need to be adjusted by a factor or 2 to +make the watchdog fire at the correct time. +--- + wdmd/main.c | 162 ++++++++++++++++++++++++++++++++++++++++++++-------- + 1 file changed, 139 insertions(+), 23 deletions(-) + +diff --git a/wdmd/main.c b/wdmd/main.c +index aebacbea1ead..de54e6ddcdf1 100644 +--- a/wdmd/main.c ++++ b/wdmd/main.c +@@ -31,6 +31,7 @@ + #include + #include + #include ++#include + #include + #include + +@@ -55,6 +56,7 @@ + #define DEFAULT_SOCKET_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP) + + #define WDPATH_SIZE 64 ++#define WD_ID_SIZE 64 + + static int test_interval = DEFAULT_TEST_INTERVAL; + static int fire_timeout = DEFAULT_FIRE_TIMEOUT; +@@ -68,6 +70,8 @@ static time_t last_closeunclean; + static char lockfile_path[PATH_MAX]; + static int dev_fd = -1; + static int shm_fd; ++static int forcefire; ++static int itco; /* watchdog_identity is "iTCO_wdt" */ + + static int allow_scripts; + static int kill_script_sec; +@@ -75,6 +79,7 @@ static const char *scripts_dir = "/etc/wdmd.d"; + static char watchdog_path[WDPATH_SIZE]; + static char option_path[WDPATH_SIZE]; + static char saved_path[WDPATH_SIZE]; ++static char watchdog_identity[WD_ID_SIZE]; + + struct script_status { + uint64_t start; +@@ -141,6 +146,19 @@ static uint64_t monotime(void) + return ts.tv_sec; + } + ++char time_str_buf[128]; ++ ++static char *time_str(void) ++{ ++ struct timeval cur_time; ++ struct tm time_info; ++ ++ gettimeofday(&cur_time, NULL); ++ localtime_r(&cur_time.tv_sec, &time_info); ++ strftime(time_str_buf, sizeof(time_str_buf), "%Y-%m-%d %H:%M:%S ", &time_info); ++ return time_str_buf; ++} ++ + /* + * test clients + */ +@@ -979,6 +997,49 @@ static void close_watchdog(void) + dev_fd = -1; + } + ++static int setup_identity(char *wdpath) ++{ ++ char sysfs_path[PATH_MAX] = { 0 }; ++ char *base, *p; ++ int fd, rv; ++ ++ /* ++ * This function will be called multiple times when probing ++ * different watchdog paths for one that works. ++ */ ++ itco = 0; ++ memset(watchdog_identity, 0, sizeof(watchdog_identity)); ++ ++ /* ++ * $ cat /sys/class/watchdog/watchdog0/identity ++ * iTCO_wdt ++ */ ++ if (!(base = basename(wdpath))) ++ return -1; ++ ++ snprintf(sysfs_path, PATH_MAX-1, "/sys/class/watchdog/%s/identity", base); ++ ++ if ((fd = open(sysfs_path, O_RDONLY)) < 0) ++ return -1; ++ ++ rv = read(fd, watchdog_identity, WD_ID_SIZE-1); ++ ++ close(fd); ++ ++ if (rv <= 0) ++ return -1; ++ ++ if ((p = strchr(watchdog_identity, '\n'))) ++ *p = '\0'; ++ ++ log_debug("%s %s %s", wdpath, sysfs_path, watchdog_identity); ++ ++ if (!strcmp(watchdog_identity, "iTCO_wdt")) ++ itco = 1; ++ ++ return 0; ++} ++ + static int _setup_watchdog(char *path) + { + struct stat buf; +@@ -991,6 +1052,8 @@ static int _setup_watchdog(char *path) + if (rv < 0) + return -1; + ++ setup_identity(path); /* Sets watchdog_identity and itco */ ++ + rv = open_dev(); + if (rv < 0) + return -1; +@@ -1004,10 +1067,15 @@ static int _setup_watchdog(char *path) + return -1; + } + +- if (timeout == fire_timeout) +- goto out; +- +- timeout = fire_timeout; ++ if (itco) { ++ if ((2 * timeout) == fire_timeout) ++ goto out; ++ timeout = fire_timeout / 2; ++ } else { ++ if (timeout == fire_timeout) ++ goto out; ++ timeout = fire_timeout; ++ } + + rv = ioctl(dev_fd, WDIOC_SETTIMEOUT, &timeout); + if (rv < 0) { +@@ -1016,13 +1084,20 @@ static int _setup_watchdog(char *path) + return -1; + } + +- if (timeout != fire_timeout) { +- log_error("%s failed to set new timeout", watchdog_path); +- close_watchdog(); +- return -1; ++ if (itco) { ++ if ((2 * timeout) != fire_timeout) { ++ log_error("%s failed to set new timeout", watchdog_path); ++ close_watchdog(); ++ return -1; ++ } ++ } else { ++ if (timeout != fire_timeout) { ++ log_error("%s failed to set new timeout", watchdog_path); ++ close_watchdog(); ++ return -1; ++ } + } + out: +- log_error("%s armed with fire_timeout %d", watchdog_path, fire_timeout); + + /* TODO: save watchdog_path in /run/wdmd/saved_path, + * and in startup read that file, copying it to saved_path */ +@@ -1102,6 +1177,8 @@ static int probe_dev(const char *path) + return -1; + } + ++ setup_identity((char *)path); /* Sets watchdog_identity and itco */ ++ + fd = open(path, O_WRONLY | O_CLOEXEC); + if (fd < 0) { + fprintf(stderr, "error %d open %s\n", errno, path); +@@ -1117,14 +1194,22 @@ static int probe_dev(const char *path) + goto out; + } + +- if (timeout == fire_timeout) { +- printf("%s\n", path); +- rv = 0; +- goto out; ++ if (itco) { ++ if ((2 * timeout) == fire_timeout) { ++ printf("%s\n", path); ++ rv = 0; ++ goto out; ++ } ++ timeout = fire_timeout / 2; ++ } else { ++ if (timeout == fire_timeout) { ++ printf("%s\n", path); ++ rv = 0; ++ goto out; ++ } ++ timeout = fire_timeout; + } + +- timeout = fire_timeout; +- + rv = ioctl(fd, WDIOC_SETTIMEOUT, &timeout); + if (rv < 0) { + fprintf(stderr, "error %d ioctl settimeout %s\n", errno, path); +@@ -1132,10 +1217,18 @@ static int probe_dev(const char *path) + goto out; + } + +- if (timeout != fire_timeout) { +- fprintf(stderr, "error %d invalid timeout %s\n", errno, path); +- rv = -1; +- goto out; ++ if (itco) { ++ if ((2 * timeout) != fire_timeout) { ++ fprintf(stderr, "error %d invalid timeout %s\n", errno, path); ++ rv = -1; ++ goto out; ++ } ++ } else { ++ if (timeout != fire_timeout) { ++ fprintf(stderr, "error %d invalid timeout %s\n", errno, path); ++ rv = -1; ++ goto out; ++ } + } + + printf("%s\n", path); +@@ -1518,6 +1611,7 @@ static void print_usage_and_exit(int status) + printf("--dump, -d print debug from daemon\n"); + printf("--probe, -p print path of functional watchdog device\n"); + printf("-D debug: no fork and print all logging to stderr\n"); ++ printf("-F force watchdog reset for testing (use with -D)\n"); + printf("-H 0|1 use high priority features (1 yes, 0 no, default %d)\n", + DEFAULT_HIGH_PRIORITY); + printf("-G group ownership for the socket\n"); +@@ -1556,11 +1650,12 @@ int main(int argc, char *argv[]) + {"help", no_argument, 0, 'h' }, + {"probe", no_argument, 0, 'p' }, + {"dump", no_argument, 0, 'd' }, ++ {"forcefire", no_argument, 0, 'F' }, + {"version", no_argument, 0, 'V' }, + {0, 0, 0, 0 } + }; + +- c = getopt_long(argc, argv, "hpdVDH:G:S:s:k:w:", ++ c = getopt_long(argc, argv, "hpdVDFH:G:S:s:k:w:", + long_options, &option_index); + if (c == -1) + break; +@@ -1581,6 +1676,9 @@ int main(int argc, char *argv[]) + case 'D': + daemon_debug = 1; + break; ++ case 'F': ++ forcefire = 1; ++ break; + case 'G': + socket_gname = strdup(optarg); + break; +@@ -1633,9 +1731,6 @@ int main(int argc, char *argv[]) + + openlog("wdmd", LOG_CONS | LOG_PID, LOG_DAEMON); + +- log_error("wdmd started S%d H%d G%d", allow_scripts, high_priority, +- socket_gid); +- + setup_priority(); + + rv = lockfile(); +@@ -1666,6 +1761,27 @@ int main(int argc, char *argv[]) + if (rv < 0) + goto out_clients; + ++ log_error("wdmd started S%d H%d G%d using %s \"%s\"", allow_scripts, high_priority, ++ socket_gid, watchdog_path, watchdog_identity[0] ? watchdog_identity : "unknown"); ++ log_error("%s armed with fire_timeout %d", watchdog_path, fire_timeout); ++ ++ if (daemon_debug && forcefire) { ++ int sleep_sec = 0; ++ int i; ++ setbuf(stdout, NULL); ++ printf("%s waiting for watchdog to reset machine:\n", time_str()); ++ for (i = 1; i < fire_timeout + 5; i++) { ++ sleep(1); ++ sleep_sec++; ++ if (sleep_sec >= fire_timeout+1) ++ printf("%s %d %s failed to fire after timeout %d seconds\n", time_str(), i, watchdog_path, fire_timeout); ++ else ++ printf("%s %d\n", time_str(), i); ++ } ++ close_watchdog(); ++ return -1; ++ } ++ + rv = test_loop(); + + close_watchdog(); +-- +2.43.0 + diff --git a/SPECS/sanlock.spec b/SPECS/sanlock.spec new file mode 100644 index 0000000..f986a40 --- /dev/null +++ b/SPECS/sanlock.spec @@ -0,0 +1,320 @@ +Name: sanlock +Version: 3.8.4 +Release: 5%{?dist} +Summary: A shared storage lock manager + +Group: System Environment/Base +License: GPLv2 and GPLv2+ and LGPLv2+ +URL: https://pagure.io/sanlock/ +BuildRequires: gcc +BuildRequires: libaio-devel +BuildRequires: libblkid-devel +BuildRequires: libuuid-devel +BuildRequires: make +BuildRequires: python3 +BuildRequires: python3-devel +BuildRequires: systemd-units +Requires: %{name}-lib = %{version}-%{release} +Requires(pre): /usr/sbin/groupadd +Requires(pre): /usr/sbin/useradd +Requires(post): systemd-units +Requires(post): systemd-sysv +Requires(preun): systemd-units +Requires(postun): systemd-units +Source0: https://releases.pagure.org/sanlock/%{name}-%{version}.tar.gz + +Patch1: 0001-sanlock-fix-memory-leak-of-lockspace-renewal_history.patch +Patch2: 0002-sanlock-fix-pthread_create-error-check.patch +Patch3: 0003-Revert-sanlock-Shrink-thread-pool-when-there-is-no-w.patch +Patch4: 0004-sanlock-fix-pthread_create-error-paths.patch +Patch5: 0005-wdmd-adjust-values-for-iTCO_wdt.patch + +%global python_package python3-%{name} + +%description +The sanlock daemon manages leases for applications on hosts using shared storage. + +%prep +%setup -q +%patch1 -p1 -b .backup1 +%patch2 -p1 -b .backup2 +%patch3 -p1 -b .backup3 +%patch4 -p1 -b .backup4 +%patch5 -p1 -b .backup5 + +%build +# upstream does not require configure +# upstream does not support _smp_mflags +CFLAGS=$RPM_OPT_FLAGS make -C wdmd +CFLAGS=$RPM_OPT_FLAGS make -C src +CFLAGS=$RPM_OPT_FLAGS make -C python PY_VERSION=3.6 +CFLAGS=$RPM_OPT_FLAGS make -C reset + +%install +rm -rf $RPM_BUILD_ROOT +make -C src \ + install LIBDIR=%{_libdir} \ + DESTDIR=$RPM_BUILD_ROOT +make -C wdmd \ + install LIBDIR=%{_libdir} \ + DESTDIR=$RPM_BUILD_ROOT +make -C python \ + install LIBDIR=%{_libdir} \ + DESTDIR=$RPM_BUILD_ROOT \ + PY_VERSION=3.6 +make -C reset \ + install LIBDIR=%{_libdir} \ + DESTDIR=$RPM_BUILD_ROOT + + +install -D -m 0644 init.d/sanlock.service.native $RPM_BUILD_ROOT/%{_unitdir}/sanlock.service +install -D -m 0755 init.d/wdmd $RPM_BUILD_ROOT/usr/lib/systemd/systemd-wdmd +install -D -m 0644 init.d/wdmd.service.native $RPM_BUILD_ROOT/%{_unitdir}/wdmd.service +install -D -m 0644 init.d/sanlk-resetd.service $RPM_BUILD_ROOT/%{_unitdir}/sanlk-resetd.service + +install -D -m 0644 src/logrotate.sanlock \ + $RPM_BUILD_ROOT/etc/logrotate.d/sanlock + +install -D -m 0644 src/sanlock.conf \ + $RPM_BUILD_ROOT/etc/sanlock/sanlock.conf + +install -D -m 0644 init.d/wdmd.sysconfig \ + $RPM_BUILD_ROOT/etc/sysconfig/wdmd + +install -Dd -m 0755 $RPM_BUILD_ROOT/etc/wdmd.d +install -Dd -m 0775 $RPM_BUILD_ROOT/%{_rundir}/sanlock +install -Dd -m 0775 $RPM_BUILD_ROOT/%{_rundir}/sanlk-resetd + +%pre +getent group sanlock > /dev/null || /usr/sbin/groupadd \ + -g 179 sanlock +getent passwd sanlock > /dev/null || /usr/sbin/useradd \ + -u 179 -c "sanlock" -s /sbin/nologin -r \ + -g 179 -d /run/sanlock sanlock +/usr/sbin/usermod -a -G disk sanlock + +%post +%systemd_post wdmd.service sanlock.service + +%preun +%systemd_preun wdmd.service sanlock.service + +%postun +%systemd_postun wdmd.service sanlock.service + +%files +/usr/lib/systemd/systemd-wdmd +%{_unitdir}/sanlock.service +%{_unitdir}/wdmd.service +%{_sbindir}/sanlock +%{_sbindir}/wdmd +%dir %{_sysconfdir}/wdmd.d +%dir %{_sysconfdir}/sanlock +%dir %attr(-,sanlock,sanlock) %{_rundir}/sanlock +%{_mandir}/man8/wdmd* +%{_mandir}/man8/sanlock* +%config(noreplace) %{_sysconfdir}/logrotate.d/sanlock +%config(noreplace) %{_sysconfdir}/sanlock/sanlock.conf +%config(noreplace) %{_sysconfdir}/sysconfig/wdmd +%doc init.d/sanlock +%doc init.d/sanlock.service +%doc init.d/wdmd.service + +%package lib +Summary: A shared storage lock manager library +Group: System Environment/Libraries + +%description lib +The %{name}-lib package contains the runtime libraries for sanlock, +a shared storage lock manager. +Hosts connected to a common SAN can use this to synchronize their +access to the shared disks. + +%ldconfig_scriptlets lib + +%files lib +%{_libdir}/libsanlock.so.* +%{_libdir}/libsanlock_client.so.* +%{_libdir}/libwdmd.so.* + +%package -n %{python_package} +Summary: Python bindings for the sanlock library +Group: Development/Libraries +Requires: %{name}-lib = %{version}-%{release} + +%description -n %{python_package} +The %{python_package} package contains a module that permits applications +written in the Python programming language to use the interface +supplied by the sanlock library. + +%files -n %{python_package} +%{python3_sitearch}/sanlock_python-*.egg-info +%{python3_sitearch}/sanlock*.so + +%package devel +Summary: Development files for %{name} +Group: Development/Libraries +Requires: %{name}-lib = %{version}-%{release} + +%description devel +The %{name}-devel package contains libraries and header files for +developing applications that use %{name}. + +%files devel +%{_libdir}/libwdmd.so +%{_includedir}/wdmd.h +%{_libdir}/libsanlock.so +%{_libdir}/libsanlock_client.so +%{_includedir}/sanlock.h +%{_includedir}/sanlock_rv.h +%{_includedir}/sanlock_admin.h +%{_includedir}/sanlock_resource.h +%{_includedir}/sanlock_direct.h +%{_libdir}/pkgconfig/libsanlock.pc +%{_libdir}/pkgconfig/libsanlock_client.pc + +%package -n sanlk-reset +Summary: Host reset daemon and client using sanlock +Group: System Environment/Base +Requires: sanlock = %{version}-%{release} +Requires: sanlock-lib = %{version}-%{release} + +%description -n sanlk-reset +The sanlk-reset package contains the reset daemon and client. +A cooperating host running the daemon can be reset by a host +running the client, so long as both maintain access to a +common sanlock lockspace. + +%files -n sanlk-reset +%{_sbindir}/sanlk-reset +%{_sbindir}/sanlk-resetd +%{_unitdir}/sanlk-resetd.service +%dir %attr(-,root,root) %{_rundir}/sanlk-resetd +%{_mandir}/man8/sanlk-reset* + + +%changelog +* Fri Mar 29 2024 MSVSphere Packaging Team - 3.8.4-5 +- Rebuilt for MSVSphere 8.10 beta + +* Tue Jan 30 2024 David Teigland - 3.8.4-5 +- adjust wdmd values for iTCO_wdt watchdog driver + +* Wed Jul 06 2022 David Teigland - 3.8.4-4 +- rebuild with larger release number + +* Fri Mar 18 2022 David Teigland - 3.8.4-2 +- Resolves: rhbz#2058438 + +* Tue Jun 01 2021 David Teigland 3.8.4-1 +- Update to sanlock-3.8.4 + +* Thu May 20 2021 David Teigland 3.8.3-2 +- Fix connection close and add python inquire api + +* Tue Jan 19 2021 David Teigland 3.8.3-1 +- Update to sanlock-3.8.3 + +* Mon Aug 10 2020 David Teigland 3.8.2-1 +- Update to sanlock-3.8.2 + +* Thu Jul 09 2020 David Teigland 3.8.1-1 +- Update to sanlock-3.8.1 + +* Wed Jun 12 2019 Nir Soffer 3.8.0-2 +- kick the gating tests to run + +* Wed Jun 12 2019 Nir Soffer 3.8.0-1 +- Cleanup spec and convert to python3 + +* Thu Dec 06 2018 David Teigland - 3.6.0-5 +- Fix selinux lockfile error + +* Thu Oct 04 2018 David Teigland - 3.6.0-4 +- makefile gcc flags + +* Tue Jun 12 2018 Charalampos Stratakis - 3.6.0-3 +- Conditionalize the python2 subpackage + +* Fri Feb 09 2018 Fedora Release Engineering - 3.6.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Tue Dec 12 2017 David Teigland - 3.6.0-1 +- Update to sanlock-3.6.0, drop fence_sanlock + +* Sun Aug 20 2017 Zbigniew Jędrzejewski-Szmek - 3.5.0-6 +- Add Provides for the old name without %%_isa + +* Sun Aug 20 2017 Zbigniew Jędrzejewski-Szmek - 3.5.0-5 +- Add Provides for the old name without %%_isa + +* Sat Aug 19 2017 Zbigniew Jędrzejewski-Szmek - 3.5.0-4 +- Python 2 binary package renamed to python2-sanlock + See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3 + +* Thu Aug 03 2017 Fedora Release Engineering - 3.5.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Thu Jul 27 2017 Fedora Release Engineering - 3.5.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Mon May 01 2017 David Teigland - 3.5.0-1 +- Update to sanlock-3.5.0 + +* Sat Feb 11 2017 Fedora Release Engineering - 3.4.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Tue Jul 19 2016 Fedora Release Engineering - 3.4.0-2 +- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages + +* Fri Jun 10 2016 David Teigland - 3.4.0-1 +- Update to sanlock-3.4.0 + +* Tue Feb 23 2016 David Teigland - 3.3.0-2 +- remove exclusive arch + +* Mon Feb 22 2016 David Teigland - 3.3.0-1 +- Update to sanlock-3.3.0 + +* Tue Dec 01 2015 David Teigland - 3.2.4-2 +- wdmd: prevent probe while watchdog is used + +* Fri Jun 19 2015 David Teigland - 3.2.4-1 +- Update to sanlock-3.2.4 + +* Fri May 22 2015 David Teigland - 3.2.3-2 +- add pkgconfig files + +* Wed May 20 2015 David Teigland - 3.2.3-1 +- Update to sanlock-3.2.3 + +* Thu Oct 30 2014 David Teigland - 3.2.2-2 +- checksum endian fix + +* Mon Sep 29 2014 David Teigland - 3.2.2-1 +- Update to sanlock-3.2.2 + +* Thu Aug 21 2014 David Teigland - 3.2.1-1 +- Update to sanlock-3.2.1 + +* Mon Aug 18 2014 David Teigland - 3.2.0-1 +- Update to sanlock-3.2.0 + +* Wed Jan 29 2014 David Teigland - 3.1.0-2 +- version interface + +* Tue Jan 07 2014 David Teigland - 3.1.0-1 +- Update to sanlock-3.1.0 + +* Fri Dec 27 2013 Daniel Mach - 3.0.1-3 +- Mass rebuild 2013-12-27 + +* Thu Aug 01 2013 David Teigland - 3.0.1-2 +- use /usr/lib instead of /lib + +* Wed Jul 31 2013 David Teigland - 3.0.1-1 +- Update to sanlock-3.0.1 + +* Wed Jul 24 2013 David Teigland - 3.0.0-1 +- Update to sanlock-3.0.0 +