Compare commits

...

No commits in common. 'c9' and 'i10c-beta' have entirely different histories.

@ -1 +1 @@
d6c3ec1db4904cae5cf096891045b619cbfec629 SOURCES/chkconfig-1.24.tar.gz
ea6b0183c810cf4e28503016b835784a4a245a19 SOURCES/chkconfig-1.30.tar.gz

2
.gitignore vendored

@ -1 +1 @@
SOURCES/chkconfig-1.24.tar.gz
SOURCES/chkconfig-1.30.tar.gz

@ -1,132 +0,0 @@
From 5352ca18294178c61c317ab9783c2183dc22aad1 Mon Sep 17 00:00:00 2001
From: Valentin Rothberg <vrothberg@redhat.com>
Date: Wed, 24 Jul 2024 11:07:41 +0200
Subject: [PATCH] ostree: move admindir to /etc/alternatives.admindir
`ostree container commit` wipes /var and thereby erases the data in
/var/lib/alternatives; the directory used to store configs/symlinks of
alternatives.
/var is not a good place for storing such configs since it won't receive
updates on bootc images either. We need to move to another location.
Hence, use /etc/alternatives.admindir when running on an ostree-based
system unless /var/lib/alternatives is already present; a user may have
worked around the problem. This way we enable alternatives to work on
ostree-based systems without breaking backwards compat.
Fixes: #9
Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
(cherry picked from commit 4224f51d0212318dd0fada3976e205e8189cf4b4)
---
Makefile | 1 -
alternatives.8 | 2 ++
alternatives.c | 34 ++++++++++++++++++++++++++++++----
chkconfig.spec | 5 +++--
4 files changed, 35 insertions(+), 7 deletions(-)
diff --git a/Makefile b/Makefile
index 0e7abd8..ea1d8dc 100644
--- a/Makefile
+++ b/Makefile
@@ -55,7 +55,6 @@ install:
[ -d $(DESTDIR)/$(SBINDIR) ] || mkdir -p $(DESTDIR)/$(SBINDIR)
[ -d $(DESTDIR)/$(MANDIR) ] || mkdir -p $(DESTDIR)/$(MANDIR)
[ -d $(DESTDIR)/$(MANDIR)/man8 ] || mkdir -p $(DESTDIR)/$(MANDIR)/man8
- [ -d $(DESTDIR)/$(ALTDIR) ] || mkdir -p -m 755 $(DESTDIR)/$(ALTDIR)
[ -d $(DESTDIR)/$(ALTDATADIR) ] || mkdir -p -m 755 $(DESTDIR)/$(ALTDATADIR)
[ -d $(DESTDIR)/$(SYSTEMDUTILDIR) ] || mkdir -p -m 755 $(DESTDIR)/$(SYSTEMDUTILDIR)
diff --git a/alternatives.8 b/alternatives.8
index d3bbf6b..a04785e 100644
--- a/alternatives.8
+++ b/alternatives.8
@@ -214,6 +214,7 @@ A directory, by default
containing
.BR alternatives '
state information.
+/etc/alternatives.admindir on OSTree-based systems.
.TP
link group
A set of related symlinks, intended to be updated as a group.
@@ -416,6 +417,7 @@ option.
.TP
.I /var/lib/alternatives/
The default administration directory.
+/etc/alternatives.admindir on OSTree-based systems.
Can be overridden by the
.B --admindir
option.
diff --git a/alternatives.c b/alternatives.c
index a2d3750..5ba6c87 100644
--- a/alternatives.c
+++ b/alternatives.c
@@ -496,6 +496,15 @@ static int fileExists(char *path) {
return !stat(path, &sbuf);
}
+static int dirExists(char *path) {
+ struct stat sbuf;
+
+ if (stat(path, &sbuf))
+ return 0;
+
+ return !!S_ISDIR(sbuf.st_mode);
+}
+
static int facilityBelongsToUs(char *facility, const char *altDir) {
char buf[PATH_MAX];
if (readlink(facility, buf, sizeof(buf)) <= 0)
@@ -1248,6 +1257,10 @@ static int listServices(const char *altDir, const char *stateDir, int flags) {
return 0;
}
+static int isOSTree() {
+ return fileExists("/run/ostree-booted") || isLink("/ostree");
+}
+
int main(int argc, const char **argv) {
const char **nextArg;
char *end;
@@ -1256,8 +1269,7 @@ int main(int argc, const char **argv) {
struct alternative newAlt = {-1, {NULL, NULL, NULL}, NULL, NULL, 0, NULL};
int flags = 0;
char *altDir = "/etc/alternatives";
- char *stateDir = "/var/lib/alternatives";
- struct stat sb;
+ char *stateDir= NULL;
struct linkSet newSet = {NULL, NULL, NULL};
setlocale(LC_ALL, "");
@@ -1379,12 +1391,26 @@ int main(int argc, const char **argv) {
}
}
- if (stat(altDir, &sb) || !S_ISDIR(sb.st_mode) || access(altDir, F_OK)) {
+ if (!dirExists(altDir)) {
fprintf(stderr, _("altdir %s invalid\n"), altDir);
return (2);
}
- if (stat(stateDir, &sb) || !S_ISDIR(sb.st_mode) || access(stateDir, F_OK)) {
+ // if the stateDir is not explicitly set, we will use /var/lib/alternatives on normal systems
+ // and /etc/alternatives-admindir on OSTree systems, if the dir does not exist, we will create it
+ // if the stateDir is explicitly set, we will *not* try to create the dir and fail immediately if it does not exist
+ if (!stateDir) {
+ stateDir = "/var/lib/alternatives";
+ if (!dirExists(stateDir)) {
+ if (isOSTree())
+ stateDir = "/etc/alternatives-admindir";
+
+ if (mkdir(stateDir, 0755) < 0 && errno != EEXIST) {
+ fprintf(stderr, _("failed to create admindir: %s\n"), strerror(errno));
+ exit(2);
+ }
+ }
+ } else if (!dirExists(stateDir)) {
fprintf(stderr, _("admindir %s invalid\n"), stateDir);
return (2);
}
--
2.46.0

@ -1,14 +1,17 @@
Summary: A system tool for maintaining the /etc/rc*.d hierarchy
Name: chkconfig
Version: 1.24
Release: 1%{?dist}.1
Version: 1.30
Release: 1%{?dist}
License: GPL-2.0-only
URL: https://github.com/fedora-sysv/chkconfig
Source: https://github.com/fedora-sysv/chkconfig/archive/%{version}.tar.gz#/%{name}-%{version}.tar.gz
Patch001: 001-ostree-move-admindir-to-etc-alternatives.admindir.patch
BuildRequires: gcc gettext libselinux-devel make newt-devel popt-devel pkgconfig(systemd)
# beakerlib might not be available on CentOS Stream any more
%if 0%{?fedora}
BuildRequires: beakerlib
%endif
BuildRequires: newt-devel gettext popt-devel libselinux-devel beakerlib gcc systemd-devel make
Conflicts: initscripts <= 5.30-1
Provides: /sbin/chkconfig
@ -32,6 +35,11 @@ page), ntsysv configures the current runlevel (5 if you're using X).
%package -n alternatives
Summary: A tool to maintain symbolic links determining default commands
%if "%{_sbindir}" == "%{_bindir}"
Provides: /usr/sbin/alternatives
Provides: /usr/sbin/update-alternatives
Requires: filesystem(unmerged-sbin-symlinks)
%endif
%description -n alternatives
alternatives creates, removes, maintains and displays information about the
@ -40,13 +48,16 @@ programs fulfilling the same or similar functions to be installed on a single
system at the same time.
%prep
%autosetup
%setup -q
%build
%make_build RPM_OPT_FLAGS="$RPM_OPT_FLAGS" LDFLAGS="$RPM_LD_FLAGS"
# tests are executed using tmt and tf on CentOS Stream and RHEL
%if 0%{?fedora}
%check
make check
%endif
%install
rm -rf $RPM_BUILD_ROOT
@ -92,8 +103,88 @@ mkdir -p $RPM_BUILD_ROOT/etc/chkconfig.d
%{_mandir}/*/alternatives*
%changelog
* Wed Sep 04 2024 Jan Macku <jamacku@redhat.com> - 1.24-1.1
- ostree: move admindir to /etc/alternatives.admindir (RHEL-53997)
* Tue Nov 26 2024 MSVSphere Packaging Team <packager@msvsphere-os.ru> - 1.30-1
- Rebuilt for MSVSphere 10
* Wed Aug 07 2024 Jan Macku <jamacku@redhat.com> - 1.30-1
- ostree: move admindir to /etc/alternatives.admindir
- update po/chkconfig.pot
* Tue Jul 30 2024 Jan Macku <jamacku@redhat.com> - 1.29-1
- add basic mkosi config
- remove not used directory from makefile
- ntsysv: fix leaks
- leveldb: security_context_t is deprecated
- leveldb: fix leak
- leveldb: fix leak
- leveldb: fix leak
- leveldb: fix leak
- leveldb: fix leak
- chkconfig: fix leak
- chkconfig: fix leak
- chkconfig: fix memory leak when deleting a service
- leveldb: add destructors for service
- leveldb: fix memory leak
- leveldb.c: fix memory leak
- chkconfig: fix leak
- leveldb: fix memory leak
- alternatives: ensure the current alt. is freed if parsing fails
- alternatives: ensure the current group is freed
- Translated using Weblate (English (United Kingdom))
- Translated using Weblate (Turkish)
* Fri Jun 21 2024 Jan Macku <jamacku@redhat.com> - 1.28-1
- Prepare for bin-sbin merge
- tests: fix integration with github actions
* Tue May 14 2024 Jan Macku <jamacku@redhat.com> - 1.27-1
- alternatives: properly handle chars with const in normalize_path
- alternatives: use exit in main instead of return for critical failures
- alternatives: fix leak
- alternatives: fix leak
- alternatives: fix possible overrun
- alternatives: fix all the leaks of groups in readConfig
- alternatives: fix all the leaks of read line in readConfig
- alternatives: fix leak
- alternatives: fix memory leak
- alternatives: fix memory leak
- alternatives: initialize parameters in main to NULL
- alternatives: fix memory leak
- Translated using Weblate (Korean)
- Translated using Weblate (English (United Kingdom))
- Translated using Weblate (Finnish)
- Translated using Weblate (Finnish)
- Translated using Weblate (Japanese)
- Translated using Weblate (Swedish)
- Translated using Weblate (Japanese)
- Translated using Weblate (Polish)
- Translated using Weblate (Korean)
- Translated using Weblate (Georgian)
- Update translation files
- Translated using Weblate (Japanese)
- Fix systemd dependency
* Wed Jan 17 2024 Jan Macku <jamacku@redhat.com> - 1.26-1
- fix(test): dot't call `basename` with empty string
- spec: sort BuildRequires alphabetically
- fix(test): remove dangling `rlPhase` fn call
- ci: run tests using Packit and Testing Farm
- build: update `.pot` file
- ci: fix typo in test workflow
- test: add support for running using tmt
- Translated using Weblate (Czech)
- Translated using Weblate (Punjabi)
- build(deps): bump actions/upload-artifact from 3 to 4
- build(deps): bump github/codeql-action from 2 to 3
- leveldb: fix systemdActive()
- build(deps): bump redhat-plumbers-in-action/differential-shellcheck
- Translated using Weblate (Hungarian)
- build(deps): bump actions/checkout from 3 to 4
* Wed Aug 02 2023 Jan Macku <jamacku@redhat.com> - 1.25-1
- alternatives: fix possible buffer overrun
- Translated using Weblate (Korean)
- Translated using Weblate (Chinese (Simplified) (zh_CN))
* Thu May 04 2023 Jan Macku <jamacku@redhat.com> - 1.24-1
- ci: fix `NEXT_VERSION` in Makefile

Loading…
Cancel
Save