diff options
Diffstat (limited to 'sboconfig')
-rwxr-xr-x | sboconfig | 196 |
1 files changed, 0 insertions, 196 deletions
diff --git a/sboconfig b/sboconfig deleted file mode 100755 index c7ea9b0..0000000 --- a/sboconfig +++ /dev/null @@ -1,196 +0,0 @@ -#!/usr/bin/perl -# -# vim: ts=4:noet -# -# sboconfig -# script to handle sbotools configuration -# -# authors: Jacob Pipkin <j@dawnrazor.net> -# Luke Williams <xocel@iquidus.org> -# Andreas Guldstrand <andreas.guldstrand@gmail.com> -# maintainer: Slack Coder <slackcoder@server.ky> - -use 5.16.0; -use strict; -use warnings FATAL => 'all'; -use SBO::Lib qw/ _ERR_USAGE slurp usage_error script_error open_fh %config $conf_dir $conf_file show_version /; -use File::Basename; -use Getopt::Long qw(:config no_ignore_case_always); -use File::Copy; -use File::Path qw(make_path); -use File::Temp qw(tempfile);; - -my $self = basename($0); - -sub show_usage { - print <<"EOF"; -Usage: $self [options] [arguments] - -Options: - -h|--help: - this screen. - -v|--version: - version information. - -l|--list: - show current options. - -Config options (defaults shown): - -c|--clean FALSE: - NOCLEAN: if TRUE, do NOT clean up after building by default. - -d|--distclean FALSE: - DISTCLEAN: if TRUE, DO clean distfiles by default after building. - -j|--jobs FALSE: - JOBS: numeric -j setting to feed to make for multicore systems. - -g|--gpg-key D3076BC3E783EE747F09B8B70368EF579C7BA3B6: - GPG_KEY GPG key ID for verification. - -p|--pkg-dir FALSE: - PKG_DIR: set a directory to store packages in. - -s|--sbo-home /usr/sbo: - SBO_HOME: set the SBo directory. - -o|--local-overrides FALSE: - LOCAL_OVERRIDES: a directory containing local overrides. - -V|--slackware-version FALSE: - SLACKWARE_VERSION: use the SBo repository for this version. - -r|--repo FALSE: - REPO: use a repository other than SBo. - -EOF - return 1; -} - -my %options; - -GetOptions(\%options, 'help|h', 'version|v', 'list|l', 'noclean|c=s', - 'distclean|d=s', 'jobs|j=s', 'pkg-dir|p=s', 'sbo-home|s=s', - 'local-overrides|o=s', 'slackware-version|V=s', 'repo|r=s', 'gpg-key|g=s'); - -if ($options{help}) { show_usage(); exit 0 } -if ($options{version}) { show_version(); exit 0 } - -my %valid_confs = ( - noclean => 'NOCLEAN', - distclean => 'DISTCLEAN', - jobs => 'JOBS', - 'gpg-key' => 'GPG_KEY', - 'pkg-dir' => 'PKG_DIR', - 'sbo-home' => 'SBO_HOME', - 'local-overrides' => 'LOCAL_OVERRIDES', - 'slackware-version' => 'SLACKWARE_VERSION', - 'repo' => 'REPO', -); - -my %params = ( - NOCLEAN => 'c|--noclean', - DISTCLEAN => 'd|--distclean', - JOBS => 'j|--jobs', - GPG_KEY => 'g|--gpg-key', - PKG_DIR => 'p|--pkg-dir', - SBO_HOME => 's|--sbo-home', - LOCAL_OVERRIDES => 'o|--local-overrides', - SLACKWARE_VERSION => 'V|--slackware-version', - REPO => 'r|--repo', -); - -if (exists $options{list}) { - my @keys = sort {$a cmp $b} keys %config; - say "sboconfig -$params{$_}:\n $_=$config{$_}" for @keys; - exit 0; -} - -if (not %options) { - show_usage(); - exit 0; -} - -# setup what's being changed, sanity check. -my %changes; -for my $key (keys %valid_confs) { - my $value = $valid_confs{$key}; - $changes{$value} = $options{$key} if exists $options{$key}; -} - -my $warn = 'You have provided an invalid parameter for'; - -if (exists $changes{NOCLEAN}) { - usage_error("$warn -c") unless $changes{NOCLEAN} =~ /^(TRUE|FALSE)$/; -} -if (exists $changes{DISTCLEAN}) { - usage_error("$warn -d") unless $changes{DISTCLEAN} =~ /^(TRUE|FALSE)$/; -} -if (exists $changes{JOBS}) { - usage_error("$warn -j") unless $changes{JOBS} =~ /^(\d+|FALSE)$/; -} -if (exists $changes{GPG_KEY}) { - usage_error("$warn -g") unless $changes{GPG_KEY} =~ /^([0-9A-F]+|FALSE)$/; -} -if (exists $changes{PKG_DIR}) { - usage_error("$warn -p") unless $changes{PKG_DIR} =~ qr#^(/|FALSE$)#; -} -if (exists $changes{SBO_HOME}) { - usage_error("$warn -s") unless $changes{SBO_HOME} =~ qr#^(/|FALSE$)#; -} -if (exists $changes{LOCAL_OVERRIDES}) { - usage_error("$warn -o") unless $changes{LOCAL_OVERRIDES} =~ qr#^(/|FALSE$)#; -} -if (exists $changes{SLACKWARE_VERSION}) { - usage_error("$warn -V") unless $changes{SLACKWARE_VERSION} =~ m/^(\d+\.\d+|FALSE)$/; -} - -unless ($< == 0) { - warn "This script requires root privileges.\n"; - exit _ERR_USAGE; -} - -sub config_write { - script_error('config_write requires at least two arguments.') unless @_ >= 2; - - if (! -d $conf_dir) { - mkdir $conf_dir or usage_error("Unable to create $conf_dir. Exiting."); - } - - my $conf = slurp($conf_file) || ''; - _fixup_conf($conf); - - while (@_ >= 2) { - my $key = shift; - my $val = shift; - say "Setting $key to $val..."; - - if ($conf =~ /^\Q$key\E=/m) { - $conf =~ s/^\Q$key\E=.*$/$key=$val/m; - } else { - $conf .= "$key=$val\n"; - } - } - - _fixup_conf($conf); - - my ($conffh, $exit) = open_fh($conf_file, '>'); - if ($exit) { - warn $conffh; - exit $exit; - } - print {$conffh} $conf; -} - -# make sure there are no duplicate keys in the config -sub _fixup_conf { - my @lines = split /\n/, $_[0]; - my @fixed; - my %keys; - foreach my $line (@lines) { - # if it's a comment or blank line, just pass it through - if ($line =~ /^(#|\s*$)/) { push @fixed, $line; next; } - - my ($key, $val) = split /=/, $line; - next if exists $keys{$key}; - $keys{$key}++; - push @fixed, $line; - } - - $_[0] = join "\n", @fixed, ''; # make sure we end with a newline if there are any lines -} - -config_write(%changes) if %changes; - -exit 0; |