From d8603c540cfccda5e011060083108de8f1b820ab Mon Sep 17 00:00:00 2001
From: Thomas Deutschmann <whissi@gentoo.org>
Date: Tue, 9 Aug 2016 01:19:16 +0200
Subject: [PATCH 1/3] sensors-detect: Add sd_boot detection

We need to know in write_config function wether the system is using systemd
or not.
---
 prog/detect/sensors-detect | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/prog/detect/sensors-detect b/prog/detect/sensors-detect
index 057cd96..e29ab4c 100755
--- a/prog/detect/sensors-detect
+++ b/prog/detect/sensors-detect
@@ -2746,7 +2746,7 @@ sub isa_read_i5d6
 # AUTODETECTION #
 #################
 
-use vars qw($dev_i2c $sysfs_root $systemd_systemctl $systemd_system_dir);
+use vars qw($dev_i2c $sysfs_root $systemd_is_booted $systemd_systemctl $systemd_system_dir);
 
 sub initialize_conf
 {
@@ -2820,6 +2820,10 @@ sub initialize_conf
 	} elsif (-d "/lib/systemd/system") {
 		$systemd_system_dir = "/lib/systemd/system";
 	}
+
+	# Check whether the system was booted using systemd.
+	# See: man sd_booted
+	$systemd_is_booted = -d '/run/systemd/system';
 }
 
 # [0] -> VERSION
-- 
2.9.3


From 14376e837c4a666fe2088bc7b7fbb90a4520f387 Mon Sep 17 00:00:00 2001
From: Thomas Deutschmann <whissi@gentoo.org>
Date: Tue, 9 Aug 2016 01:25:52 +0200
Subject: [PATCH 2/3] sensors-detect: write_config function adjusted for Gentoo
 environment

Bug: https://bugs.gentoo.org/480018
---
 prog/detect/sensors-detect | 133 +++++++++++++++++++++------------------------
 1 file changed, 62 insertions(+), 71 deletions(-)

