summaryrefslogtreecommitdiffstats
path: root/perl-install/partition_table
Commit message (Expand)AuthorAgeFilesLines
* fix styleOlivier Blin2009-08-041-1/+1
* Fix a crash when trying to create a partition on a device with no cylinder_sizePascal Terjan2009-08-041-5/+7
* Rewrite gpt support with libpartedPascal Terjan2009-01-271-228/+38
* - diskdrakePascal Rigaux2008-09-191-0/+41
* more loggingPascal Rigaux2008-08-211-1/+1
* - partitioning wizard lirary: Pascal Rigaux2008-03-252-0/+7
* - fix detecting existing LVMs (#31228)Pascal Rigaux2008-01-282-2/+0
* - detect raid partitions based on either type 0xfd or vol_id detectingPascal Rigaux2008-01-281-2/+1
* fix previous commitPascal Rigaux2008-01-221-1/+1
* handle missing mbr_signature in /sys/firmware/edd/int13_dev*Pascal Rigaux2008-01-221-1/+1
* fix fs::proc_partitions::use_() case: $hd must be cleaned up from existing stuffPascal Rigaux2007-09-241-1/+2
* - diskdrake :Pascal Rigaux2007-09-192-0/+7
* create partition_table_initialize() and partition_table_clear_and_initialize()Pascal Rigaux2007-09-191-4/+3
* it's better to inheritate from partition_table::readonly, that way we can doPascal Rigaux2007-09-181-4/+9
* create partition_table::readonly and use itPascal Rigaux2007-09-182-9/+27
* oops, this one goes with previous commitPascal Rigaux2007-09-181-7/+0
* rename partition_table::raw::clear() into partition_table::initialize()Pascal Rigaux2007-09-182-18/+3
* rename ->zero_MBR into ->clear, and ->zero_MBR_and_dirty into ->clear_and_dirtyPascal Rigaux2007-09-182-11/+15
* create clear_existing()Pascal Rigaux2007-09-181-2/+7
* handle "LVM on full disk" like other partition tablesPascal Rigaux2007-09-181-0/+12
* create partition_table::raw::read_primary out of partition_table::read_primary()Pascal Rigaux2007-09-181-0/+11
* create pt_info_to_primary() out of partition_table::read_one()Pascal Rigaux2007-09-181-0/+14
* rename ->read to ->read_onePascal Rigaux2007-09-186-6/+6
* transform ->clear_raw into the more generic ->initializePascal Rigaux2007-09-187-17/+28
* - diskdrake:Pascal Rigaux2007-08-086-0/+11
* - allow using diskdrake even if there is only a lvm PV on full disk availablePascal Rigaux2007-08-081-0/+25
* re-sync after the big svn lossPascal Rigaux2007-04-253-8/+19
* conectiva 10's grub detection (thanks to bogdano)Pascal Rigaux2005-08-251-0/+1
* move is_xbox from common to detect_devicesOlivier Blin2005-08-051-1/+1
* ignore HDIO_GETGEO fail (useful for dmraid)Pascal Rigaux2005-06-201-13/+16
* - move functions using /proc/partitions out of fsedit to fs::proc_partitionsPascal Rigaux2005-06-101-0/+1
* add some "use xxx;" (the idea is to see what the package needs, but i may rol...Pascal Rigaux2005-06-101-0/+1
* don't need prefixing with current packagePascal Rigaux2005-06-091-1/+1
* create default_type() out of zero_MBR()Pascal Rigaux2005-04-131-4/+8
* do not drop field {info} that can be created in zero_MBRPascal Rigaux2005-03-151-1/+1
* Diskdrake mods for XBox (thks Pixel)Stew Benedict2005-03-101-0/+5
* catch bad use of get_rawCHS()Pascal Rigaux2005-03-101-0/+3
* better english (writing style rather than spoken one)Thierry Vignaud2004-12-133-8/+8
* - geometry XXX/240/63 is quite common, so add 240 to @valid_nb_headsPascal Rigaux2004-11-261-2/+2
* detect on lilo on floppy (bugzilla #12213)Pascal Rigaux2004-11-231-0/+1
* add some ";", remove some ";", as told by perl_checkerPascal Rigaux2004-11-183-8/+8
* empty partition table means sectors #0 and #1 are zeroes, not simply sector #0Pascal Rigaux2004-11-161-2/+2
* handle more nicely raw_lvm_PV (don't simply ignore them)Pascal Rigaux2004-11-161-39/+0
* fix yaboot detectionPascal Rigaux2004-11-161-1/+2
* don't die when failing to open a device (to get its geometry), skip it insteadPascal Rigaux2004-09-291-8/+15
* fix typosPascal Rigaux2004-09-271-2/+3
* simplify and handle LVM2, *but* since creating a LVM2 PV on a non partitionedPascal Rigaux2004-09-271-7/+2
* fail if legacy_sectors_per_track or legacy_max_head doesn't exist instead of ...Pascal Rigaux2004-09-271-3/+4
* perl_checker compliancePascal Rigaux2004-09-271-1/+1
* don't call compute_nb_cylinders() before checking {sectors} and {heads} are v...Pascal Rigaux2004-09-271-2/+2
$col_norm = "\033[00m"; #$col_background = "\033[07m"; #$col_brighten = "\033[01m"; #$col_underline = "\033[04m"; #$col_blink = "\033[05m"; my $white = gtkcolor(50400, 655, 20000); my $black = gtkcolor(0, 0, 0); my $red = gtkcolor(0xFFFF, 655, 655); my $green = gtkcolor(0x0, 0x9898,0x0); my $yellow = gtkcolor(0xFFFF, 0xD7D7, 0); my $blue = gtkcolor(655, 655, 0xFFFF); my $magenta = gtkcolor(0xFFFF, 655, 0xFFFF); my $purple = gtkcolor(0xA0A0, 0x2020, 0xF0F0); my $cyan = gtkcolor(0x0, 0x9898, 0x9898); my $darkgray = gtkcolor(0x2F2F, 0x4F4F, 0x4F4F); # Define global terms: # Define good notables: my @word_good = ("starting\n", "Freeing", "Detected", "starting.", "accepted.\n", "authenticated.\n", "Ready", "active", "reloading", "saved;", "restarting", "ONLINE\n"); my @word_warn = ("dangling", "closed.\n", "Assuming", "root", "root\n", "exiting\n", "missing", "Ignored", "adminalert:", "deleting", "OFFLINE\n"); my @word_bad = "bad"; my @word_note = ("LOGIN", "DHCP_OFFER", "optimized", "reset:", "unloaded", "disconnected", "connect", "Successful", "registered\n"); my @line_good = ("up", "DHCP_ACK", "Cleaned", "Initializing", "Starting", "success", "successfully", "alive", "found", "ONLINE\n"); my @line_warn = ("warning:", "WARNING:", "invalid", "obsolete", "bad", "Password", "detected", "timeout", "timeout:", "attackalert:", "wrong", "Lame", "FAILED", "failing", "unknown", "obsolete", "stopped.\n", "terminating.", "disabled\n", "disabled", "Lost"); my @line_bad = ("DENY", "lost", "shutting", "dead", "DHCP_NAK", "failure;", "Unable", "inactive", "terminating", "refused", "rejected", "down", "OFFLINE\n", "error\n", "ERROR\n", "ERROR:", "error", "ERROR", "error:", "failed:"); # Define specifics: my @daemons = "named"; # Now define what we want to use when: my $col_good = 'green4'; my $col_warn = 'yellow4'; my $col_bad = 'red'; my $col_note = 'purple'; my $col = 'darkcyan'; ######### font and colors end my %files = ( "auth" => { file => "/var/log/auth.log", desc => N("Authentication") }, "user" => { file => "/var/log/user.log", desc => N("User") }, "messages" => { file => "/var/log/messages", desc => N("Messages") }, "syslog" => { file => "/var/log/syslog", desc => N("Syslog") }, "explanations" => { file => "/var/log/explanations", desc => N("Mandrake Tools Explanation") } ); my $yy = gtkset_sensitive(gtksignal_connect(new Gtk2::Button(N("search")) , clicked => \&search),0); my $log_text = gtktext_insert(Gtk2::TextView->new, [ [ '' ] ]); my $log_buf = $log_text->get_buffer; my $refcount_search; #### far from window my %toggle; gtkadd($my_win->{window}, gtkpack_(new Gtk2::VBox(0,0), if_(!$::isExplain && !$::isEmbedded, 0, N("A tool to monitor your logs")), if_(!$::isFile, 0, gtkadd(new Gtk2::Frame(N("Settings")), gtkpack__(new Gtk2::VBox(0,2), gtkpack__(new Gtk2::VBox(0,2), # N("Show lines"), gtkpack__(new Gtk2::HBox(0,0), " " . N("Matching") . " ", my $e_yes = new Gtk2::Entry(), " " . N("but not matching") . " ", my $e_no = new Gtk2::Entry() ) ), gtkpack_(new Gtk2::HBox(0,0), 1, gtkadd(gtkset_border_width(new Gtk2::Frame(N("Choose file")),2), gtkpack(gtkset_border_width(Gtk2::VBox->new(0,0),0), map { $toggle{$_} = gtksignal_connect(new Gtk2::CheckButton($files{$_}{desc}), clicked => sub { $refcount_search++; gtkset_sensitive($yy, $refcount_search); }) } sort keys %files, ) ), 0, gtkadd(gtkset_border_width(new Gtk2::Frame(N("Calendar")),2), gtkpack__(gtkset_border_width(new Gtk2::VBox(0,0),5), $cal_butt, $cal ) ) ), $yy, ) ) ), !$::isExplain ? (1, gtkadd(new Gtk2::Frame(N("Content of the file")), create_scrolled_window($log_text) )) : (1, create_scrolled_window($log_text)), if_(!$::isExplain, 0, gtkadd(gtkset_border_width(gtkset_layout(Gtk2::HButtonBox->new, 'end'), 5), if_(!$::isFile, gtksignal_connect(new Gtk2::Button(N("Mail alert")), clicked => sub { eval { alert_config() }; my $err = $@; if ($err =~ /wizcancel/) { $::Wizard_no_previous = 1; $::Wizard_no_cancel = 1; $::WizardWindow->destroy if defined $::WizardWindow; undef $::WizardWindow; } elsif ($err) { print qq(CRITICAL: "$err" =>\n) } })), gtksignal_connect(Gtk2::Button->new(N("Save")), clicked => \&save), gtksignal_connect(Gtk2::Button->new($::isEmbedded ? N("Cancel") : N("Quit")), clicked => \&quit) ) ) ) ); $::isFile && !$::isEmbedded and gtkset_size_request($log_text, 400, 500); $my_win->{window}->show_all; search() if $::isFile; $my_win->main; sub quit() { ugtk2->exit(0) } #------------------------------------------------------------- # search functions #------------------------------------------------------------- sub search() { return if !$log_text->window; $log_text->window->freeze_updates; $log_buf->set_text(''); if ($::isFile) { parse_file($::File, $::File); } else { foreach (keys %files) { parse_file($files{$_}{file}, $files{$_}{desc}) if $toggle{$_}->get_active; } } $log_text->window->thaw_updates; $log_text->show; gtkflush(); } my $timer; sub parse_file { my ($file, $descr) = @_; $file =~ s/\.gz$//; my ($pbar, $win_pb); unless ($::isEmbedded && $::isExplain) { gtkadd($win_pb = gtkset_modal(new Gtk2::Window('toplevel'), 1), gtkpack(new Gtk2::VBox(2,0), new Gtk2::Label(" " . N("please wait, parsing file: %s", $descr) . " "), $pbar = new Gtk2::ProgressBar() ) ); $win_pb->set_transient_for($my_win->{rwindow}) unless $::isEmbedded; $win_pb->set_position('center'); $win_pb->realize; $win_pb->show_all; gtkflush(); } my $ey = $e_yes->get_chars(0, -1); my $en = $e_no->get_chars(0, -1); $ey =~ s/ OR /|/; $ey =~ s/^\*$//; $en =~ s/^\*$/.*/; $ey = $ey . $::Word if $::isWord; if ($cal_mode) { my (undef, $month, $day) = $cal->get_date; $ey = $months[$month]."\\s{1,2}$day\\s.*$ey.*\n"; } my @all = catMaybeCompressed($file); if ($::isExplain) { my (@t, $t); while (@all) { $t = pop @all; next if $t =~ /logdrake/; last if $t !~ /$::Explain/; push @t, $t; } @all = reverse @t; } my $taille = @all; my $i = 0; foreach (@all) { $i++; if ($pbar && $i % 10) { $pbar->set_fraction($i/$taille); $win_pb->window->process_updates(1); # no gtkflush() because we do not want to refresh the TextView } if ($en eq "" && /$ey/i) { logcolorize($_); next } if (! /$en/i && /$ey/i) { logcolorize($_); next } if (! /$en/i && $ey eq "") { logcolorize($_); next } } $win_pb->destroy if !$::isEmbedded || !$::isExplain; if ($::isTail) { close F; open F, $file or die "E: $!"; local $_; while (<F>) {}; #to prevent to output the file twice.. # $log_text->set_point($log_text->get_length()); $timer ||= Glib::Timeout->add(1000, sub { logcolorize($_) while <F>; seek F, 0, 1; }); } } ########################################################################################## sub logcolorize { local $_ = shift; #my ($data) = @_; # we get date & time if it is date & time (dmesg) s/(\D{3} .. (\d\d:\d\d:\d\d ))//; my $timestamp = $::isExplain ? $2 : $1; my @rec = split; log_output($timestamp, { %b, 'foreground' => 'darkcyan' }); # date & time if any... # BUG: $col hasn't yet be reseted $::isExplain or log_output("$rec[0] ", { %b, 'foreground' => $rec[0] eq $h ? 'blue' : $col }); # hostname if ($rec[1] eq "last") { log_output(" last message repeated ", { %n, 'foreground' => 'green' }); log_output($rec[4], { %b, 'foreground' => 'green' }); log_output(" times\n", { %n, 'foreground' => 'green' }); return; } # Extract PID if present if ($rec[1] =~ /\[(\d+)\]:/) { my ($pid) = $1; $rec[1] =~ s/\[$1\]://; log_output($rec[1] . "[", { %n, 'foreground' => 'green' }); log_output($pid, { %b, 'foreground' => 'black' }); log_output("]: ", { %n, 'foreground' => 'green' }); } else { log_output($rec[1] . " ", { %n, 'foreground' => 'green' }); } foreach my $therest (2 .. $#rec) { $col = 'darkcyan'; # Check for keywords to highlight foreach (@word_good) { $col = $col_good if $_ eq $rec[$therest] } foreach (@word_warn) { $col = $col_warn if $_ eq $rec[$therest] } foreach (@word_bad) { $col = $col_bad if $_ eq $rec[$therest] } foreach (@word_note) { $col = $col_note if $_ eq $rec[$therest] } # Watch for words that indicate entire lines should be highlighted #foreach (@line_good) { $col = $col_good if $_ eq $rec[$therest] } #foreach (@line_warn) { $col = $col_warn if $_ eq $rec[$therest] } #foreach (@line_bad) { $col = $col_bad if $_ eq $rec[$therest] } log_output("$rec[$therest] ", { %n, 'foreground' => $col }); } log_output("\n", { %n, 'foreground' => 'black' }); } # log_output (Gtk2::TextView, [ [ ... ] ]) sub log_output { gtktext_append($log_text, [ \@_ ]); $log_text->scroll_to_iter($log_buf->get_end_iter, 0, 1, 0.5, 0.5); } #------------------------------------------------------------- # mail/sms alert #------------------------------------------------------------- sub alert_config() { $::isWizard = 1; my $conffile = "/etc/sysconfig/mail_alert"; $::Wizard_pix_up = "wiz_logdrake.png"; # FIXME $::Wizard_title = N("Mail alert"); my %options = getVarsFromSh($conffile); $options{LOAD} ||= 3; $options{MAIL} ||= "root"; my $cron = q(#!/usr/bin/perl # generated by logdrake use MDK::Common; my $r; my %options = getVarsFromSh("/etc/sysconfig/mail_alert"); ); my $initdir = "/etc/init.d"; begin: $::Wizard_finished = 0; $::Wizard_no_previous = 1; $in->ask_okcancel(N("Mail alert configuration"), N("Welcome to the mail configuration utility.\n\nHere, you'll be able to set up the alert system.\n"), 1) or quit(); step_service: undef $::Wizard_no_previous; undef $::Wizard_finished; my $service = { httpd => N("Apache World Wide Web Server"), bind => N("Domain Name Resolver"), ftp => N("Ftp Server"), postfix => N("Postfix Mail Server"), samba => N("Samba Server"), sshd => N("SSH Server"), webmin => N("Webmin Service"), xinetd => N("Xinetd Service") }; my @installed_d = grep { -e "$initdir/$_" } sort keys %$service; my %services_to_check = map { $_ => 1 } split(':', $options{SERVICES}); $in->ask_from(N("service setting"), N("You will receive an alert if one of the selected services is no longer running"), [ map { { label => $_, val => \$services_to_check{$_}, type => "bool", text => $service->{$_} } } @installed_d ]) or goto begin; use Data::Dumper; $cron .= q(#- check services my ) . Data::Dumper->Dump([ $service ], [qw(*services)]) . q( foreach (split(':', $options{SERVICES})) { next unless $services{$_}; $r .= "Service $_ ($services{$_} is not running)\\n" unless -e "/var/lock/subsys/$_"; } ); $options{SERVICES} = join ':', grep { $services_to_check{$_} } sort keys %services_to_check; step_load: undef $::Wizard_finished; #PO- Here "load" is a noun; that is load refers to the system/CPU) load $in->ask_from(N("Load setting"), N("You will receive an alert if the load is higher than this value"), [ { label => N("_: load here is a noun, the load of the system\nLoad"), val => \$options{LOAD}, type => 'range', min => 1, max => 50 }, ]) or goto step_service; $cron .= q( #- load my ($load) = split ' ', first(cat_("/proc/loadavg")); $r .= "Load is huge: $load\n" if $load > $options{LOAD}; ); step_output: # $::Wizard_no_previous = 1; $::Wizard_finished = 1; $in->ask_from(N("alert configuration"), N("Please enter your email address below "), [ { label => "" }, { label => "Email", val => \$options{MAIL} }, ]) or goto step_load; if ($options{MAIL} !~ /[\w.-]*\@[\w.-]/) { err_dialog(N("Wrong email"), N("\"%s\" is not a valid email!")); goto step_output; } $cron .= q(#- report it if ($r) { my $F; open $F, '|/usr/sbin/sendmail -oi -t'; print $F qq(Subject: logdrake Mail Alert From: root\@localhost To: $options{MAIL} ); print $F "*** " . chomp_(`date`) . " ***\n"; print $F $r; } # EOF); output_with_perm "/etc/cron.hourly/logdrake_service", 0755, $cron; setVarsInSh($conffile, \%options); undef $::isWizard; if (defined $::WizardWindow) { $::WizardWindow->destroy; undef $::WizardWindow; } } #------------------------------------------------------------- # menu callback functions #------------------------------------------------------------- sub save() { $::isWizard = 0; my $y = $in->ask_file(N("Save as.."), "/root") or return; my $buf = $log_text->get_buffer; output($y, $buf->get_text(($buf->get_bounds), 0)); }