public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/eselect:master commit in: modules/, /, man/
@ 2023-03-15 11:04 Ulrich Müller
  0 siblings, 0 replies; only message in thread
From: Ulrich Müller @ 2023-03-15 11:04 UTC (permalink / raw
  To: gentoo-commits

commit:     d5bd4e5f8d28c3fc6e7d15d639538ac9b6459e7a
Author:     Florian Schmaus <flow <AT> gentoo <DOT> org>
AuthorDate: Tue Mar 14 10:02:59 2023 +0000
Commit:     Ulrich Müller <ulm <AT> gentoo <DOT> org>
CommitDate: Wed Mar 15 11:04:22 2023 +0000
URL:        https://gitweb.gentoo.org/proj/eselect.git/commit/?id=d5bd4e5f

New "update" action in kernel module

* modules/kernel.eselect (do_update, describe_update)
(describe_update_options): New action, attempts to update the
/usr/src/linux symlink to point to the sources of the running
kernel. Bug 901209.
* man/kernel.eselect.5: Document it.

Thanks to ulm for helpful suggestions when working on this
functionality.

Bug: https://bugs.gentoo.org/901209
Signed-off-by: Florian Schmaus <flow <AT> gentoo.org>
[Tweaked bash syntax. Fixed highlighting in man page.]
Signed-off-by: Ulrich Müller <ulm <AT> gentoo.org>

 ChangeLog              |  6 +++++
 man/kernel.eselect.5   | 16 ++++++++++--
 modules/kernel.eselect | 71 +++++++++++++++++++++++++++++++++++++++++++++++++-
 3 files changed, 90 insertions(+), 3 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 913494f..7bb4ea4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2023-03-14  Florian Schmaus  <flow@gentoo.org>
 
+	* modules/kernel.eselect (do_update, describe_update)
+	(describe_update_options): New action, attempts to update the
+	/usr/src/linux symlink to point to the sources of the running
+	kernel. Bug 901209.
+	* man/kernel.eselect.5: Document it.
+
 	* libs/core.bash.in (find_module): Allow to specify an absolute
 	path as the module's filename, bug 901205.
 

diff --git a/man/kernel.eselect.5 b/man/kernel.eselect.5
index b3c5aa5..75d992f 100644
--- a/man/kernel.eselect.5
+++ b/man/kernel.eselect.5
@@ -1,7 +1,7 @@
-.\" Copyright 2005-2020 Gentoo Authors
+.\" Copyright 2005-2023 Gentoo Authors
 .\" Distributed under the terms of the GNU GPL version 2 or later
 .\"
-.TH kernel.eselect 5 "April 2009" "Gentoo Linux" eselect
+.TH kernel.eselect 5 "March 2023" "Gentoo Linux" eselect
 .SH NAME
 kernel.eselect \- The kernel symlink management module for Gentoo's eselect
 .SH SYNOPSIS
@@ -14,6 +14,9 @@ kernel.eselect \- The kernel symlink management module for Gentoo's eselect
 .I target
 .br
 .B eselect kernel show
+.br
+.B eselect kernel update
+.RB [ ifunset ]
 .SH DESCRIPTION
 .B eselect
 is Gentoo's configuration and management tool.  It features modules
@@ -45,6 +48,15 @@ output).
 .B eselect kernel show
 .br
 Show the currently selected kernel.
+.SH ACTION: UPDATE
+.B eselect kernel update
+.RB [ ifunset ]
+.br
+Updates the /usr/src/linux symlink to point to the sources of the
+running kernel.  If option
+.B ifunset
+is given, then the symlink will only be updated if it is not currently
+pointing to a valid kernel source tree.
 .SH AUTHOR
 Aaron Walker <ka0ttic@gentoo.org>
 .SH SEE ALSO

diff --git a/modules/kernel.eselect b/modules/kernel.eselect
index 64b5e77..e181886 100644
--- a/modules/kernel.eselect
+++ b/modules/kernel.eselect
@@ -1,5 +1,5 @@
 # -*-eselect-*-  vim: ft=eselect
-# Copyright 2005-2020 Gentoo Authors
+# Copyright 2005-2023 Gentoo Authors
 # Distributed under the terms of the GNU GPL version 2 or later
 
 DESCRIPTION="Manage the /usr/src/linux symlink"
@@ -125,3 +125,72 @@ do_set() {
 
 	set_symlink "$1" || die -q "Couldn't set a new symlink"
 }
+
+### update action ###
+
+describe_update() {
+	echo "Update the kernel symlink to running kernel"
+}
+
+describe_update_options() {
+	echo "ifunset: Do not override currently set version"
+}
+
+do_update() {
+	[[ -z $1 || $1 == ifunset ]] || die -q "Usage error"
+	[[ $# -gt 1 ]] && die -q "Too many parameters"
+	test_for_root
+
+	if [[ -e ${EROOT}/usr/src/linux ]]; then
+		if [[ ! -L ${EROOT}/usr/src/linux ]]; then
+			# we have something strange
+			die -q "${EROOT}/usr/src/linux exists but is not a symlink"
+		fi
+
+		if [[ $1 == ifunset ]]; then
+			# The /usr/src/linux symlink exists, points to a path that
+			# exists, and 'ifunset' is provided. Nothing to do.
+			return
+		fi
+	fi
+
+	local targets=( $(find_targets) )
+	[[ ${#targets[@]} -gt 0 ]] || die -q "No target kernel-source trees found"
+
+	local running_kernel_release
+	running_kernel_release=$(uname -r) || die -q "uname failed with $?"
+	local running_kernel_symlink_target="linux-${running_kernel_release}"
+
+	if [[ -e ${EROOT}/usr/src/linux ]]; then
+		local current_target
+		current_target=$(basename "$(canonicalise "${EROOT}/usr/src/linux")")
+		if [[ ${current_target} == "${running_kernel_symlink_target}" ]]; then
+			# The /usr/src/linux symlink already points to the running
+			# kernel's sources. Nothing to do.
+			return
+		fi
+	fi
+
+	local target
+	for target in "${targets[@]}"; do
+		if [[ ${target} == "${running_kernel_symlink_target}" ]]; then
+			set_symlink "${target}"
+			return
+		fi
+	done
+
+	write_error_msg \
+		"No sources for running kernel ${running_kernel_release} found."
+	if ! is_output_mode brief; then
+		do_list >&2
+	fi
+	die -q "Could not update the kernel symlink"
+}
+
+### helper functions ###
+
+test_for_root() {
+	if [[ ! -w ${EROOT}/usr/src ]]; then
+		die -q "${EROOT}/usr/src not writeable by current user. Are you root?"
+	fi
+}


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2023-03-15 11:04 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-03-15 11:04 [gentoo-commits] proj/eselect:master commit in: modules/, /, man/ Ulrich Müller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox