diff options
author | Dexter Morgan <dmorgan@mageia.org> | 2011-06-02 20:51:35 +0000 |
---|---|---|
committer | Dexter Morgan <dmorgan@mageia.org> | 2011-06-02 20:51:35 +0000 |
commit | a9b2bdafaf625d10aef2f476aa4014fd36c846bc (patch) | |
tree | 2364afc0ee6739b59a25c44d68c9f003bcaf03d9 /perl-install/standalone.pm | |
download | drakx-a9b2bdafaf625d10aef2f476aa4014fd36c846bc.tar drakx-a9b2bdafaf625d10aef2f476aa4014fd36c846bc.tar.gz drakx-a9b2bdafaf625d10aef2f476aa4014fd36c846bc.tar.bz2 drakx-a9b2bdafaf625d10aef2f476aa4014fd36c846bc.tar.xz drakx-a9b2bdafaf625d10aef2f476aa4014fd36c846bc.zip |
Branch for updates
Diffstat (limited to 'perl-install/standalone.pm')
-rw-r--r-- | perl-install/standalone.pm | 346 |
1 files changed, 346 insertions, 0 deletions
diff --git a/perl-install/standalone.pm b/perl-install/standalone.pm new file mode 100644 index 000000000..2dd530254 --- /dev/null +++ b/perl-install/standalone.pm @@ -0,0 +1,346 @@ +package standalone; # $Id: standalone.pm 262870 2009-10-27 10:53:55Z tv $ + +use c; +use strict; +use common qw(N N_ if_ backtrace); +use Config; + +BEGIN { unshift @::textdomains, 'libDrakX-standalone' } + +#- for sanity (if a use standalone is made during install, MANY problems will happen) +require 'log.pm'; #- "require log" causes some pb, perl thinking that "log" is the log() function +if ($::isInstall) { + log::l('ERROR: use standalone made during install :-('); + log::l('backtrace: ' . backtrace()); +} +$::isStandalone = 1; + +$ENV{SHARE_PATH} ||= "/usr/share"; + +eval { #- allow standalone.pm to be used in drakxtools-backend without perl-Locale-gettext + c::init_setlocale(); + Locale::gettext::bindtextdomain('libDrakX', "/usr/share/locale"); +}; + +$::license = N_("This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +"); + +my $progname = common::basename($0); + +my %usages = ( + 'diskdrake' => "[--{" . join(",", qw(hd nfs smb dav removable fileshare)) . "}]", + 'drakbackup' => N_("[--config-info] [--daemon] [--debug] [--default] [--show-conf] +Backup and Restore application + +--default : save default directories. +--debug : show all debug messages. +--show-conf : list of files or directories to backup. +--config-info : explain configuration file options (for non-X users). +--daemon : use daemon configuration. +--help : show this message. +--version : show version number. +"), + + 'drakboot' => N_("[--boot] +OPTIONS: + --boot - enable to configure boot loader +default mode: offer to configure autologin feature"), + 'drakbug' => N_("[OPTIONS] [PROGRAM_NAME] + +OPTIONS: + --help - print this help message. + --report - program should be one of %s tools + --incident - program should be one of %s tools"), + 'drakconnect' => N_("[--add] + --add - \"add a network interface\" wizard + --del - \"delete a network interface\" wizard + --skip-wizard - manage connections + --internet - configure internet + --wizard - like --add"), + 'drakfont' => N_(" +Font Importation and monitoring application + +OPTIONS: +--windows_import : import from all available windows partitions. +--xls_fonts : show all fonts that already exist from xls +--install : accept any font file and any directory. +--uninstall : uninstall any font or any directory of font. +--replace : replace all font if already exist +--application : 0 none application. + : 1 all application available supported. + : name_of_application like so for staroffice + : and gs for ghostscript for only this one."), + 'draksec' => "[--debug] +--debug: print debugging information", + 'drakTermServ' => N_("[OPTIONS]... +%s Terminal Server Configurator +--enable : enable MTS +--disable : disable MTS +--start : start MTS +--stop : stop MTS +--adduser : add an existing system user to MTS (requires username) +--deluser : delete an existing system user from MTS (requires username) +--addclient : add a client machine to MTS (requires MAC address, IP, nbi image name) +--delclient : delete a client machine from MTS (requires MAC address, IP, nbi image name)"), + 'drakxtv' => "[--no-guess]", + 'drakupdate_fstab' => " [--add | --del] <device>\n", + 'keyboardrake' => N_("[keyboard]"), + 'logdrake' => N_("[--file=myfile] [--word=myword] [--explain=regexp] [--alert]"), + 'net_monitor' => N_("[OPTIONS] +Network & Internet connection and monitoring application + +--defaultintf interface : show this interface by default +--connect : connect to internet if not already connected +--disconnect : disconnect to internet if already connected +--force : used with (dis)connect : force (dis)connection. +--status : returns 1 if connected 0 otherwise, then exit. +--quiet : do not be interactive. To be used with (dis)connect."), + 'printerdrake' => " [--skiptest] [--cups] [--lprng] [--lpd] [--pdq]", + 'rpmdrake' => N_("[OPTION]... + --no-confirmation do not ask first confirmation question in %s Update mode + --no-verify-rpm do not verify packages signatures + --changelog-first display changelog before filelist in the description window + --merge-all-rpmnew propose to merge all .rpmnew/.rpmsave files found"), + 'scannerdrake' => N_("[--manual] [--device=dev] [--update-sane=sane_source_dir] [--update-usbtable] [--dynamic=dev]"), + 'XFdrake' => N_(" [everything] + XFdrake [--noauto] monitor + XFdrake resolution"), + ); + +$usages{$_} = $usages{rpmdrake} foreach qw(rpmdrake-remove MageiaUpdate); +$usages{Xdrakres} = $usages{XFdrake}; + + +sub exit { + explanations('### Program is exiting ###'); + CORE::exit(@_); +} + +sub __exit { + explanations('### Program is exiting ###'); + c::_exit(@_); +} + + +sub real_version { + return "VER"; # version automatically set from Makefile +} + +sub version() { + print 'Drakxtools version ' . real_version() . ' +Copyright (C) 1999-2008 Mandriva by <install@mandriva.com> +', $::license, "\n"; +} + +if (!$::no_global_argv_parsing) { +my ($i, @new_ARGV); +foreach (@ARGV) { + $i++; + if (/^-(-help|h)$/) { + version(); + print N("\nUsage: %s [--auto] [--beginner] [--expert] [-h|--help] [--noauto] [--testing] [-v|--version] ", $progname), + if_($usages{$progname}, common::translate($usages{$progname})), "\n"; +# print N("\nUsage: "), $::usage, "\n" if $::usage; + CORE::exit(0); + } elsif (/^-(-version|v)$/) { + version(); + CORE::exit(0); + } elsif (/^--embedded$/) { + $::XID = splice @ARGV, $i, 1; + $::isEmbedded = 1; + } elsif (/^--expert$/) { + $::expert = 1; + } elsif (/^--noauto$/) { + $::noauto = /-noauto/; + } elsif (/^--auto$/) { + $::auto = 1; + } elsif (/^--testing$/) { + $::testing = 1; + } elsif (/^--beginner$/) { + $::expert = 0; + } else { + push @new_ARGV, $_; + } +} + +@ARGV = @new_ARGV; +} + +################################################################################ + +#- stuff will go to special /var/log/explanations file +my $standalone_name; +sub explanations { log::explanations("@_") } + +our @common_functs = qw(renamef linkf symlinkf output substInFile mkdir_p rm_rf cp_af touch setVarsInSh setExportedVarsInSh setExportedVarsInCsh update_gnomekderc); +our @builtin_functs = qw(chmod chown __exit exit unlink link symlink rename system); +our @drakx_modules = qw(Xconfig::card Xconfig::default Xconfig::main Xconfig::monitor Xconfig::parse Xconfig::proprietary Xconfig::resolution_and_depth Xconfig::screen Xconfig::test Xconfig::various Xconfig::xfree any bootloader bootlook c commands crypto detect_devices devices diskdrake diskdrake::hd_gtk diskdrake::interactive diskdrake::removable diskdrake::removable_gtk diskdrake::smbnfs_gtk fs fsedit http keyboard lang log loopback lvm modules::parameters modules mouse my_gtk network network::adsl network::ethernet network::connection network::isdn_consts network::isdn network::modem network::netconnect network::network fs::remote::nfs fs::remote::smb network::tools partition_table partition_table_bsd partition_table::dos partition_table::empty partition_table::gpt partition_table::mac partition_table::raw partition_table::sun printer printerdrake proxy raid run_program scanner services steps swap timezone network::drakfirewall network::shorewall); + +sub bug_handler { + my ($error, $is_signal) = @_; + + # exceptions in eval are OK: + return if $error && $^S ne '0' && !$is_signal; + + # exceptions with "\n" are normal ways to quit: + if (!$is_signal && eval { $error eq MDK::Common::String::formatError($error) }) { + warn $error; + exit(255); + } + + # we want the full backtrace: + $error .= "\n" if $is_signal; + $error .= common::backtrace() if $error; + + my $progname = $0; + + # do not loop if drakbug crashes and do not complain about wizcancel: + if ($progname =~ /drakbug/ || $error =~ /wizcancel/ || !-x '/usr/bin/drakbug') { + warn $error; + exit(1); + } + $progname =~ s|.*/||; + system('drakbug', if_($error, '--error', $error), '--incident', $progname); + c::_exit(1); +} + +if (!$ENV{DISABLE_DRAKBUG}) { + $SIG{SEGV} = sub { bug_handler(@_, 1) }; + $SIG{__DIE__} = \&bug_handler; +} + +sub import() { + ($standalone_name = $0) =~ s|.*/||; + c::openlog($standalone_name . "[$$]"); + explanations('### Program is starting ###'); + + eval "*common::$_ = *$_" foreach @common_functs; + + foreach my $f (@builtin_functs) { + eval "*$_" . "::$f = *$f" foreach @drakx_modules; + eval "*" . caller() . "::$f = *$f"; + } +} + + +sub renamef { + explanations "moved file $_[0] to $_[1]"; + goto &MDK::Common::File::renamef; +} + +sub linkf { + explanations "hard linked file $_[0] to $_[1]"; + goto &MDK::Common::File::linkf; +} + +sub symlinkf { + explanations "symlinked file $_[0] to $_[1]"; + goto &MDK::Common::File::symlinkf; +} + +sub output { + explanations "created file $_[0]"; + goto &MDK::Common::File::output; +} + +sub substInFile(&@) { + explanations "modified file $_[1]"; + goto &MDK::Common::File::substInFile; +} + +sub mkdir_p { + explanations "created directory $_[0] (and parents if necessary)"; + goto &MDK::Common::File::mkdir_p; +} + +sub rm_rf { + explanations "removed files/directories (recursively) @_"; + goto &MDK::Common::File::rm_rf; +} + +sub cp_af { + my $retval = MDK::Common::File::cp_af(@_); + my $dest = pop @_; + explanations "copied recursively @_ to $dest"; + return $retval; +} + +sub touch { + explanations "touched file @_"; + goto &MDK::Common::File::touch; +} + +sub setVarsInSh { + explanations "modified file $_[0]"; + goto &MDK::Common::System::setVarsInSh; +} + +sub setExportedVarsInSh { + explanations "modified file $_[0]"; + goto &MDK::Common::System::setExportedVarsInSh; +} + +sub setExportedVarsInCsh { + explanations "modified file $_[0]"; + goto &MDK::Common::System::setExportedVarsInCsh; +} + +sub update_gnomekderc { + explanations "modified file $_[0]"; + goto &MDK::Common::System::update_gnomekderc; +} + + +sub chmod { + my $retval = CORE::chmod(@_); + my $mode = shift @_; + explanations sprintf("changed mode of %s to %o", $_, $mode) foreach @_; + return $retval; +} + +sub chown { + my $retval = CORE::chown(@_); + my $uid = shift @_; + my $gid = shift @_; + explanations sprintf("changed owner of $_ to $uid.$gid") foreach @_; + return $retval; +} + +sub unlink { + explanations "removed files/directories @_"; + CORE::unlink(@_); +} + +sub link { + explanations "hard linked file $_[0] to $_[1]"; + CORE::link($_[0], $_[1]); +} + +sub symlink { + explanations "symlinked file $_[0] to $_[1]"; + CORE::symlink($_[0], $_[1]); +} + +sub rename { + explanations "renamed file $_[0] to $_[1]" if -r $_[0]; + CORE::rename($_[0], $_[1]); +} + +sub system { + explanations "launched command: @_"; + CORE::system(@_); +} + +1; |