#! /usr/bin/perl # # slxsettings - OpenSLX-script to show & change local settings # # (c) 2006 - OpenSLX.com # # Oliver Tappe # use strict; my $abstract = q[ slxsettings This script can be used to show or change the local settings for OpenSLX. Any cmdline-argument passed to this script will change the local OpenSLX settings file (usually /etc/opt/openslx/settings.local). If you invoke the script without any arguments, it will print the current settings and exit. Please use the --man option in order to read the full manual. ]; use Getopt::Long qw(:config pass_through); use Pod::Usage; # add the lib-folder and the folder this script lives in to perl's search # path for modules: use FindBin; use lib "$FindBin::RealBin/../lib"; # production path use lib "$FindBin::RealBin/.."; # development path use OpenSLX::Basics; use OpenSLX::ConfigDB qw(:access :manipulation); my ( $noShow, $quiet, @remove, %cmdlineSettings, $helpReq, $manReq, $versionReq, ); GetOptions( 'noshow' => \$noShow, # will display current configuration 'quiet' => \$quiet, # will avoid printing anything 'remove=s' => \@remove, # will avoid printing anything 'setting=s' => \%cmdlineSettings, # accepts setting for db-table 'settings' 'help|?' => \$helpReq, 'man' => \$manReq, 'version' => \$versionReq, ); pod2usage(-msg => $abstract, -verbose => 0, -exitval => 1) if $helpReq; pod2usage(-verbose => 2) if $manReq; if ($versionReq) { system('slxversion'); exit 1; } openslxInit() or pod2usage(2); # fetch slxconf entries... my $openslxDB = connectConfigDB(); my $currSettings = fetchSettings($openslxDB); # ...and fetch current content of local settings file... open(SETTINGS, "< $openslxConfig{'config-path'}/settings.local"); $/ = undef; my $settings = ; close(SETTINGS); my $changeCount; # ...set new values... foreach my $key (sort keys %cmdlineConfig) { next if $key eq 'config-path'; # config-path can't be changed, it is used to find settings.local my $value = $cmdlineConfig{$key}; next if !defined $value; vlog 0, _tr('setting %s to <%s>', $key, $value) unless $quiet; $key =~ tr[-][_]; my $externalKey = "SLX_".uc($key); if (!($settings =~ s[^\s*$externalKey=.*?$][$externalKey=$value]ms)) { $settings .= "$externalKey=$value\n"; } $changeCount++; } # ...remove any keys we should do away with... foreach my $key (@remove) { if (!exists $cmdlineConfig{$key}) { vlog 0, _tr('ignoring unknown key <%s>', $key); next; } vlog 0, _tr('removing %s', $key) unless $quiet; $key =~ tr[-][_]; my $externalKey = "SLX_".uc($key); $settings =~ s[^\s*$externalKey=.*?$][]ms; $changeCount++; } # ... and write local settings file if necessary if ($changeCount) { my $f = "$openslxConfig{'config-path'}/settings.local"; open(SETTINGS, "> $f") or die _tr('Unable to write local settings file <%s> (%s)', $f, $!); print SETTINGS $settings; close(SETTINGS); } if (scalar(keys %cmdlineSettings) > 0) { foreach my $key (keys %cmdlineSettings) { if (exists $currSettings->{$key}) { changeSettings($openslxDB, { $key => $cmdlineSettings{$key} }); $changeCount++; } else { die _tr("unknown settings key <%s>!\n", $key); } } $currSettings = fetchSettings($openslxDB); } if (!($noShow || $quiet)) { my $text = $changeCount ? "resulting settings:" : "current settings:"; print "\n"._tr($text)."\n"; foreach my $key (sort keys %openslxConfig) { print qq[\t$key="$openslxConfig{$key}"\n]; } print "slxconf:\n"; foreach my $key (sort keys %$currSettings) { print qq[\t$key="$currSettings->{$key}"\n]; } } __END__ =head1 NAME slxsettings - OpenSLX-script to show & change local settings =head1 SYNOPSIS slxsettings [options] Script Options: --noshow do not print resulting settings --quiet do not print anything --remove= remove given key from settings OpenSLX Options: --base-path= basic path to project files --bin-path= path to binaries and scripts --config-path= path to configuration files --db-basepath= basic path to openslx database --db-datadir= data folder created under db-basepath --db-name= name of database --db-spec= full DBI-specification of database --db-type= type of database to connect to --export-path= path to root of all exported filesystems --locale= locale to use for translations --logfile= file to write logging output to --private-path= path to private data --public-path= path to public (client-accesible) data --share-path= path to sharable data --temp-path= path to temporary data --tftpboot-path= path to root of tftp-server --verbose-level= level of logging verbosity (0-3) General Options: --help brief help message --man full documentation --version show version =head1 OPTIONS =head3 Script Options =over 8 =item B<--noshow> Avoids printing the resulting settings after any changes have been applied. =item B<--quiet> Runs the script without printing anything. =item B<--remove=> Removes given key from settings (apply more than once to remove several keys). =back =head3 OpenSLX Options =over 8 =item B<--base-path=> Sets basic path to project files. Default is $SLX_BASE_PATH (usually F). =item B<--bin-path=> Sets path to binaries and scripts. Default is $SLX_BASE_PATH/bin (usually F). =item B<--config-path=> Sets path to configuration files. Default is $SLX_CONFIG_PATH (usually F). =item B<--db-basepath=> Sets basic path to openslx database. Default is $SLX_DB_PATH (usually F). =item B<--db-datadir=> Sets data folder created under db-basepath. Default is $SLX_DB_DATADIR (usually empty as it depends on db-type whether or not such a directory is required at all). =item B<--db-name=> Gives the name of the database to connect to. Default is $SLX_DB_NAME (usually C). =item B<--db-spec=> Gives the full DBI-specification of database to connect to. Content depends on the db-type. Default is $SLX_DB_SPEC (usually empty as it will be built automatically). =item B<--db-type=> Sets the type of database to connect to (CSV, SQLite, mysql, ...). Default $SLX_DB_TYPE (usually C). =item B<--export-path=> Sets path to root of all exported filesystems. For each type of export (NFS, NBD, ...) a separate folder will be created in here. Default is $SLX_EXPORT_PATH (usually F. =item B<--locale=> Sets the locale to use for translations. Defaults to the system's standard locale. =item B<--logfile=> Specifies a file where logging output will be written to. Default is to log to STDERR. =item B<--private-path=> Sets path to private data, where the config-db, vendor_oses and configurational extensions will be stored. Default is $SLX_PRIVATE_PATH (usually F. =item B<--public-path=> Sets path to public (client-accesible) data. Default is $SLX_PUBLIC_PATH (usually F. =item B<--share-path=> Sets path to sharable data, where distro-specs and functionality templates will be stored. Default is $SLX_SHARE_PATH (usually F. =item B<--temp-path=> Sets path to temporary data. Default is $SLX_TEMP_PATH (usually F. =item B<--tftpboot-path=> Sets path to root of tftp-server from which clients will access their files. Default is $SLX_TFTPBOOT_PATH (usually F. =item B<--verbose-level=> Sets the level of logging verbosity (0-3). Default is $SLX_VERBOSE_LEVEL (usually 0, no logging). =back =head3 General Options =over 8 =item B<--help> Prints a brief help message and exits. =item B<--man> Prints the manual page and exits. =item B<--version> Prints the version and exits. =back =head1 DESCRIPTION B can be used to show or change the local settings for OpenSLX. Any cmdline-argument passed to this script will change the local OpenSLX settings file (usually /etc/opt/openslx/settings.local). If you invoke the script without any arguments, it will print the current settings and exit.