collectl: init at 4.3.20.1
- Add collectl 4.3.20.1 performance monitoring tool for Linux systems - Add test suite for configuration functionality - Include patches for external tool handling and install script fixes - Document --config option in package metadata - Add maintainer entry for seven_bear 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
5f7fd2471c
commit
3f4a4648bd
@ -23008,6 +23008,12 @@
|
||||
githubId = 2049686;
|
||||
name = "Sebastián Estrella";
|
||||
};
|
||||
seven_bear = {
|
||||
name = "Edmond Freeman";
|
||||
email = "edmondfreeman7@gmail.com";
|
||||
github = "yueneiqi";
|
||||
githubId = 26707756;
|
||||
};
|
||||
seylerius = {
|
||||
name = "Sable Seyler";
|
||||
email = "sable@seyleri.us";
|
||||
|
||||
@ -0,0 +1,444 @@
|
||||
Processing diff for: collectl.conf
|
||||
--- a/collectl.conf 2025-08-14 08:42:24.434419733 +0000
|
||||
+++ b/collectl.conf 2025-08-16 07:56:13.806350456 +0000
|
||||
@@ -43,7 +43,7 @@
|
||||
#Ps = /bin/ps
|
||||
#Rpm = /bin/rpm
|
||||
#Lspci = /sbin/lspci
|
||||
-#Lctl = /usr/sbin/lctl
|
||||
+#Lctl = /usr/sbin/lctl # disabled since collectl 4.0.4
|
||||
|
||||
# I n f i n i b a n d S u p p o r t
|
||||
|
||||
@@ -55,10 +55,11 @@
|
||||
# variable below. PQuery for OFED, PCounter for get_pcounter calls and
|
||||
# VStat for ALL non-ofed access of any kind.
|
||||
# can disable either by commenting out the reference to VStat/PQuery below.
|
||||
-PQuery = /usr/sbin/perfquery:/usr/bin/perfquery:/usr/local/ofed/bin/perfquery
|
||||
-PCounter = /usr/mellanox/bin/get_pcounter
|
||||
-VStat = /usr/mellanox/bin/vstat:/usr/bin/vstat
|
||||
-OfedInfo = /usr/bin/ofed_info:/usr/local/ofed/bin/ofed_info
|
||||
+# Disable the Infiniband support by default
|
||||
+# PQuery = /usr/sbin/perfquery:/usr/bin/perfquery:/usr/local/ofed/bin/perfquery
|
||||
+# PCounter = /usr/mellanox/bin/get_pcounter
|
||||
+# VStat = /usr/mellanox/bin/vstat:/usr/bin/vstat
|
||||
+# OfedInfo = /usr/bin/ofed_info:/usr/local/ofed/bin/ofed_info
|
||||
|
||||
# D e f a u l t s
|
||||
|
||||
@@ -116,7 +117,7 @@
|
||||
# size, comment out the Resize line and uncomment TermHeight, setting it to
|
||||
# what you want.
|
||||
#TermHeight = 24
|
||||
-Resize=/usr/bin/resize:/usr/X11R6/bin/resize
|
||||
+Resize=@resize@
|
||||
|
||||
# To turn off Time:HiRes/glibc incompatibility checking, the following
|
||||
# should be enabled and set to 0
|
||||
@@ -125,7 +126,7 @@
|
||||
# These control environmental monitoring and to use it you MUST have ipmitool
|
||||
# installed (see http://ipmitool.sourceforge.net/). If not in the path shown
|
||||
# below, you must change it.
|
||||
-Ipmitool = /usr/bin/ipmitool:/usr/local/bin/ipmitool:/opt/hptc/sbin/ipmitool
|
||||
+Ipmitool = @ipmitool@
|
||||
IpmiCache = /var/run/collectl-ipmicache
|
||||
IpmiTypes = fan,temp,current
|
||||
|
||||
Processing diff for: collectl
|
||||
--- a/collectl 2025-08-14 08:42:24.434419733 +0000
|
||||
+++ b/collectl 2025-08-16 09:25:20.238548613 +0000
|
||||
@@ -69,14 +69,14 @@
|
||||
use IO::Select;
|
||||
use Cwd 'abs_path';
|
||||
|
||||
-$Cat= '/bin/cat';
|
||||
-$Grep= '/bin/grep';
|
||||
-$Egrep= '/bin/egrep';
|
||||
-$Ps= '/bin/ps';
|
||||
-$Rpm= '/bin/rpm';
|
||||
-$Lspci= '/sbin/lspci';
|
||||
-$Lctl= '/usr/sbin/lctl';
|
||||
-$Dmidecode= '/usr/sbin/dmidecode';
|
||||
+$Cat= '@cat@';
|
||||
+$Grep= '@grep@';
|
||||
+$Egrep= '@egrep@';
|
||||
+$Ps= '@ps@';
|
||||
+$Rpm= '@rpm@';
|
||||
+$Lspci= '@lspci@';
|
||||
+$Lctl= '/usr/sbin/lctl'; # disabled since collectl 4.0.4
|
||||
+$Dmidecode= '@dmidecode@';
|
||||
|
||||
%TopProcTypes=qw(vsz '' rss '' syst '' usrt '' time '' accum '' rkb '' wkb '' iokb ''
|
||||
rkbc '' wkbc '' iokbc '' ioall '' rsys '' wsys '' iosys ''
|
||||
@@ -108,7 +108,7 @@
|
||||
$syslogFlag=(eval {require "Sys/Syslog.pm" or die}) ? 1 : 0;
|
||||
|
||||
# Always nice to know if we're root
|
||||
-$rootFlag=(!$PcFlag && `whoami`=~/root/) ? 1 : 0;
|
||||
+$rootFlag=(!$PcFlag && `@whoami@`=~/root/) ? 1 : 0;
|
||||
$SrcArch= $Config{"archname"};
|
||||
|
||||
$Version= '4.3.20';
|
||||
@@ -126,15 +126,15 @@
|
||||
# we're in the background. We also need to know if STDOUT connected to a terminal.
|
||||
if (!$PcFlag)
|
||||
{
|
||||
- $MyDir=`pwd`;
|
||||
- $Cat= 'cat';
|
||||
+ $MyDir=`@pwd@`;
|
||||
+ $Cat= '@cat@';
|
||||
$Sep= '/';
|
||||
$backFlag=(getpgrp()!=tcgetpgrp(0)) ? 1 : 0;
|
||||
$termFlag= (-t STDOUT) ? 1 : 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
- $MyDir=`cd`;
|
||||
+ $MyDir=`@cd@`;
|
||||
$Cat= 'type';
|
||||
$Sep= '\\';
|
||||
$backFlag=0;
|
||||
@@ -148,7 +148,7 @@
|
||||
# which was recorded with the data file and WILL override in playback mode.
|
||||
# We also need our host name before calling initRecord() so we can log it at
|
||||
# startup as well as for naming the logfile.
|
||||
-$myHost=($PcFlag) ? `hostname` : `/bin/hostname`;
|
||||
+$myHost=($PcFlag) ? `@hostname@` : `@hostname@`;
|
||||
$myHost=(split(/\./, $myHost))[0];
|
||||
chomp $myHost;
|
||||
$Host=$myHost;
|
||||
@@ -509,12 +509,12 @@
|
||||
|
||||
if ($runasUser!~/^\d+$/)
|
||||
{
|
||||
- $runasUid=(split(/:/, `grep ^$runasUser: /etc/passwd`))[2];
|
||||
+ $runasUid=(split(/:/, `@grep@ ^$runasUser: /etc/passwd`))[2];
|
||||
error("can't find '$runasUser' in /etc/passwd. Consider UID.") if !defined($runasUid);
|
||||
}
|
||||
if (defined($runasGroup) && $runasGroup!~/^\d+$/)
|
||||
{
|
||||
- $runasGid=(split(/:/, `grep ^$runasGroup: /etc/group`))[2];
|
||||
+ $runasGid=(split(/:/, `@grep@ ^$runasGroup: /etc/group`))[2];
|
||||
error("can't find '$runasGroup' in /etc/group. Consider GID.") if !defined($runasGid);
|
||||
}
|
||||
$runasUid=$runasUser if $runasUser=~/^\d+/;
|
||||
@@ -1167,19 +1167,19 @@
|
||||
if (!$PcFlag)
|
||||
{
|
||||
# This matches THIS host, but in playback mode will be reset to the target
|
||||
- $Kernel=`uname -r`;
|
||||
+ $Kernel=`@uname@ -r`;
|
||||
chomp $Kernel;
|
||||
error("collectl no longer supports 2.4 kernels") if $Kernel=~/^2\.4/;
|
||||
|
||||
- $LocalTimeZone=`date +%z`;
|
||||
+ $LocalTimeZone=`@date@ +%z`;
|
||||
chomp $LocalTimeZone;
|
||||
|
||||
# Some distros put lspci in /usr/sbin and others in /usr/bin, so take one last look in
|
||||
# those before complaining, but only if in record mode AND only if looking at interconnects
|
||||
if (!-e $Lspci && $playback eq '' && $subsys=~/x/i)
|
||||
{
|
||||
- $Lspci=(-e '/usr/sbin/lspci') ? '/usr/sbin/lspci' : '/usr/bin/lspci';
|
||||
- if (!-e "/usr/sbin/lspci" && !-e "/usr/bin/lspci")
|
||||
+ $Lspci='@lspci@';
|
||||
+ if (!-e "@lspci@")
|
||||
{
|
||||
pushmsg('W', "-sx disabled because 'lspci' not in $Lspci or '/usr/sbin' or '/usr/bin'");
|
||||
pushmsg('W', "If somewhere else, move it or define in collectl.conf");
|
||||
@@ -1274,7 +1274,7 @@
|
||||
# it further on so not to worry, but at least record a warning.
|
||||
$pid=`$Cat $PidFile`;
|
||||
chomp $pid;
|
||||
- @ps=`ps axo pid,command`;
|
||||
+ @ps=`@ps@ axo pid,command`;
|
||||
foreach my $line (@ps)
|
||||
{
|
||||
$line=~s/^\s+//; # trim leading whitespace for short pids
|
||||
@@ -1551,14 +1551,14 @@
|
||||
}
|
||||
|
||||
# if -N, set priority to 20
|
||||
-`renice 20 $$` if $niceFlag;
|
||||
+`@renice@ 20 $$` if $niceFlag;
|
||||
|
||||
# Couldn't find anywhere else to put this one...
|
||||
error("-sT only works with -P for now (too much data)")
|
||||
if $TFlag && !$plotFlag;
|
||||
|
||||
# get parent pid so we can check later to see it still there
|
||||
-$stat=`cat /proc/$$/stat`;
|
||||
+$stat=`@cat@ /proc/$$/stat`;
|
||||
$myPpid=(split(/\s+/, $stat))[3];
|
||||
|
||||
###############################
|
||||
@@ -2311,7 +2311,7 @@
|
||||
printBriefCounters('T');
|
||||
}
|
||||
|
||||
- `stty echo` if !$PcFlag && $termFlag && !$backFlag; # in brief mode, we turned it off
|
||||
+ `@stty@ echo` if !$PcFlag && $termFlag && !$backFlag; # in brief mode, we turned it off
|
||||
my $temp=(!$msgFlag) ? ' Try again with -m.' : '';
|
||||
print "No files selected contain the selected data.$temp\n" if !$numProcessed;
|
||||
exit(0);
|
||||
@@ -2453,7 +2453,7 @@
|
||||
open STDIN, '/dev/null' or logmsg("F", "Can't read /dev/null: $!");
|
||||
open STDOUT, '>/dev/null' or logmsg("F", "Can't write to /dev/null: $!");
|
||||
open STDERR, '>/dev/null' or logmsg("F", "Can't write to /dev/null: $!");
|
||||
- `echo $$ > $PidFile`;
|
||||
+ `@echo@ $$ > $PidFile`;
|
||||
|
||||
# Now that we're set up to start, if '--runas' has been sprecified we need to do a
|
||||
# few things that require privs before actually changing our UID. Also note the
|
||||
@@ -2469,8 +2469,8 @@
|
||||
$logname=(-d $filename) ? $filename : dirname($filename);
|
||||
$logname.="/$myHost-collectl-$yymm.log";
|
||||
|
||||
- `chown $runasUid $logname`;
|
||||
- `chgrp $runasGid $logname` if defined($runasGid);
|
||||
+ `@chown@ $runasUid $logname`;
|
||||
+ `@chgrp@ $runasGid $logname` if defined($runasGid);
|
||||
|
||||
# now we can change our process's ownership taking care to do the group first
|
||||
# since we won't be able to change anything once we change our UID.
|
||||
@@ -3244,7 +3244,7 @@
|
||||
# close logs cleanly and turn echo back on because when 'brief' we turned it off.
|
||||
closeLogs($subsys);
|
||||
unlink $PidFile if $daemonFlag;
|
||||
-`stty echo` if !$PcFlag && $termFlag && !$backFlag;
|
||||
+`@stty@ echo` if !$PcFlag && $termFlag && !$backFlag;
|
||||
|
||||
# clean up when in pure top mode
|
||||
if ($numTop && !$topVertFlag)
|
||||
@@ -4350,7 +4350,7 @@
|
||||
if (!-e $temp)
|
||||
{
|
||||
logmsg('W', "Creating directory '$temp'");
|
||||
- `mkdir $temp`;
|
||||
+ `@mkdir@ $temp`;
|
||||
}
|
||||
|
||||
# track number of times same file processed, primarily for options 'a/c'. in
|
||||
@@ -5363,7 +5363,7 @@
|
||||
|
||||
# build up the search list being extra neat and leaving
|
||||
# off possible duplicate /etc
|
||||
- $configFile="$BinDir/$ConfigFile;$etcDir/$ConfigFile";
|
||||
+ $configFile="$BinDir/../etc/$ConfigFile;$etcDir/$ConfigFile";
|
||||
$configFile.=";/etc/$ConfigFile" if $etcDir ne '/etc';
|
||||
}
|
||||
print "Config File Search Path: $configFile\n" if $debug & 1;
|
||||
@@ -5789,7 +5789,7 @@
|
||||
# what gets stored in /proc/XXX/stat and to make sure we look at the same
|
||||
# values dynamically as well as staticly, we better pull cmd from the stat
|
||||
# file itself.
|
||||
- @ps=`ps axo pid,ppid,uid,comm,user`;
|
||||
+ @ps=`@ps@ axo pid,ppid,uid,comm,user`;
|
||||
my $firstFilePass=1;
|
||||
foreach $process (@ps)
|
||||
{
|
||||
@@ -6228,7 +6228,7 @@
|
||||
$briefFlag=0;
|
||||
$verboseFlag=1;
|
||||
intervalPrint(time);
|
||||
- `stty echo` if !$PcFlag && $termFlag && !$backFlag;
|
||||
+ `@stty@ echo` if !$PcFlag && $termFlag && !$backFlag;
|
||||
}
|
||||
|
||||
sub error
|
||||
@@ -6241,7 +6241,7 @@
|
||||
# printText() will try to send error over socket and we want it local.
|
||||
$sockFlag=0 if $serverFlag;
|
||||
|
||||
- `stty echo` if !$PcFlag && $termFlag && !$backFlag;
|
||||
+ `@stty@ echo` if !$PcFlag && $termFlag && !$backFlag;
|
||||
logmsg("F", "Error: $text") if $daemonFlag;
|
||||
|
||||
# we can only call printText() when formatit loaded.
|
||||
Processing diff for: colmux
|
||||
--- a/colmux 2025-08-14 08:42:24.438419919 +0000
|
||||
+++ b/colmux 2025-08-15 07:38:22.003168089 +0000
|
||||
@@ -78,7 +78,7 @@
|
||||
my $License="colmux may be copied only under the terms of either the Artistic License\n";
|
||||
$License.= "or the GNU General Public License, which may be found in the source kit";
|
||||
|
||||
-my $Ping='/bin/ping';
|
||||
+my $Ping='@ping@';
|
||||
my $ResizePath='/usr/bin/resize:/usr/X11R6/bin/resize';
|
||||
my $Route='/sbin/route';
|
||||
my $Ifconfig='/sbin/ifconfig';
|
||||
@@ -235,7 +235,7 @@
|
||||
$Collectl="sudo $Collectl" if $sudoFlag;
|
||||
|
||||
# ok if host not in known_hosts and when not debugging be sure to turn off motd
|
||||
-my $Ssh='/usr/bin/ssh -o StrictHostKeyChecking=no -o BatchMode=yes';
|
||||
+my $Ssh='@ssh@ -o StrictHostKeyChecking=no -o BatchMode=yes';
|
||||
$Ssh.=" -o ServerAliveInterval=$keepalive" if $keepalive ne '';
|
||||
$Ssh.=" -q" unless $debug;
|
||||
|
||||
@@ -357,7 +357,7 @@
|
||||
# See if any host specs contain 'username@' & reset 'localhost' and
|
||||
# adjust maximum hostname length if necessary.
|
||||
my $hostlen=$hostWidth;
|
||||
-my $myhost=`hostname`;
|
||||
+my $myhost=`@hostname@`;
|
||||
chomp $myhost;
|
||||
|
||||
my (%usernames, %sshswitch, %aliases);
|
||||
@@ -510,7 +510,7 @@
|
||||
$line=~s/^\s+//; # can have leading space
|
||||
my $pid=(split(/\s+/, $line))[0];
|
||||
print "Killing ssh with pid: $pid\n" if $debug & 1;
|
||||
- `kill $pid`;
|
||||
+ `@kill@ $pid`;
|
||||
}
|
||||
sleep 1; # wait a tad for ssh in thread to exit
|
||||
close PS;
|
||||
@@ -983,7 +983,7 @@
|
||||
$line=~s/^\s+//;
|
||||
my $pid=(split(/\s+/, $line))[0];
|
||||
print "Killing ssh with pid: $pid\n" if $debug & 1;
|
||||
- `kill $pid`;
|
||||
+ `@kill@ $pid`;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1179,7 +1179,7 @@
|
||||
foreach my $host (keys %files)
|
||||
{
|
||||
print "Killing pid $files{$host}->{pid} for '$host'\n" if $debug & 1;
|
||||
- `kill -9 $files{$host}->{pid}`;
|
||||
+ `@kill@ -9 $files{$host}->{pid}`;
|
||||
#close $files{$host}->{fd} or error("Failed to close playback file for '$host'");
|
||||
}
|
||||
|
||||
Processing diff for: formatit.ph
|
||||
--- a/formatit.ph 2025-08-14 08:42:24.438419919 +0000
|
||||
+++ b/formatit.ph 2025-08-15 07:18:19.548190580 +0000
|
||||
@@ -20,19 +20,19 @@
|
||||
$rawPFlag=0; # always 0 when no files involved
|
||||
|
||||
# In some case, we need to know if we're root.
|
||||
- $rootFlag=`whoami`;
|
||||
+ $rootFlag=`@whoami@`;
|
||||
$rootFlag=($rootFlag=~/root/) ? 1 : 0;
|
||||
|
||||
# be sure to remove domain portion if present. also note we keep the hostname in
|
||||
# two formats, one in it's unaltered form (at least needed by lustre directory
|
||||
# parsing) as well as all lc because it displays nicer.
|
||||
- $Host=`hostname`;
|
||||
+ $Host=`@hostname@`;
|
||||
chomp $Host;
|
||||
$Host=(split(/\./, $Host))[0];
|
||||
$HostLC=lc($Host);
|
||||
|
||||
# when was system booted?
|
||||
- $uptime=(split(/\s+/, `cat /proc/uptime`))[0];
|
||||
+ $uptime=(split(/\s+/, `@cat@ /proc/uptime`))[0];
|
||||
$boottime=time-$uptime;
|
||||
|
||||
$Distro=cat('/etc/redhat-release') if -e '/etc/redhat-release';
|
||||
@@ -83,11 +83,11 @@
|
||||
if ($subsys=~/y/i && $slabinfoFlag || $slubinfoFlag)
|
||||
{
|
||||
$message='';
|
||||
- $message='/proc/slabinfo' if $slabinfoFlag && !(eval {`cat /proc/slabinfo 2>/dev/null` or die});
|
||||
- $message='/sys/slab' if $slubinfoFlag && !(eval {`cat /proc/slubinfo 2>/dev/null` or die});
|
||||
+ $message='/proc/slabinfo' if $slabinfoFlag && !(eval {`@cat@ /proc/slabinfo 2>/dev/null` or die});
|
||||
+ $message='/sys/slab' if $slubinfoFlag && !(eval {`@cat@ /proc/slubinfo 2>/dev/null` or die});
|
||||
if ($message ne '')
|
||||
{
|
||||
- my $whoami=`whoami`;
|
||||
+ my $whoami=`@whoami@`;
|
||||
chomp $whoami;
|
||||
disableSubsys('y', "/proc/slabinfo is not readable by $whoami");
|
||||
$interval=~s/(^\d*):\d+/$1:/ if $subsys!~/z/i; # remove int2 if not needed or we'll get error
|
||||
@@ -132,7 +132,7 @@
|
||||
|
||||
for (my $i=1; $i<$NumCpus; $i++)
|
||||
{
|
||||
- my $online=`cat /sys/devices/system/cpu/cpu$i/online`;
|
||||
+ my $online=`@cat@ /sys/devices/system/cpu/cpu$i/online`;
|
||||
chomp $online;
|
||||
|
||||
$cpuEnabled[$i]=$online;
|
||||
@@ -266,7 +266,7 @@
|
||||
$ibSpeed='??';
|
||||
if (-e '/sys/class/infiniband')
|
||||
{
|
||||
- $line=`cat /sys/class/infiniband/*/ports/1/rate 2>&1`;
|
||||
+ $line=`@cat@ /sys/class/infiniband/*/ports/1/rate 2>&1`;
|
||||
if ($line=~/\s*(\d+)\s+(\S)/)
|
||||
{
|
||||
$ibSpeed=$1;
|
||||
@@ -669,7 +669,7 @@
|
||||
{
|
||||
# Get Luster and SFS Versions before looking at any data structures in the
|
||||
# 'lustreCheck' routines because things change over time
|
||||
- $temp=`cat /proc/fs/lustre/version | grep lustre 2>/dev/null`;
|
||||
+ $temp=`@cat@ /proc/fs/lustre/version | grep lustre 2>/dev/null`;
|
||||
$temp=~/lustre: (\d+.*)/;
|
||||
$cfsVersion=$1;
|
||||
$sfsVersion='';
|
||||
@@ -716,7 +716,7 @@
|
||||
# The first step is to build up a hash of the sizes of all the
|
||||
# existing partitions. Since we're only doing this once, a 'cat's
|
||||
# overhead should be minimal
|
||||
- @partitions=`cat /proc/partitions`;
|
||||
+ @partitions=`@cat@ /proc/partitions`;
|
||||
foreach $part (@partitions)
|
||||
{
|
||||
# ignore blank lines and header
|
||||
@@ -778,7 +778,7 @@
|
||||
$temp=`head -n 1 /proc/slabinfo`;
|
||||
$temp=~/(\d+\.\d+)/;
|
||||
$SlabVersion=$1;
|
||||
- $NumSlabs=`cat /proc/slabinfo | wc -l`*1;
|
||||
+ $NumSlabs=`@cat@ /proc/slabinfo | wc -l`*1;
|
||||
chomp $NumSlabs;
|
||||
$NumSlabs-=2;
|
||||
|
||||
@@ -4127,7 +4127,7 @@
|
||||
$netSpeeds{$netName}='??';
|
||||
if ($line ne '')
|
||||
{
|
||||
- $speed=`cat $line 2>&1`;
|
||||
+ $speed=`@cat@ $line 2>&1`;
|
||||
chomp $speed;
|
||||
$line=~/.*\/(\S+)\/speed/;
|
||||
my $netName=$1;
|
||||
Processing diff for: graphite.ph
|
||||
--- a/graphite.ph 2025-08-14 08:42:24.442420106 +0000
|
||||
+++ b/graphite.ph 2025-08-14 08:44:07.351625049 +0000
|
||||
@@ -117,7 +117,7 @@
|
||||
# behavior for -f logs matches that of -A
|
||||
$rawtooFlag=1 if $filename ne '' && !$plotFlag;
|
||||
|
||||
- $graphiteMyHost=(!$graphiteFqdnFlag) ? `hostname` : `hostname -f`;
|
||||
+ $graphiteMyHost=(!$graphiteFqdnFlag) ? `@hostname@` : `@hostname@ -f`;
|
||||
chomp $graphiteMyHost;
|
||||
$graphiteMyHost =~ s/\./$graphiteEscape/g if $graphiteEscape ne '';
|
||||
|
||||
Processing diff for: vmsum.ph
|
||||
--- a/vmsum.ph 2025-08-14 08:42:24.442420106 +0000
|
||||
+++ b/vmsum.ph 2025-08-14 08:44:24.184414112 +0000
|
||||
@@ -20,8 +20,8 @@
|
||||
my $oneMB=1024*1024;
|
||||
my ($debug, $helpFlag, $instMin, $versionFlag, $zeroFlag);
|
||||
|
||||
-my $Ssh= '/usr/bin/ssh';
|
||||
-my $Ping='/bin/ping';
|
||||
+my $Ssh= '@ssh@';
|
||||
+my $Ping='@ping@';
|
||||
my $PingTimeout=1;
|
||||
|
||||
# these control writing the vm text file
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
my $lexprFlag=0;
|
||||
my $noNetMsg=''; # if not null, problem with n/w stats (very rare)
|
||||
-my $hostname=`hostname`;
|
||||
+my $hostname=`@hostname@`;
|
||||
chomp $hostname;
|
||||
|
||||
sub vmsumInit
|
||||
133
pkgs/by-name/co/collectl/0002-fix-install-script.patch
Normal file
133
pkgs/by-name/co/collectl/0002-fix-install-script.patch
Normal file
@ -0,0 +1,133 @@
|
||||
--- a/INSTALL 2025-08-14 08:46:43.845548078 +0000
|
||||
+++ b/INSTALL 2025-08-14 08:50:33.771706783 +0000
|
||||
@@ -1,28 +1,29 @@
|
||||
#!/bin/sh
|
||||
|
||||
-DESTDIR=${DESTDIR:="/"}
|
||||
+# Use Nix output directory instead of system paths
|
||||
+DESTDIR=${out}
|
||||
|
||||
-BINDIR=$DESTDIR/usr/bin
|
||||
-DOCDIR=$DESTDIR/usr/share/doc/collectl
|
||||
-SHRDIR=$DESTDIR/usr/share/collectl
|
||||
-MANDIR=$DESTDIR/usr/share/man/man1
|
||||
-SYSDDIR=$DESTDIR/usr/lib/systemd/system
|
||||
-ETCDIR=$DESTDIR/etc
|
||||
-INITDIR=$ETCDIR/init.d
|
||||
+BINDIR=$out/bin
|
||||
+DOCDIR=$out/share/doc/collectl
|
||||
+SHRDIR=$out/share/collectl
|
||||
+MANDIR=$out/share/man/man1
|
||||
+SYSDDIR=$out/lib/systemd/system
|
||||
+ETCDIR=$out/etc
|
||||
+INITDIR=$out/etc/init.d
|
||||
|
||||
mkdir -p $BINDIR
|
||||
mkdir -p $DOCDIR
|
||||
mkdir -p $SHRDIR
|
||||
mkdir -p $ETCDIR
|
||||
mkdir -p $MANDIR
|
||||
-mkdir -p $INITDIR
|
||||
+# Skip init.d creation for Nix
|
||||
mkdir -p $SHRDIR/util
|
||||
mkdir -p $DESTDIR/var/log/collectl
|
||||
|
||||
cp collectl colmux $BINDIR
|
||||
cp collectl.conf $ETCDIR
|
||||
cp man1/* $MANDIR
|
||||
-cp initd/* $INITDIR
|
||||
+# Skip init scripts for Nix
|
||||
|
||||
cp docs/* $DOCDIR
|
||||
cp GPL ARTISTIC COPYING $DOCDIR
|
||||
@@ -42,87 +43,12 @@
|
||||
# Force in case redoing the install and files already zipped
|
||||
gzip -f $MANDIR/collectl*
|
||||
|
||||
-chmod 755 $INITDIR/collectl*
|
||||
+# Skip chmod on init scripts for Nix
|
||||
chmod 444 $ETCDIR/collectl.conf
|
||||
chmod 755 $BINDIR/collectl
|
||||
chmod 444 $DOCDIR/ARTISTIC $DOCDIR/COPYING $DOCDIR/GPL
|
||||
chmod 444 $SHRDIR/*ph
|
||||
chmod 755 $SHRDIR/util/*
|
||||
|
||||
-# remove any stale versions in case the names/numbers used have changed.
|
||||
-# on new ROCKS installion 'rm' isn't there yet! [thanks roy]
|
||||
-if [ -x /bin/rm ] ; then
|
||||
- /bin/rm -f $INITDIR/rc*.d/*collectl
|
||||
- /bin/rm -f $ETCDIR/rc.d/rc*.d/*collectl
|
||||
-fi
|
||||
-
|
||||
-# only if systemd is supported
|
||||
-if [ -d $SYSDDIR ]; then
|
||||
- cp service/collectl.service $SYSDDIR
|
||||
-fi
|
||||
-
|
||||
-# Try and decide which distro this is based on distro specific files.
|
||||
-distro=1
|
||||
-if [ -f /sbin/yast ]; then
|
||||
- distro=2
|
||||
- mv -f $INITDIR/collectl-suse $INITDIR/collectl
|
||||
- rm -f $INITDIR/collectl-debian
|
||||
- rm -f $INITDIR/collectl-generic
|
||||
-fi
|
||||
-
|
||||
-# debian
|
||||
-if [ -f /usr/sbin/update-rc.d ]; then
|
||||
- distro=3
|
||||
- mv -f $INITDIR/collectl-debian $INITDIR/collectl
|
||||
- rm -f $INITDIR/collectl-suse
|
||||
- rm -f $INITDIR/collectl-generic
|
||||
-
|
||||
- # only if we're installing under /
|
||||
- [ "$DESTDIR" = "/" ] && update-rc.d collectl defaults
|
||||
-fi
|
||||
-
|
||||
-# redhat
|
||||
-if [ -f /etc/redhat-release ]; then
|
||||
- distro=4
|
||||
- rm -f $INITDIR/collectl-suse
|
||||
- rm -f $INITDIR/collectl-debian
|
||||
- rm -f $INITDIR/collectl-generic
|
||||
- if [ -f /usr/sbin/chkconfig ]; then
|
||||
- [ "$DESTDIR" = "/" ] && chkconfig --add collectl
|
||||
- fi
|
||||
-# Not needed for RHEL8 and higher
|
||||
-fi
|
||||
-
|
||||
-# gentoo
|
||||
-if [ -f $ETCDIR/gentoo-release ]; then
|
||||
- distro=5
|
||||
- mv -f $INITDIR/collectl-generic $INITDIR/collectl
|
||||
- rm -f $INITDIR/collectl-suse
|
||||
- rm -f $INITDIR/collectl-debian
|
||||
- [ "$DESTDIR" = "/" ] && rc-update -a collectl default
|
||||
-fi
|
||||
-
|
||||
-# Generic Distros
|
||||
-# If /etc/init.d doesn't exist and/or there's no way to use chkconfig or
|
||||
-# rc-update you're going to have to add some custom code below...
|
||||
-if [ ${distro} = 1 ]; then
|
||||
-
|
||||
- mv -f $INITDIR/collectl-generic $INITDIR/collectl
|
||||
- rm -f $INITDIR/collectl-suse
|
||||
- rm -f $INITDIR/collectl-debian
|
||||
-
|
||||
- # If in not installing under / there's nothing extra do
|
||||
- [ $DESTDIR != "/" ] && exit 0
|
||||
-
|
||||
- # figure out how to handle reboots
|
||||
- if [ -f /sbin/chkconfig ]; then
|
||||
- chkconfig --add collectl
|
||||
- elif [ -f /sbin/rc-update ]; then
|
||||
- rc-update -a collectl default
|
||||
-# RHEL9 has no chkconfig
|
||||
- elif [ -f /usr/bin/systemctl ]; then
|
||||
- systemctl enable collectl
|
||||
- else
|
||||
- echo "could not figure out how to enable restarting across reboots"
|
||||
- fi
|
||||
-fi
|
||||
+# Skip all distro-specific service installation for Nix
|
||||
+# Nix manages services differently through NixOS modules
|
||||
126
pkgs/by-name/co/collectl/package.nix
Normal file
126
pkgs/by-name/co/collectl/package.nix
Normal file
@ -0,0 +1,126 @@
|
||||
{
|
||||
callPackage,
|
||||
lib,
|
||||
stdenv,
|
||||
fetchFromGitHub,
|
||||
replaceVars,
|
||||
|
||||
# Runtime dependencies
|
||||
coreutils,
|
||||
dmidecode,
|
||||
gnugrep,
|
||||
inetutils,
|
||||
openssh,
|
||||
pciutils,
|
||||
perl,
|
||||
procps,
|
||||
rpm,
|
||||
util-linux,
|
||||
xterm,
|
||||
|
||||
# Dependencies
|
||||
ipmitool,
|
||||
}:
|
||||
|
||||
let
|
||||
inherit (lib) getExe getExe' genAttrs;
|
||||
|
||||
# Define tool dependencies for script patches
|
||||
scriptDeps =
|
||||
let
|
||||
mkTools = pkg: tools: genAttrs tools (tool: getExe' pkg tool);
|
||||
in
|
||||
# Tools from various packages
|
||||
(mkTools coreutils [
|
||||
"cat"
|
||||
"whoami"
|
||||
"pwd"
|
||||
"uname"
|
||||
"date"
|
||||
"mkdir"
|
||||
"chown"
|
||||
"chgrp"
|
||||
"echo"
|
||||
"kill"
|
||||
"cd"
|
||||
"stty"
|
||||
])
|
||||
// (mkTools util-linux [ "renice" ])
|
||||
// (mkTools gnugrep [
|
||||
"grep"
|
||||
"egrep"
|
||||
])
|
||||
// (mkTools inetutils [
|
||||
"hostname"
|
||||
"ping"
|
||||
])
|
||||
// (mkTools procps [ "ps" ])
|
||||
// (mkTools pciutils [ "lspci" ])
|
||||
// (mkTools xterm [ "resize" ])
|
||||
// (mkTools dmidecode [ "dmidecode" ])
|
||||
// (mkTools rpm [ "rpm" ])
|
||||
// {
|
||||
# Single-tool packages
|
||||
ssh = getExe openssh;
|
||||
ipmitool = getExe ipmitool;
|
||||
};
|
||||
in
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "collectl";
|
||||
version = "4.3.20.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "sharkcz";
|
||||
repo = "collectl";
|
||||
rev = finalAttrs.version;
|
||||
hash = "sha256-OJGCuxWvoId1cQ5Ugiav5/T/NzddwhM+gG3s0BnYYz0=";
|
||||
};
|
||||
|
||||
strictDeps = true;
|
||||
|
||||
patches = [
|
||||
(replaceVars ./0001-scripts-external-executable-calls.patch scriptDeps)
|
||||
./0002-fix-install-script.patch
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
perl
|
||||
dmidecode
|
||||
ipmitool
|
||||
];
|
||||
|
||||
dontBuild = true;
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
bash ./INSTALL
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
passthru.tests.run = callPackage ./test.nix { };
|
||||
|
||||
meta = {
|
||||
description = "Performance monitoring tool for Linux systems";
|
||||
longDescription = ''
|
||||
Collectl is a light-weight performance monitoring tool capable of reporting
|
||||
interactively as well as logging to disk. It reports statistics on cpu, disk,
|
||||
infiniband, lustre, memory, network, nfs, process, quadrics, slabs and more
|
||||
in easy to read format.
|
||||
|
||||
The `--config` option allows specifying a custom configuration file path,
|
||||
overriding the default configuration file in the package's etc directory.
|
||||
'';
|
||||
homepage = "https://github.com/sharkcz/collectl";
|
||||
downloadPage = "https://github.com/sharkcz/collectl/releases";
|
||||
license = with lib.licenses; [
|
||||
artistic1
|
||||
gpl1Plus
|
||||
];
|
||||
maintainers = with lib.maintainers; [ seven_bear ];
|
||||
platforms = lib.platforms.linux;
|
||||
mainProgram = "collectl";
|
||||
};
|
||||
})
|
||||
44
pkgs/by-name/co/collectl/test.nix
Normal file
44
pkgs/by-name/co/collectl/test.nix
Normal file
@ -0,0 +1,44 @@
|
||||
{
|
||||
runCommand,
|
||||
collectl,
|
||||
coreutils,
|
||||
}:
|
||||
|
||||
runCommand "collectl-test"
|
||||
{
|
||||
nativeBuildInputs = [
|
||||
collectl
|
||||
coreutils
|
||||
];
|
||||
meta.timeout = 60;
|
||||
}
|
||||
''
|
||||
# Test basic functionality - limit to 5 seconds to avoid hanging
|
||||
timeout 5s collectl -c1 >/dev/null || true
|
||||
|
||||
# Test that explicit config file option still works with original config
|
||||
timeout 5s collectl --config ${collectl}/etc/collectl.conf -c1 >/dev/null || true
|
||||
|
||||
# Test custom config file path override
|
||||
custom_config_path=$(mktemp)
|
||||
cp ${collectl}/etc/collectl.conf "$custom_config_path"
|
||||
|
||||
# Test that collectl uses the custom config file path
|
||||
config_output=$(timeout 5s collectl --config "$custom_config_path" -c1 -d1 2>&1 | grep -i "Config File Search Path:" | head -1)
|
||||
expected_output="Config File Search Path: $custom_config_path"
|
||||
|
||||
if [ "$config_output" = "$expected_output" ]; then
|
||||
echo "✓ Custom config file path test passed"
|
||||
else
|
||||
echo "✗ Custom config file path test failed"
|
||||
echo "Expected: $expected_output"
|
||||
echo "Got: $config_output"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Cleanup
|
||||
rm -f "$custom_config_path"
|
||||
|
||||
# Signal success
|
||||
touch $out
|
||||
''
|
||||
Loading…
x
Reference in New Issue
Block a user