diff --git a/prog/detect/sensors-detect b/prog/detect/sensors-detect
index e29ab4c..bb5ae0f 100755
--- a/prog/detect/sensors-detect
+++ b/prog/detect/sensors-detect
@@ -7079,6 +7079,9 @@ sub write_config
 {
 	my ($configfile, $bus_modules, $hwmon_modules) = @_;
 
+	my $have_conffiles_created = 0;
+
+	# /etc/modprobe.d handling
 	if (defined $configfile) {
 		my $have_modprobe_d = -d '/etc/modprobe.d';
 		printf "Do you want to \%s /etc/modprobe.d/lm_sensors.conf? (\%s): ",
@@ -7087,96 +7090,84 @@ sub write_config
 		$_ = read_answer();
 		if (($have_modprobe_d and not m/^\s*n/i) or m/^\s*y/i) {
 			unless ($have_modprobe_d) {
-				mkdir('/etc/modprobe.d', 0777)
+				mkdir('/etc/modprobe.d', 0755)
 					or die "Sorry, can't create /etc/modprobe.d ($!)";
 			}
-			open(local *MODPROBE_D, ">/etc/modprobe.d/lm_sensors.conf")
+			open(local *MODPROBE_D, ">", $have_modprobe_d . '/lm_sensors.conf')
 				or die "Sorry, can't create /etc/modprobe.d/lm_sensors.conf ($!)";
 			print MODPROBE_D "# Generated by sensors-detect on " . scalar localtime() . "\n";
 			print MODPROBE_D $configfile;
 			close(MODPROBE_D);
+			$have_conffiles_created++;
 		} else {
 			print "To make the sensors modules behave correctly, add these lines to\n".
-			      "/etc/modprobe.conf:\n\n";
+			      "/etc/modprobe.d/lm_sensors.conf:\n\n";
 			print "#----cut here----\n".
 			      $configfile.
 			      "#----cut here----\n\n";
 		}
 	}
 
-	my $have_sysconfig = -d '/etc/sysconfig';
-	printf "Do you want to \%s /etc/sysconfig/lm_sensors? (\%s): ",
-	       (-e '/etc/sysconfig/lm_sensors' ? 'overwrite' : 'generate'),
-	       ($have_sysconfig ? 'YES/no' : 'yes/NO');
-	$_ = read_answer();
-	if (($have_sysconfig and not m/^\s*n/i) or m/^\s*y/i) {
-		unless ($have_sysconfig) {
-			mkdir('/etc/sysconfig', 0777)
-				or die "Sorry, can't create /etc/sysconfig ($!)";
-		}
-		open(local *SYSCONFIG, ">/etc/sysconfig/lm_sensors")
-			or die "Sorry, can't create /etc/sysconfig/lm_sensors ($!)";
-		print SYSCONFIG "# Generated by sensors-detect on " . scalar localtime() . "\n";
-		print SYSCONFIG <<'EOT';
-# This file is sourced by /etc/init.d/lm_sensors and defines the modules to
-# be loaded/unloaded.
-#
-# The format of this file is a shell script that simply defines variables:
-# HWMON_MODULES for hardware monitoring driver modules, and optionally
-# BUS_MODULES for any required bus driver module (for example for I2C or SPI).
-
-EOT
-		print SYSCONFIG "BUS_MODULES=\"", join(" ", @{$bus_modules}), "\"\n"
-			if @{$bus_modules};
-		print SYSCONFIG "HWMON_MODULES=\"", join(" ", @{$hwmon_modules}), "\"\n";
-		close(SYSCONFIG);
-
-		if ($systemd_systemctl && $systemd_system_dir) {
-			if (-f "$systemd_system_dir/lm_sensors.service") {
-				system($systemd_systemctl, "enable", "lm_sensors.service");
-				system($systemd_systemctl, "start", "lm_sensors.service");
-				# All done, don't check for /etc/init.d/lm_sensors
-			} else {
-				print "Copy prog/init/lm_sensors.service to $systemd_system_dir\n".
-				      "and run 'systemctl enable lm_sensors.service'\n".
-				      "for initialization at boot time.\n";
-			}
-			return;
+	# /etc/modules-load.d handling
+	my $modulesload_filedir = '/etc/modules-load.d';
+	my $modulesload_file = $modulesload_filedir . '/lm_sensors.conf';
+	my $modulesload_cfg = "# Generated by sensors-detect on " . scalar localtime() . "\n"
+		. join("\n", (@{$bus_modules}, @{$hwmon_modules})) . "\n";
+
+	my $have_modulesload_file = -f $modulesload_file;
+	printf "Do you want to \%s '$modulesload_file'? (\%s): ",
+		($have_modulesload_file ? 'overwrite' : 'generate'),
+		($have_modulesload_file ? 'yes/NO' : 'YES/no');
+
+	my $input = read_answer();
+	chomp($input);
+	if ($input eq '' && $have_modulesload_file) {
+		$input = 'no';
+	}
+	elsif ($input eq '' && !$have_modulesload_file) {
+		$input = 'yes';
+	}
+
+	if ($input =~ m/^\s*y/i) {
+		unless (-d $modulesload_filedir) {
+			mkdir($modulesload_filedir, 0755)
+				or die "Sorry, can't create '$modulesload_filedir' ($!)";
 		}
 
-		print "Copy prog/init/lm_sensors.init to /etc/init.d/lm_sensors\n".
-		      "for initialization at boot time.\n"
-			unless -f "/etc/init.d/lm_sensors";
+		open(my $fh, '>', $modulesload_file)
+			or die "Sorry, can't open '$modulesload_file' for writing! ($!)";
 
-		if (-x "/sbin/insserv" && -f "/etc/init.d/lm_sensors") {
-			system("/sbin/insserv", "/etc/init.d/lm_sensors");
-		} elsif (-x "/sbin/chkconfig" && -f "/etc/init.d/lm_sensors") {
-			system("/sbin/chkconfig", "lm_sensors", "on");
-			if (-x "/sbin/service") {
-				system("/sbin/service", "lm_sensors", "start");
-			}
+		print $fh $modulesload_cfg;
+		close($fh);
+
+		$have_conffiles_created++;
+	}
+	else {
+		print "\nPlease create '$modulesload_file' with the following content\n"
+			. "to allow modules-load service to autoload modules on boot:\n\n";
+		print "#----cut here----\n"
+			. "# Generated by sensors-detect on " . scalar localtime() . "\n"
+			. join("\n", (@{$bus_modules}, @{$hwmon_modules})) . "\n"
+			. "#----cut here----\n\n";
+	}
+
+	if ($have_conffiles_created) {
+		printf "\nNote: You only have created the required configuration to autoload the\n"
+			. "required modules to use your sensors on boot. If you want to start using\n"
+			. "your sensors right now you have to either load them now once manually, to\n"
+			. "reboot this system or to execute the following command(s):\n\n";
+
+		if ($systemd_is_booted) {
+			print "  # systemctl restart systemd-modules-load\n\n"
 		} else {
-			print "You should now start the lm_sensors service to load the required\n".
-			      "kernel modules.\n\n";
-		}
-	} else {
-		print "To load everything that is needed, add this to one of the system\n".
-		      "initialization scripts (e.g. /etc/rc.d/rc.local):\n\n";
-		print "#----cut here----\n";
-		if (@{$bus_modules}) {
-			print "# Adapter drivers\n";
-			print "modprobe $_\n" foreach (@{$bus_modules});
+			print "  # /etc/init.d/modules-load restart\n\n"
 		}
-		print "# Chip drivers\n";
-		print "modprobe $_\n" foreach (@{$hwmon_modules});
-		print((-e '/usr/bin/sensors' ?
-		       "/usr/bin/sensors -s\n" :
-		       "/usr/local/bin/sensors -s\n").
-		      "#----cut here----\n\n");
-
-		print "You really should try these commands right now to make sure everything\n".
-		      "is working properly. Monitoring programs won't work until the needed\n".
-		      "modules are loaded.\n\n";
+	}
+	else {
+		print "\nNote: Please make sure the following modules are loaded when you\n"
+			. "want to make use of your sensors:\n\n";
+
+		print "  " . join(" ", (@{$bus_modules}, @{$hwmon_modules})) . "\n\n";
 	}
 }
 
-- 
2.9.3


From 59680d1fd41402efb547ca75ad8397089df2e059 Mon Sep 17 00:00:00 2001
From: Thomas Deutschmann <whissi@gentoo.org>
Date: Mon, 29 Aug 2016 12:47:50 +0200
Subject: [PATCH 3/3] sensors-detect: Add Gentoo config file protection

Per default we don't modify live config file. Instead we create
"._cfg0000_<filename>" files known from emerge when using CONFIG PROTECT.

See CONFIGURATION FILES section of emerge(1) man page for details.

Can be disabled using the "--no-gentoo-config-protect" parameter.
---
 prog/detect/sensors-detect | 51 +++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 48 insertions(+), 3 deletions(-)

diff --git a/prog/detect/sensors-detect b/prog/detect/sensors-detect
index bb5ae0f..2cc8f88 100755
--- a/prog/detect/sensors-detect
+++ b/prog/detect/sensors-detect
@@ -7093,7 +7093,7 @@ sub write_config
 				mkdir('/etc/modprobe.d', 0755)
 					or die "Sorry, can't create /etc/modprobe.d ($!)";
 			}
-			open(local *MODPROBE_D, ">", $have_modprobe_d . '/lm_sensors.conf')
+			open(local *MODPROBE_D, ">", gentoo_get_protected_file($have_modprobe_d . '/lm_sensors.conf'))
 				or die "Sorry, can't create /etc/modprobe.d/lm_sensors.conf ($!)";
 			print MODPROBE_D "# Generated by sensors-detect on " . scalar localtime() . "\n";
 			print MODPROBE_D $configfile;
@@ -7134,7 +7134,7 @@ sub write_config
 				or die "Sorry, can't create '$modulesload_filedir' ($!)";
 		}
 
-		open(my $fh, '>', $modulesload_file)
+		open(my $fh, '>', gentoo_get_protected_file($modulesload_file))
 			or die "Sorry, can't open '$modulesload_file' for writing! ($!)";
 
 		print $fh $modulesload_cfg;
@@ -7152,10 +7152,17 @@ sub write_config
 	}
 
 	if ($have_conffiles_created) {
+		if (!$opt{no_gentoo_config_protect}) {
+			print "\n * IMPORTANT: At least $have_conffiles_created config file(s) in '/etc' need updating.\n"
+				. " * See the CONFIGURATION FILES and CONFIGURATION FILES UPDATE TOOLS\n"
+				. " * sections of the emerge man page to learn how to update config files.\n";
+		}
+
 		printf "\nNote: You only have created the required configuration to autoload the\n"
 			. "required modules to use your sensors on boot. If you want to start using\n"
 			. "your sensors right now you have to either load them now once manually, to\n"
-			. "reboot this system or to execute the following command(s):\n\n";
+			. "reboot this system or to execute the following command(s)\%s:\n\n",
+			($opt{no_gentoo_config_protect} ? "" : " _AFTER_\nyou have updated your config files");
 
 		if ($systemd_is_booted) {
 			print "  # systemctl restart systemd-modules-load\n\n"
@@ -7171,6 +7178,32 @@ sub write_config
 	}
 }
 
