Talk:Variables
From FAIWiki
Hi Mr Fai!
das variablen-script, von dem ich auf dem Workshop geredet habe ist fertig, das ergebnis sieht auf meinem Testbaum so aus:
$VAR1 = {
'$sd' => [
'task_mountdisks'
],
'$name' => [
'defnop'
],
'$thislog' => [
'save_log_local',
'save_log_remote_shell'
],
'$DO_INIT_TASKS' => [
'task_confdir',
'task_extrbase',
'task_setup',
'task_action',
'task_faiend'
]
};
Das Script selbst so:
#! /usr/bin/perl -w
use strict;
use File::Find;
use English;
my $dir = "/usr/lib/fai";
my @files;
my $klammerRegex;
$klammerRegex = qr/
\{
(
[^{}] | (??{ $klammerRegex })
)*
\}
/sx;
sub wanted;
# Traverse desired filesystems
find({wanted => \&wanted},$dir);
sub wanted {
my ($dev,$ino,$mode,$nlink,$uid,$gid);
return if m/.deb$/;
(($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
-f _
&& push @files,$File::Find::name;
}
my @FAI_VARIABLES=qw(BASH BASH_VERSION BOOT_DEVICE BOOT_IMAGE BOOT_PARTITION
BROADCAST COLOR_FAI_LOGO CONSOLE DEBIAN_FRONTEND DIRSTACK DNSDOMAIN DNSSRVS
DNSSRVS_1 DOMAIN DO_INIT_TASKS FAI FAI_ACTION FAI_CONSOLEFONT FAI_FLAGS
FAI_KEYMAP FAI_LOCATION FAI_LOGPROTO FAI_REMOTECP FAI_REMOTESH FAI_ROOT
FAI_RUNDATE FAI_VERSION FUNCNAME GATEWAYS GATEWAYS_1 GROUPS HOSTNAME HOSTTYPE
IFS INIT_VERSION INSTALL IPADDR LOGDIR LOGPASSWD LOGREMOTEDIR LOGSERVER
LOGUSER MACHTYPE MNTPOINT NETMASK NETWORK OLDPWD OPTERR OPTIND OSTYPE OS_TYPE
PATH PIPESTATUS PREVLEVEL PS4 ROOTCMD ROOT_PARTITION RUNLEVEL SERVERINTERFACE
SHELL SHLVL TEMP TERM UTC addpackages HOST backup bserver cfclasses classes
console createvt device_size disklist diskvar faimond files fstab hdparm
hserver ip kernelimage kernelversion liloappend lpipe mirrorhost moduleslist
moduleslog monserver netdevices netdevices_all netdevices_up nfsroot noexec
printers rcslog renewclass romountopt rundir sndhostname sshd stamp target
taskname terror timezone);
my %variables;
my ($fai_variable,$key,$value,$var);
for (@files) {
chomp $_;
local $/;
my $file;
PrivoxyWindowOpen(FILE,"<$_",) or die "can't open $_: $!";
while (<FILE>) {
$file="$file$_";
}
while ($file =~ m/(\w+)\(\)\s+$klammerRegex/gsx){
my $function = $MATCH;
my $functionName = $1;
while ($function =~ m/\$\w+/gs) {
my $variable = $MATCH;
$variables{$variable} = []
unless exists $variables{"$variable"};
my $MATCHED=0;
foreach (@{ $variables{"$variable"} }) {
if ( $_ eq $functionName) {
$MATCHED=1;
}
}
push (@{ $variables{"$variable"} }, $functionName)
unless $MATCHED==1;
}
}
close(FILE);
}
# Wenn man es nicht im dumper format haben will
#foreach $var ( keys %variables ){
# print "$var:\t@{ $variables{$var} }\n";
#}
use Data::Dumper;
print Dumper \%variables;
Die nächste Version soll alle Variablen noch selbst extrahieren können, aber einen Überblick bekommt man zumindest erstmal.
