| 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 |
| |