+sub gentoo_get_protected_file
+{
+	my ($file) = @_;
+
+	if ($opt{no_gentoo_config_protect}) {
+		return $file;
+	}
+
+	my $basename = basename($file);
+	my $dirname  = dirname($file);
+
+	my $protected_file;
+	for (my $prot_num = 0; $prot_num <= 9999; $prot_num++) {
+		$protected_file = sprintf('%s/._cfg%s_%s',
+			$dirname,
+			sprintf("%0*d", 4, $prot_num),
+			$basename);
+
+		if (! -f $protected_file) {
+			return $protected_file;
+		}
+	}
+
+	die "Running out of files -- cannot create protected file '$file'"
+}
+
 sub main
 {
 	my ($input, $superio_features);
@@ -7181,6 +7214,8 @@ sub main
 			$opt{stat} = 1;
 		} elsif ($ARGV[0] eq "--auto") {
 			$opt{auto} = 1;
+		} elsif ($ARGV[0] eq "--no-gentoo-config-protect") {
+			$opt{no_gentoo_config_protect} = 1;
 		} else {
 			print STDERR "Error: unknown option $ARGV[0]\n";
 			exit 1;
@@ -7234,6 +7269,16 @@ sub main
 		      "unless you know what you're doing.\n\n";
 	}
 
+	if (!$opt{no_gentoo_config_protect}) {
+		print "Gentoo config file protection is active. Every file this program will\n",
+			"modify must be merged before the change will become active using\n",
+			"default Gentoo tools such as dispatch-conf, cfg-update, and etc-update.\n\n";
+	}
+	else {
+		print "Gentoo config file protection is _disabled_. This program will modify\n",
+			"your active configuration without backups.\n\n";
+	}
+
 	print "Some south bridges, CPUs or memory controllers contain embedded sensors.\n".
 	      "Do you want to scan for them? This is totally safe. (YES/no): ";
 	$input = read_answer();
-- 
2.9.3

