Compare commits

...

No commits in common. 'c9' and 'c8' have entirely different histories.
c9 ... c8

@ -1 +1 @@
d6c3ec1db4904cae5cf096891045b619cbfec629 SOURCES/chkconfig-1.24.tar.gz
44374e1bde4f7d7db25ac1309ec713d9e1a73039 SOURCES/chkconfig-1.19.2.tar.gz

2
.gitignore vendored

@ -1 +1 @@
SOURCES/chkconfig-1.24.tar.gz
SOURCES/chkconfig-1.19.2.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,22 +1,20 @@
Summary: A system tool for maintaining the /etc/rc*.d hierarchy
Name: chkconfig
Version: 1.24
Release: 1%{?dist}.1
License: GPL-2.0-only
Version: 1.19.2
Release: 1%{?dist}
License: GPLv2
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: newt-devel gettext popt-devel libselinux-devel beakerlib gcc systemd-devel make
Conflicts: initscripts <= 5.30-1
Provides: /sbin/chkconfig
Provides: alternatives = %{version}-%{release}
%description
Chkconfig is a basic system utility. It updates and queries runlevel
information for system services. Chkconfig manipulates the numerous
symbolic links in /etc/rc.d, to relieve system administrators of some
symbolic links in /etc/rc.d, to relieve system administrators of some
of the drudgery of manually editing the symbolic links.
%package -n ntsysv
@ -30,17 +28,8 @@ manipulating the numerous symbolic links in /etc/rc.d). Unless you
specify a runlevel or runlevels on the command line (see the man
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
%description -n alternatives
alternatives creates, removes, maintains and displays information about the
symbolic links comprising the alternatives system. It is possible for several
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"
@ -66,14 +55,20 @@ mkdir -p $RPM_BUILD_ROOT/etc/chkconfig.d
%defattr(-,root,root)
%{!?_licensedir:%global license %%doc}
%license COPYING
%dir /etc/alternatives
%{_sbindir}/chkconfig
%{_sbindir}/update-alternatives
%{_sbindir}/alternatives
%{_sysconfdir}/chkconfig.d
%{_sysconfdir}/init.d
%{_sysconfdir}/rc.d
%{_sysconfdir}/rc.d/init.d
%{_sysconfdir}/rc[0-6].d
%{_sysconfdir}/rc.d/rc[0-6].d
%dir /var/lib/alternatives
%{_mandir}/*/chkconfig*
%{_mandir}/*/update-alternatives*
%{_mandir}/*/alternatives*
%{_prefix}/lib/systemd/systemd-sysv-install
%files -n ntsysv
@ -81,97 +76,14 @@ mkdir -p $RPM_BUILD_ROOT/etc/chkconfig.d
%{_sbindir}/ntsysv
%{_mandir}/*/ntsysv.8*
%files -n alternatives
%license COPYING
%dir /etc/alternatives
%ghost %dir %attr(755, root, root) /etc/alternatives.admindir
%ghost %dir %attr(755, root, root) /var/lib/alternatives
%{_sbindir}/update-alternatives
%{_sbindir}/alternatives
%{_mandir}/*/update-alternatives*
%{_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)
* Thu May 04 2023 Jan Macku <jamacku@redhat.com> - 1.24-1
- ci: fix `NEXT_VERSION` in Makefile
- revert: releng: Enable Packit to handle Fedora updates
- revert: releng: Convert to rpmautospec
* Thu May 04 2023 Jan Macku <jamacku@redhat.com> - 1.23-1
- Translated using Weblate (Korean)
- Translated using Weblate (English (United Kingdom))
* Mon May 15 2023 Jan Macku <jamacku@redhat.com> - 1.19.2-1
- alternatives: --keep-foreign incorrectly handles non-existent files
- alternatives: isLink should return 0 in case of lstat error
- Translated using Weblate (Swedish)
- Translated using Weblate (Korean)
- Translated using Weblate (Georgian)
- Translated using Weblate (Finnish)
- Translated using Weblate (Ukrainian)
- Translated using Weblate (Polish)
- Update translation files
- Translated using Weblate (German)
- doc: update translations
- spec: remote changelog
* Thu Mar 23 2023 Jan Macku <jamacku@redhat.com> - 1.22-1
- migrate to SPDX license
- Translated using Weblate (English (United Kingdom))
- Translated using Weblate (Japanese)
- ci: Add locale linter
- ci: update workflows
- test: fix ShellCheck error[SC2070]
- Bump redhat-plumbers-in-action/differential-shellcheck from 3 to 4 (#94)
- releng: Packit remove extra job trigger
- releng: Enable Packit to handle Fedora updates
- releng: Convert to rpmautospec
* Wed Oct 05 2022 Jan Macku <jamacku@redhat.com> - 1.21-1
- ci: Add CodeQL to replace LGTM
- alternatives: replace master/slave with leader/follower
- chkconfig: use correct cmp function
- Bump redhat-plumbers-in-action/differential-shellcheck from 2 to 3
- ci: Add Shell linter - Differential ShellCheck
- ci: Use more inclusive terminology in workflows
- ci: Update workflows, packit and dependabot
- Translated using Weblate (Friulian)
- Translated using Weblate (Swedish)
- Translated using Weblate (Estonian)
- Translated using Weblate (Georgian)
- Translated using Weblate (Polish)
- Translated using Weblate (Korean)
- Translated using Weblate (Czech)
- Translations update from Fedora Weblate (#77)
- Translations update from Fedora Weblate (#75)
- Translations update from Fedora Weblate (#74)
- Translations update from Fedora Weblate (#73)
- Translated using Weblate (Ukrainian)
- Update translation files
- Family mentioned for --set in both man and help
- Translated using Weblate (French)
- build-sys: Ensure `systemd-sysv-install` symlink does not have `//`
- Translated using Weblate (German)
- Add LGTM badges to README
- Merge remote-tracking branch 'weblate/master'
- Translated using Weblate (Indonesian)
- Translated using Weblate (Finnish)
- Translated using Weblate (Korean)
- Translated using Weblate (Ukrainian)
- Translated using Weblate (Turkish)
- Translated using Weblate (Polish)
- Translated using Weblate (Norwegian Nynorsk)
- Update translation files
- Translated using Weblate (Finnish)
- Translated using Weblate (Czech)
- Translated using Weblate (Swedish)
- Translated using Weblate (Italian)
- Translated using Weblate (Spanish)
- Translated using Weblate (Chinese (Simplified))
* Wed Jul 28 2021 Jan Macku <jamacku@redhat.com> - 1.20-1
- spec: Replace not working awk command with sed (#62)
- spec: Replace not working awk command with sed (#63)
* Tue Jul 27 2021 Jan Macku <jamacku@redhat.com> - 1.19.1-1
- spec: Revert changes introduced in Fedora (#61)
* Fri Jul 23 2021 Jan Macku <jamacku@redhat.com> - 1.19-1
- spec: Add Provides /sbin/chkconfig in order to stay backwards compatible (#60)
@ -206,6 +118,9 @@ mkdir -p $RPM_BUILD_ROOT/etc/chkconfig.d
- Fix spelling of SELinux
- Remove hardcoded systemd path
* Fri Apr 17 2020 Jan Macku <jamacku@redhat.com> - 1.13-2
- Package onboarded to gating
* Tue Apr 14 2020 Jan Macku <jamacku@redhat.com> - 1.13-1
- fix typo in translations and fix bogus dates in changelog
@ -400,7 +315,7 @@ mkdir -p $RPM_BUILD_ROOT/etc/chkconfig.d
- translation updates: as, bg, bn_IN, bs, ca, de, fr, hi, hu, id, ja,
ka, ml, ms, nb, or, sk, sl
- add resetpriorities to the man page (#197399)
* Tue Feb 6 2007 Bill Nottingham <notting@redhat.com> 1.3.33-1
- various changes from review - support alternate %%{_sbindir}, fix
summaries, add version to requires, assorted other bits

Loading…
Cancel
Save