X-Git-Url: https://pere.pagekite.me/gitweb/homepage.git/blobdiff_plain/969227bd70d2c8e4c690edd88aeb308199f77db8..4670db8c493b13f0e5943bbd89757deb459a997a:/blog/index.rss diff --git a/blog/index.rss b/blog/index.rss index 3d826c177d..64485f4e8a 100644 --- a/blog/index.rss +++ b/blog/index.rss @@ -6,6 +6,46 @@ http://people.skolelinux.org/pere/blog/ + + Saving power with Debian Edu / Skolelinux using shutdown-at-night + http://people.skolelinux.org/pere/blog/Saving_power_with_Debian_Edu___Skolelinux_using_shutdown_at_night.html + http://people.skolelinux.org/pere/blog/Saving_power_with_Debian_Edu___Skolelinux_using_shutdown_at_night.html + Sun, 5 Feb 2012 09:45:00 +0100 + <p>Since the Lenny version of +<a href="http://www.skolelinux.org/">Debian Edu / Skolelinux</a>, a +feature to save power have been included. It is as simple as it is +practical: Shut down unused clients at night, and turn them on again +in the morning. This is done using the +<a href="http://packages.qa.debian.org/s/shutdown-at-night.html">shutdown-at-night</a> Debian package.</p> + +<p>To enable this feature on a client, the machine need to be added to +the netgroup shutdown-at-night-hosts. For Debian Edu, This is done in +LDAP, and once this is in place, the machine in question will check +every hour from 16:00 until 06:00 to see if the machine is unused, and +shut it down if it is. If the hardware in question is supported by +the +<a href="http://packages.qa.debian.org/n/nvram-wakeup.html">nvram-wakeup</a> +package, the BIOS is told to turn the machine back on around 07:00 +- +10 minutes. If this isn't working, one can configure wake-on-lan to +try to turn on the client. The wake-on-lan option is only documented +and not enabled by default in Debian Edu.</p> + +<p>It is important to not turn all machines on at once, as this can +blow a fuse if several computers are connected to the same fuse like +the common setup for a classroom. The nvram-wakeup method only work +for machines with a functioning hardware/BIOS clock. I've seen old +machines where the BIOS battery were dead and the hardware clock were +starting from 0 (or was it 1990?) every boot. If you have one of +those, you have to turn on the computer manually.</p> + +<p>The shutdown-at-night package is completely self contained, and can +also be used outside the Debian Edu environment. For those without a +central LDAP server with netgroups, one can instead touch the file +<tt>/etc/shutdown-at-night/shutdown-at-night</tt> to enable it. +Perhaps you too can use it to save some power?</p> + + + Third beta version of Debian Edu / Skolelinux based on Squeeze http://people.skolelinux.org/pere/blog/Third_beta_version_of_Debian_Edu___Skolelinux_based_on_Squeeze.html @@ -509,193 +549,5 @@ organiserte møtene med foredrag, konferanser og utviklersamlinger.</p> - - Automatically upgrading server firmware on Dell PowerEdge - http://people.skolelinux.org/pere/blog/Automatically_upgrading_server_firmware_on_Dell_PowerEdge.html - http://people.skolelinux.org/pere/blog/Automatically_upgrading_server_firmware_on_Dell_PowerEdge.html - Mon, 21 Nov 2011 12:00:00 +0100 - <p>At work we have heaps of servers. I believe the total count is -around 1000 at the moment. To be able to get help from the vendors -when something go wrong, we want to keep the firmware on the servers -up to date. If the firmware isn't the latest and greatest, the -vendors typically refuse to start debugging any problems until the -firmware is upgraded. So before every reboot, we want to upgrade the -firmware, and we would really like everyone handling servers at the -university to do this themselves when they plan to reboot a machine. -For that to happen we at the unix server admin group need to provide -the tools to do so.</p> - -<p>To make firmware upgrading easier, I am working on a script to -fetch and install the latest firmware for the servers we got. Most of -our hardware are from Dell and HP, so I have focused on these servers -so far. This blog post is about the Dell part.</P> - -<p>On the Dell FTP site I was lucky enough to find -<a href="ftp://ftp.us.dell.com/catalog/Catalog.xml.gz">an XML file</a> -with firmware information for all 11th generation servers, listing -which firmware should be used on a given model and where on the FTP -site I can find it. Using a simple perl XML parser I can then -download the shell scripts Dell provides to do firmware upgrades from -within Linux and reboot when all the firmware is primed and ready to -be activated on the first reboot.</p> - -<p>This is the Dell related fragment of the perl code I am working on. -Are there anyone working on similar tools for firmware upgrading all -servers at a site? Please get in touch and lets share resources.</p> - -<p><pre> -#!/usr/bin/perl -use strict; -use warnings; -use File::Temp qw(tempdir); -BEGIN { - # Install needed RHEL packages if missing - my %rhelmodules = ( - 'XML::Simple' => 'perl-XML-Simple', - ); - for my $module (keys %rhelmodules) { - eval "use $module;"; - if ($@) { - my $pkg = $rhelmodules{$module}; - system("yum install -y $pkg"); - eval "use $module;"; - } - } -} -my $errorsto = 'pere@hungry.com'; - -upgrade_dell(); - -exit 0; - -sub run_firmware_script { - my ($opts, $script) = @_; - unless ($script) { - print STDERR "fail: missing script name\n"; - exit 1 - } - print STDERR "Running $script\n\n"; - - if (0 == system("sh $script $opts")) { # FIXME correct exit code handling - print STDERR "success: firmware script ran succcessfully\n"; - } else { - print STDERR "fail: firmware script returned error\n"; - } -} - -sub run_firmware_scripts { - my ($opts, @dirs) = @_; - # Run firmware packages - for my $dir (@dirs) { - print STDERR "info: Running scripts in $dir\n"; - opendir(my $dh, $dir) or die "Unable to open directory $dir: $!"; - while (my $s = readdir $dh) { - next if $s =~ m/^\.\.?/; - run_firmware_script($opts, "$dir/$s"); - } - closedir $dh; - } -} - -sub download { - my $url = shift; - print STDERR "info: Downloading $url\n"; - system("wget --quiet \"$url\""); -} - -sub upgrade_dell { - my @dirs; - my $product = `dmidecode -s system-product-name`; - chomp $product; - - if ($product =~ m/PowerEdge/) { - - # on RHEL, these pacakges are needed by the firwmare upgrade scripts - system('yum install -y compat-libstdc++-33.i686 libstdc++.i686 libxml2.i686 procmail'); - - my $tmpdir = tempdir( - CLEANUP => 1 - ); - chdir($tmpdir); - fetch_dell_fw('catalog/Catalog.xml.gz'); - system('gunzip Catalog.xml.gz'); - my @paths = fetch_dell_fw_list('Catalog.xml'); - # -q is quiet, disabling interactivity and reducing console output - my $fwopts = "-q"; - if (@paths) { - for my $url (@paths) { - fetch_dell_fw($url); - } - run_firmware_scripts($fwopts, $tmpdir); - } else { - print STDERR "error: Unsupported Dell model '$product'.\n"; - print STDERR "error: Please report to $errorsto.\n"; - } - chdir('/'); - } else { - print STDERR "error: Unsupported Dell model '$product'.\n"; - print STDERR "error: Please report to $errorsto.\n"; - } -} - -sub fetch_dell_fw { - my $path = shift; - my $url = "ftp://ftp.us.dell.com/$path"; - download($url); -} - -# Using ftp://ftp.us.dell.com/catalog/Catalog.xml.gz, figure out which -# firmware packages to download from Dell. Only work for Linux -# machines and 11th generation Dell servers. -sub fetch_dell_fw_list { - my $filename = shift; - - my $product = `dmidecode -s system-product-name`; - chomp $product; - my ($mybrand, $mymodel) = split(/\s+/, $product); - - print STDERR "Finding firmware bundles for $mybrand $mymodel\n"; - - my $xml = XMLin($filename); - my @paths; - for my $bundle (@{$xml->{SoftwareBundle}}) { - my $brand = $bundle->{TargetSystems}->{Brand}->{Display}->{content}; - my $model = $bundle->{TargetSystems}->{Brand}->{Model}->{Display}->{content}; - my $oscode; - if ("ARRAY" eq ref $bundle->{TargetOSes}->{OperatingSystem}) { - $oscode = $bundle->{TargetOSes}->{OperatingSystem}[0]->{osCode}; - } else { - $oscode = $bundle->{TargetOSes}->{OperatingSystem}->{osCode}; - } - if ($mybrand eq $brand && $mymodel eq $model && "LIN" eq $oscode) - { - @paths = map { $_->{path} } @{$bundle->{Contents}->{Package}}; - } - } - for my $component (@{$xml->{SoftwareComponent}}) { - my $componenttype = $component->{ComponentType}->{value}; - - # Drop application packages, only firmware and BIOS - next if 'APAC' eq $componenttype; - - my $cpath = $component->{path}; - for my $path (@paths) { - if ($cpath =~ m%/$path$%) { - push(@paths, $cpath); - } - } - } - return @paths; -} -</pre> - -<p>The code is only tested on RedHat Enterprise Linux, but I suspect -it could work on other platforms with some tweaking. Anyone know a -index like Catalog.xml is available from HP for HP servers? At the -moment I maintain a similar list manually and it is quickly getting -outdated.</p> - - -