Skip to content

Add mkmotd.pl #26

Merged
merged 2 commits into from
Feb 21, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,8 @@ install_exec make-automaps/make-automaps "$DESTDIR$usr_sbindir/make-aut
install_data misc_systemd_units/automount.service "$DESTDIR$systemdunitdir/automount.service"
install_data misc_systemd_units/gdm.service "$DESTDIR$systemdunitdir/gdm.service"
install_data misc_systemd_units/lazy-umount-nfs.service "$DESTDIR$systemdunitdir/lazy-umount-nfs.service"
install_exec mkmotd/mkmotd.pl "$DESTDIR$usr_sbindir/mkmotd.pl"
install_data mkmotd/motd.service "$DESTDIR$systemdunitdir/motd.service"
install_exec mxgrub/mxgrub "$DESTDIR$usr_sbindir/mxgrub"
install_exec mxnetctl/mxnetctl "$DESTDIR$usr_sbindir/mxnetctl"
install_exec mxrouter/mxrouterctl "$DESTDIR$usr_sbindir/mxrouterctl"
Expand Down
197 changes: 197 additions & 0 deletions mkmotd/mkmotd.pl
Original file line number Diff line number Diff line change
@@ -0,0 +1,197 @@
#! /usr/bin/perl
use strict;
use warnings;

#
# Mutter: /project/admin/linux/mkmotd.pl
#

if ($ARGV[0] and $ARGV[0] eq 'u') {
print `cp -v /project/admin/linux/mkmotd.pl /usr/sbin`;
print "update done.\n";
exit;
}


my ($os_release)=`/bin/os-release`;chomp($os_release);

our $TEMPLATE;

if ($os_release eq 'mariux_x86_64' || $os_release eq 'mariux_i686') {
$TEMPLATE=<<'EOF';

# # ### # # %HOST%
## ## ## ##### # # # # #
# # # # # # # # # # # # # cpu %NCPU%x %CPU%
# # # # # # # # # # # ram %MEM%
# # ###### ##### # # # # # arch %ARCH% / %BITS%-bit
# # # # # # # # # # # glibc %GLIBC%
# # # # # # ### #### # # kernel %KERNEL%

beyond the return of the next followed generation

http://twiki.molgen.mpg.de/twiki/bin/view/Edv/MarIuXNews

EOF
} elsif ($os_release eq 'mariux64') {
$TEMPLATE=<<'EOF';

# # ### # # %HOST%
## ## ## ##### # # # # # system %SYSTEM%
# # # # # # # # # # # # # cpu %NCPU%x %CPU%
# # # # # # # # # # # 64 ram %MEM%
# # ###### ##### # # # # # arch %ARCH% / %BITS%-bit
# # # # # # # # # # # glibc %GLIBC%
# # # # # # ### #### # # kernel %KERNEL%

EOF

$TEMPLATE.=" / to bee or not to bee / ";

if ( -d '/node/tags' ) {
$_=`ls /node/tags`;s/\n/ /g;
$TEMPLATE.="tags: $_";
}

$TEMPLATE.="\n";

} else {
die "$os_release : unknown os_release\n";
}

sub readstr {
my $f = shift;
if ( -e $f ) {
open I,'<',$f or die "cannot readstr $f: $!";
my $str = <I>;
chomp ($str);
close I;
return $str;
}
return undef;
}

sub policy { # policy('theinternet') --> ('zeile1,'zeile2',....)
my ($hostname)=@_;

open IN,'<','/etc/mxpolicy' or return ();
while (<IN>) {
if (/^\S/ && /\b$hostname\b/) {
my @out;
while (<IN>) {
/^\S/ and last;
/\s+\*\s*(.+)/ and push @out,$1;
if (/\s+\`\s*(.+)/) {
my $x = `$1`;chomp($x);
push @out,split(/\n/,$x);
}
}
return @out;
}
}
return ();
}


my %T;

my @un = split(/ /,`uname -a`);
chomp(@un);
$_=$un[1];s/\.molgen\.mpg\.de//;
$T{HOST} = $_;
$T{KERNEL} = "$un[2] $un[3]";
$T{BITS} = 32; # default (may change sometime...)
$T{ARCH} = 'i686';
if ($T{KERNEL} =~ /x86_64|mx64/) {
$T{BITS} = 64;
$T{ARCH} = 'x86_64';
}

$_ = `/lib/libc.so.6`;
/version (\d\S+)[\.,]/;
$T{GLIBC} = $1;

my @pc=`cat /proc/cpuinfo`;
my $mn='unknown CPU';
$T{NCPU} = grep {/model name/ and $mn = $_; /processor/} @pc;
$mn =~ s/\(.*?\)|xeon|Virtual|Athlon|model name\s*:|six.core|quad.core|dual.core|intel|Processor|cpu|core//ig;
$mn =~ s/\s(E\d\-)\s/$1/;
$mn =~ s/\s\d\s\@/ \@/;
$mn =~ s/version\s+/v/g;
$mn =~ s/\s+/ /g;
$mn =~ s/^\s+|\s+$//g;
$T{CPU} = $mn;

$T{SYSTEM}='';
{
my $sys = '';

# for i in /sys/devices/virtual/dmi/id/*_{name,vendor,version}; do echo -en "$i\t"; cat $i; done
# for i in /sys/devices/virtual/dmi/id/{product_{name,version},sys_vendor}; do echo -en "$i\t"; cat $i; done

# /sys/devices/virtual/dmi/id

my $pn = readstr('/sys/devices/virtual/dmi/id/product_name');
if ($pn =~ m/All Series|empty/) {
$pn = undef;
$pn = readstr('/sys/devices/virtual/dmi/id/board_name');
}
# $pn =~ s/(TYAN Transport )//i;

my $mf = readstr('/sys/devices/virtual/dmi/id/sys_vendor');
if ($mf =~ m/(empty|NVIDIA)/) {
$mf = readstr('/sys/devices/virtual/dmi/id/board_vendor');
}
$mf =~ s/( Inc.| Computer Corporation)//;

my $vn = readstr('/sys/devices/virtual/dmi/id/product_version');
if ($vn =~ m/empty/) {
$vn = undef;
}

if ( defined($pn) and $pn eq 'CK8 ') {
$mf = $vn;
$pn = '';
}
($pn ne '') and $pn = " $pn";
$T{SYSTEM} = "$mf$pn";
$T{SYSTEM} =~ s/_/ /g;
$T{SYSTEM} =~ s{( Transport| Tower|Hewlett-Packard |/S2932-E/S2932-SI| Thunder| Computer Corp|Technology Co., Ltd. )}{}i;
}

my %BC = (
'bugblatterbeastoftraal' => 'TYAN VX50 B4985',
'crap03' => 'TYAN GT20-B2925/B2925-E',
'keineahnung' => 'FUJITSU ESPRIMO P756',
'furunkel' => 'HP Z200 Workstation',
);
if (exists($BC{$T{HOST}}) and $BC{$T{HOST}} ne $T{SYSTEM}) {
system("banner WRONG");
die "$BC{$T{HOST}} ne $T{SYSTEM}";
}
my @mem = `cat /proc/meminfo`;
my $mem = '??';
for (@mem) {
if (/MemTotal:\s+(\d+)/) {
my $mm = $1;
if ( int($mm / 1024 / 1000 ) >= 1 ) {
$mem = (int($mm / 1024 / 100)/10) + 0;
$mem .= ' GB';
}
elsif ( int($mm / 1000 ) >= 1 ) {
$mem = (int($mm / 100)/10) + 0;
$mem .= ' MB';
}
else {
$mem = "$mm kB";
}
last;
}
}
$T{MEM} = $mem;


$TEMPLATE=~s/%(\S+?)%/$T{$1}||$1/eg;
open O, '>','/etc/motd' or die "/etc/motd: $!\n";
print O $TEMPLATE, (join("\n",map (" ** $_ **",policy($T{HOST})))||" ** **"),"\n\n";
close O;
11 changes: 11 additions & 0 deletions mkmotd/motd.service
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
[Unit]
Description=Make motd

[Service]
Type=oneshot
ExecStart=/usr/sbin/mkmotd.pl
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target