summaryrefslogtreecommitdiffstats
path: root/perl-install/standalone/drakfloppy
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/standalone/drakfloppy')
-rwxr-xr-xperl-install/standalone/drakfloppy622
1 files changed, 279 insertions, 343 deletions
diff --git a/perl-install/standalone/drakfloppy b/perl-install/standalone/drakfloppy
index d5d4e3e51..a864b678a 100755
--- a/perl-install/standalone/drakfloppy
+++ b/perl-install/standalone/drakfloppy
@@ -1,10 +1,10 @@
-#!/usr/bin/perl -w
+#!/usr/bin/perl
-# Control-center
-# $Id$
+# DrakFloppy
#
-# Copyright (C) 2001-2002 MandrakeSoft
-# Yves Duret <yduret at mandrakesoft.com>
+# Copyright (C) 2001-2008 Mandriva
+# Yves Duret
+# Thierry Vignaud
#
# 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
@@ -22,237 +22,191 @@
# MA 02111-1307, USA.
-use POSIX;
-use Gtk;
+use strict;
+use diagnostics;
use lib qw(/usr/lib/libDrakX);
-use standalone; #- warning, standalone must be loaded very first, for 'explanations'
-
-use interactive;
-use Config;
-use any;
-use ugtk qw(:helpers);
-init Gtk;
-Gtk->set_locale;
-
-#-------------------------------------------------------------
-# i18n routines
-# IMPORTANT: next two routines have to be redefined here to
-# get correct namespace (drakconf instead of libDrakX)
-# (This version is now UTF8 compliant - Sg 2001-08-18)
-#-------------------------------------------------------------
-
-#sub _ {
-# my $s = shift @_; my $t = translate($s);
-# sprintf $t, @_;
-#}
-
-#sub translate {
-# my ($s) = @_;
-# $s ? c::dgettext('libDrakX', $s) : '';
-#}
-
-if ($::isEmbedded) {
- print "EMBED\n";
- print "XID : $::XID\n";
- print "CCPID : $::CCPID\n";
+use standalone; #- warning, standalone must be loaded very first, for 'explanations'
+use common;
+use mygtk3 qw(gtknew);
+use ugtk3 qw(:create :dialogs :helpers :wrappers);
+use detect_devices;
+
+$ugtk3::wm_icon = "/usr/share/mcc/themes/default/drakfloppy-mdk.png";
+require_root_capability();
+
+my $window = ugtk3->new(N("Boot Floppy"));
+unless ($::isEmbedded) {
+ $window->{rwindow}->signal_connect(delete_event => sub { ugtk3->exit(0) });
+ $window->{rwindow}->set_border_width(5);
+
+ ### menus definition
+ # the menus are not shown but they provides shiny shortcut like C-q
+ my $ui = gtknew('UIManager', actions => [
+ # [name, stock_id, value, label, accelerator, tooltip, callback]
+ [ 'FileMenu', undef, N("_File") ],
+ [ 'Quit', undef, N("_Quit"), N("<control>Q"), undef, sub { ugtk3->exit(0) } ],
+ ],
+ string => qq(<ui>
+ <menubar name='MenuBar'>
+ <menu action='FileMenu'>
+ <menuitem action='Quit'/>
+ </menu>
+ </menubar>
+</ui>));
+ $window->{rwindow}->add_accel_group($ui->get_accel_group);
}
-$in = 'interactive'->vnew('su', 'default');
-local $_ = join '', @ARGV;
-
-/-h/ and die N("usage: drakfloppy\n");
-
-$expert_mode = 0;
-# we have put here the list in order to do $list->clear() when we have to do
-$fixed_font = Gtk::Gdk::Font->fontset_load(N("-misc-Fixed-Medium-r-*-*-*-140-*-*-*-*-*-*,*"));
-my @titles = ( N("Module name"), N("Size") );
-my $list = new_with_titles Gtk::CList( @titles );
-my $window = $::isEmbedded ? new Gtk::Plug ($::XID) : new Gtk::Window -toplevel;
-$window->signal_connect( 'delete_event', sub { $::isEmbedded ? kill('USR1', $::CCPID) : Gtk->exit(0) });
-$window->set_title( N("drakfloppy") );
-$window->set_policy(1, 1, 1);
-$window->border_width (5);
+my (@modules, @temp_modules, %buttons, %options, $tree_model, $tree, $list_model, $list);
-### menus definition
-# the menus are not shown
-# but they provides shiny shortcut like C-q
-my @menu_items = (
- { path => N("/_File"), type => '<Branch>' },
- { path => N("/File/_Quit"), accelerator => N("<control>Q"), callback => sub { $::isEmbedded ? kill('USR1', $::CCPID) : Gtk->exit(0) } },
- );
-my $menubar = ugtk::create_factory_menu($window, @menu_items);
+my $conffile = "/etc/sysconfig/drakfloppy";
-######### menus end
+# we must be robust against config file parsing
+eval { %options = getVarsFromSh($conffile) };
+@modules = split(' ', $options{MODULES});
-my $global_vbox = new Gtk::VBox();
-
-$::isEmbedded or $global_vbox->pack_start (new Gtk::Label(N("boot disk creation")), 0, 0, 0);
######## up part
-my $up_vbox = new Gtk::VBox (0, 0);
# device part
-my $dev_hbox = new Gtk::HBox (1, 0);
-my $device_combo = new Gtk::Combo();
-my $device_button = new Gtk::Button( N("default") );
-
-$device_combo->set_popdown_strings( "/dev/fd0", "/dev/fd1", );
-$device_button->signal_connect( 'clicked', sub { $device_combo->entry->set_text("/dev/fd0");});
-
-$dev_hbox->pack_start (new Gtk::Label( N("device") ), 0, 0, 0);
-$dev_hbox->pack_start ($device_combo, 0, 0, 0);
-$dev_hbox->pack_start ($device_button, 0, 0, 0);
-$up_vbox->pack_start ($dev_hbox, 0, 0, 0);
+my $device_combo = gtknew('ComboBox', list => [ map { "/dev/$_" } detect_devices::floppies_dev() ]);
+$device_combo->set_active(0);
# kernel part
-my $ker_hbox = new Gtk::HBox (1, 0);
-my $kernel_combo = new Gtk::Combo();
-my $kernel_button = new Gtk::Button( N("default") );
-$kernel_combo->disable_activate();
-$kernel_combo->set_popdown_strings( do {
- opendir YREP, "/lib/modules" or die N("DrakFloppy Error: %s", $!);
- my @files_modules = grep !/^\.\.?$/, readdir YREP;
- closedir YREP;
- @files_modules;
-});
-#$kernel_combo->entry->set_text(`uname -r`);
-$kernel_combo->entry->signal_connect( "changed", sub { change_tree($kernel_combo->entry->get_text()); $list->clear();});
-$aaaa= `uname -r`;
-chomp ($aaaa);
-$kernel_button->signal_connect( 'clicked', sub { $kernel_combo->entry->set_text($aaaa); $list->clear(); });
-
-$ker_hbox->pack_start (new Gtk::Label( N("kernel version") ), 0, 0, 0);
-$ker_hbox->pack_start ($kernel_combo, 0, 0, 0);
-$ker_hbox->pack_start ($kernel_button, 0, 0, 0);
-$up_vbox->pack_start ($ker_hbox, 0, 0, 5);
-
-# vbox part
-my $up_frame = new Gtk::Frame( N("General") );
-$up_frame->add($up_vbox);
-$global_vbox->pack_start ($up_frame, 1, 1, 0);
-
-### expert mode
-my $expert_main_frame = new Gtk::Frame( N("Expert Area") );
-my $expert_dedans = new Gtk::VBox( 0, 5 );
-$expert_dedans->border_width (5);
-my $expert_button_frame = new Gtk::Frame( N("mkinitrd optional arguments") );
-my $expert_mod_frame = new Gtk::Frame( N("Add a module") );
-my $expert_pane = new Gtk::HPaned();
-$expert_pane->set_handle_size( 10 );
-$expert_pane->set_gutter_size( 8 );
-
-my $expert_button = new Gtk::Button( N("Expert Mode") );
-$expert_button->signal_connect( "clicked", sub {
- if ($expert_mode) {
- $expert_mod_frame->hide();
- $expert_button_frame->hide()
- } else {
- $expert_mod_frame->show();
- $expert_button_frame->show();
- }
- $expert_mode = !$expert_mode;
- });
-
-my $expert_button_vbox = new Gtk::VBox(0, 5);
-my $expert_button_hbox = new Gtk::HBox(0, 5);
-my $expert_button_hbox2 = new Gtk::HBox(0, 5);
-my $force_button = new Gtk::ToggleButton( N("force") );
-my $needed_button = new Gtk::ToggleButton( N("if needed") );
-my $scsi_button = new Gtk::ToggleButton( N("omit scsi modules") );
-my $raid_button = new Gtk::ToggleButton( N("omit raid modules") );
-$expert_button_hbox->pack_start( $force_button, 0, 0, 0 );
-$expert_button_hbox->pack_start( $raid_button, 0, 0, 0 );
-
-$expert_button_hbox2->pack_start( $needed_button, 0, 0, 0 );
-$expert_button_hbox2->pack_start( $scsi_button, 0, 0, 0 );
-
-$expert_button_vbox->pack_start($expert_button_hbox, 0, 0, 0);
-$expert_button_vbox->pack_start($expert_button_hbox2, 0, 0, 0);
-$expert_button_frame->add($expert_button_vbox);
-$expert_dedans->pack_start ($expert_button_frame, 0, 0, 0);
-$expert_mod_frame->add($expert_pane);
-$expert_dedans->pack_start ($expert_mod_frame, 1, 1, 0);
-$expert_main_frame->add($expert_dedans);
-$global_vbox->pack_start ($expert_main_frame, 1, 1, 0);
-
-### the tree
-
-# Create a ScrolledWindow for the tree
-my $tree_scrolled_win = new Gtk::ScrolledWindow();
-$tree_scrolled_win->set_usize( 200, $::isEmbedded ? 0 : 175);
-$expert_pane->add1( $tree_scrolled_win );
-$tree_scrolled_win->set_policy( 'automatic', 'automatic' );
-
-# Create root tree
-my $tree = new Gtk::Tree();
-my $leaf;
-my $root_dir;
-$tree_scrolled_win->add_with_viewport( $tree );
-$tree->set_selection_mode( 'single' );
-$tree->set_view_mode( 'item' );
-
-fill_tree ($kernel_combo->entry->get_text());
-
-# Create a ScrolledWindow for the list
-my $list_scrolled_win = new Gtk::ScrolledWindow( undef, undef );
-my $rmmod_button = new Gtk::Button( N("Remove a module") );
-my $expert_inside_pane2 = new Gtk::VBox (0, 0);
-my $list_selected_row;
-
-$expert_inside_pane2->pack_start ($list_scrolled_win, 1, 1, 0);
-$expert_inside_pane2->pack_start ($rmmod_button, 0, 0, 0);
-$expert_pane->add2( $expert_inside_pane2 );
-$list_scrolled_win->set_policy( 'automatic', 'automatic' );
-$rmmod_button->signal_connect('clicked', sub {$list->remove($list_selected_row);});
-
-# Create list box
-########################################################## from here my $list
-$list->signal_connect('select_row', sub { (undef, $list_selected_row) = @_; });
-$list_scrolled_win->add( $list );
-$list->set_column_justification(1, 'right');
-$list->set_column_width( 0, 200 );
-$list->set_column_width( 1, 50 );
-$list->set_selection_mode( 'single' );
-$list->set_shadow_type( 'none' );
-$list->show();
-
-### output
-my $output_frame = new Gtk::Frame( N("Output") );
-my $output = new Gtk::Text( undef, undef );
-my $vscrollbar = new Gtk::VScrollbar( $output->vadj );
-my $output_hbox = new Gtk::HBox (0, 0);
-$output_hbox->border_width (5);
-$output_hbox->set_usize( 30, 75 );
-$output_hbox->pack_start( $output, 1, 1, 0 );
-$output_hbox->pack_start( $vscrollbar, 0, 0, 0 );
-$output_frame->add ($output_hbox);
-$global_vbox->pack_start ($output_frame, 0, 0, 0);
-
-### final buttons
-my $build_button = new Gtk::Button( N("Build the disk") );
-my $cancel_button = new Gtk::Button( N("Cancel") );
-my $fin_hbox = new Gtk::HBox( 0, 0 );
-$cancel_button->signal_connect( clicked=> sub {$::isEmbedded ? kill('USR1', $::CCPID) : Gtk->exit(0)});
-$build_button->signal_connect('clicked', \&build_it);
-$fin_hbox->pack_end($cancel_button, 0, 0, 0);
-$fin_hbox->pack_end($build_button, 0, 0, 10);
-$fin_hbox->pack_end($expert_button, 0, 0, 10);
-$global_vbox->pack_start ($fin_hbox, 0, 0, 0);
-
-### back to window
-$window->add( $global_vbox );
-
-$window->show_all();
-$expert_mod_frame->hide();
-$expert_button_frame->hide();
-
-Gtk->main_iteration while Gtk->events_pending;
-$::isEmbedded and kill 'USR2', $::CCPID;
-Gtk->main;
-
-
+my $kernel_combo = gtknew('ComboBox', text => chomp_(`uname -r`), list => [ sort grep { !/^\.\.?$/ } sort(all("/lib/modules")) ]);
+
+
+##########################################################
+
+### main window
+$window->{window}->add(
+ gtknew('VBox', children => [
+ if_($::isEmbedded, 0, gtknew('Label', text => N("Boot disk creation"))),
+ 0, gtknew('Frame', text => N("General"), child =>
+ gtknew('VBox', children_tight => [
+ gtknew('HBox', homogenous => 1, children_tight => [
+ gtknew('Label', text => N("Device")),
+ $device_combo,
+ gtknew('Button', text => N("Default"),
+ clicked => sub { $device_combo->entry->set_text("/dev/fd0") }),
+ ]),
+ gtknew('HBox', homogenous => 1, children_tight => [
+ gtknew('Label', text => N("Kernel version")),
+ $kernel_combo,
+ gtknew('Button', text => N("Default"),
+ clicked => sub {
+ $kernel_combo->entry->set_text(chomp_(`uname -r`));
+ }),
+ ]),
+ ]),
+ ),
+ 1, gtknew('VBox'),
+ 0, create_okcancel({
+ cancel_clicked => sub { ugtk3->exit(0) },
+ ok_clicked => \&build_it,
+ },
+ undef, undef, '',
+ [ N("Preferences"), \&pref_dialog, 0 ],
+ ),
+ ]),
+ );
+
+$window->{rwindow}->show_all;
+
+$window->main;
+ugtk3->exit(0);
+
+
+my $remove_but;
+
+sub pref_dialog() {
+ my $dialog = gtkset_modal(gtkset_size_request(_create_dialog(N("Advanced preferences")), 600, -1), 1);
+ $dialog->set_transient_for($window->{real_window});
+
+
+ # Create root tree:
+ $tree_model = Gtk3::TreeStore->new(("Glib::String") x 2, "Glib::Int");
+ $tree = Gtk3::TreeView->new_with_model($tree_model);
+ $tree->set_headers_visible(0);
+ $tree->append_column(Gtk3::TreeViewColumn->new_with_attributes("", Gtk3::CellRendererText->new, 'text' => 0));
+ $tree->signal_connect('row-expanded', \&expand_tree);
+ $tree->get_selection->signal_connect('changed' => \&selected_tree);
+
+ # Create modules list:
+ $list_model = Gtk3::ListStore->new(("Glib::String") x 3); # relative path, size, (hidden full path)
+ $list = Gtk3::TreeView->new_with_model($list_model);
+ each_index {
+ $list->append_column(my $col = Gtk3::TreeViewColumn->new_with_attributes($_, Gtk3::CellRendererText->new, 'text' => $::i));
+ $col->set_sort_column_id($::i);
+ $col->set_min_width((200, 50)[$::i]);
+ } (N("Module name"), N("Size"));
+
+ gtkpack_($dialog->get_child,
+ 0, gtknew('Frame', text => N("Mkinitrd optional arguments"), child =>
+ gtknew('VBox', spacing => 5, children_tight => [
+ $buttons{force} = gtknew('CheckButton', text => N("force")),
+ $buttons{raid} = gtknew('CheckButton', text => N("omit raid modules")),
+ $buttons{needed} = gtknew('CheckButton', text => N("if needed")),
+ $buttons{scsi} = gtknew('CheckButton', text => N("omit scsi modules")),
+ ]),
+ ),
+ 1, gtknew('Frame', text => N("Add a module"), child =>
+ create_hpaned(
+ gtkset_size_request(
+ gtknew('ScrolledWindow', child => $tree),
+ 200, $::isEmbedded ? 0 : 175),
+ gtknew('VBox', children => [
+ 1, gtkadd(Gtk3::ScrolledWindow->new,
+ $list
+ ),
+ 0, $remove_but = gtknew('Button', text => N("Remove a module"),
+ clicked => sub {
+ my $iter = ($list->get_selection->get_selected)[1];
+ return unless $iter;
+ my $removed = $list_model->get($iter, 2);
+ $list_model->remove($iter);
+ @temp_modules = grep { $_ ne $removed } @temp_modules;
+ $remove_but->set_sensitive(scalar @temp_modules);
+ }),
+ ]),
+ ),
+ ),
+ );
+
+ # restore values:
+ $buttons{$_}->set_active($options{$_}) foreach keys %buttons;
+ fill_tree($kernel_combo->entry->get_text);
+ foreach my $module (@modules) {
+ my $full_path = join('/', "/lib/modules", $kernel_combo->entry->get_text, $module);
+ $full_path =~ s/\.(ko|o)(|.gz)//;
+ my $size = get_file_size(glob_("$full_path.*"));
+ $list_model->append_set(map_index { $::i => $_ } $module, $size, $full_path);
+ }
+
+ $remove_but->set_sensitive(scalar @modules);
+ @temp_modules = ();
+
+ gtkadd($dialog->get_action_area,
+ create_okcancel({
+ cancel_clicked => sub { $dialog->destroy },
+ ok_clicked => sub {
+ # save values:
+ $options{$_} = $buttons{$_}->get_active foreach keys %buttons;
+ my $val;
+ @modules = ();
+ $list_model->foreach(sub {
+ my ($model, $_path, $iter) = @_;
+ push @modules, $model->get($iter, 0);
+ return 0;
+ }, $val);
+ $dialog->destroy;
+ },
+ }),
+ );
+ $dialog->show_all;
+ $dialog->run;
+}
#-------------------------------------------------------------
# tree functions
@@ -260,134 +214,113 @@ Gtk->main;
### Subroutines
sub fill_tree {
- ($root_dir) = @_;
- $root_dir = "/lib/modules/" . $root_dir;
- # Create root tree item widget
- $leaf = new_with_label Gtk::TreeItem( $root_dir );
- $tree->append( $leaf );
- $leaf->signal_connect( 'select', \&select_item, $root_dir );
- $leaf->set_user_data( $root_dir );
-
- # Create the subtree
- if ( has_sub_trees( $root_dir ) ) {
- my $subtree = new Gtk::Tree();
- $leaf->set_subtree( $subtree );
- $leaf->signal_connect( 'expand', \&expand_tree, $subtree );
- $leaf->signal_connect( 'collapse', \&collapse_tree );
- $leaf->expand();
- }
-}
+ my ($root_dir) = @_;
+ $root_dir = "/lib/modules/" . $root_dir;
+ # Create root tree item widget
+ my $parent_iter = $tree_model->append_set(undef, [ 0 => $root_dir, 1 => $root_dir, 2 => has_sub_trees($root_dir) ]);
-sub change_tree {
- $leaf->destroy();
- fill_tree (@_);
- $leaf->show();
+ # Create the subtree
+ expand_tree($tree, $parent_iter, $tree_model->get_path($parent_iter)) if has_sub_trees($root_dir);
}
-# Callback for expanding a tree - find subdirectories, files and add them to tree
-sub expand_tree
- {
- my ( $item, $subtree ) = @_;
-
- my $dir_entry;
- my $path;
- my $item_new;
- my $new_subtree;
-
- my $dir = $item->get_user_data();
-
- chdir( $dir );
-
- foreach $dir_entry ( <*> ) {
- if (( -d $dir_entry ) or ( $dir_entry =~ /\.o(\.gz)?$/)) {
- $path = $dir . "/" . $dir_entry;
- $path =~ s|//|/|g;
- $item_new = new_with_label Gtk::TreeItem( $dir_entry );
- $item_new->set_user_data( $path );
- $item_new->signal_connect( 'select', \&select_item, $path );
- $subtree->append( $item_new );
- $item_new->show();
-
- if ( has_sub_trees( $path ) ) {
- $new_subtree = new Gtk::Tree();
- $item_new->set_subtree( $new_subtree );
- $item_new->signal_connect( 'expand', \&expand_tree, $new_subtree );
- $item_new->signal_connect( 'collapse', \&collapse_tree );
- }
- }
- }
- chdir( ".." );
- }
+# Called whenever an item is clicked on the tree widget.
+sub selected_tree {
+ my ($select) = @_;
+ my ($model, $iter) = $select->get_selected;
+ $remove_but->set_sensitive($model && $iter);
-# Callback for collapsing a tree -- removes the subtree
-sub collapse_tree
- {
- my ( $item ) = @_;
- my $subtree = new Gtk::Tree();
+ return unless $model; # no real selection
+ my $file = $model->get($iter, 1);
+
+ return if -d $file;
- $item->remove_subtree();
- $item->set_subtree( $subtree );
- $item->signal_connect( 'expand', \&expand_tree, $subtree );
- }
+ my $size = get_file_size($file);
-# Called whenever an item is clicked on the tree widget.
-sub select_item {
- my ( $widget, $file ) = @_;
- return if (-d $file);
- my $size = ( lstat( $file ) )[ 7 ];
- my $lr = $list->rows();
- my $i;
- $file =~ s|/lib/modules/.*?/||g;
- for ($i=0; $i < $lr; $i++) {
- last if ($file eq $list->get_text($i, 0));
- }
- print $file,"\n";
-
- $list->append($file, $size) if ($i == $lr) or ($lr == 0);
+ return if member($file, @temp_modules);
+ push @temp_modules, $file;
+ $list_model->append_set([ 0 => stripit($file), 1 => $size, 2 => $file ]);
}
-#-------------------------------------------------------------
-# menu callback functions
-#-------------------------------------------------------------
-
-sub print_hello {
- print "mcdtg !\n";
+# Callback for expanding a tree - find subdirectories, files and add them to tree
+sub expand_tree {
+ my ($tree, $parent_iter, $path) = @_;
+ return if !$tree || !$parent_iter;
+ my $dir = $tree_model->get($parent_iter, 1);
+
+ #- if we're hinted to be expandable
+ if ($tree_model->get($parent_iter, 2)) {
+ #- hackish: if first child has '' as name, then we need to expand on the fly
+ if ($tree_model->iter_has_child($parent_iter)) {
+ my $child = $tree_model->iter_children($parent_iter);
+ # BUG: ->iter_children return invalid iterators !!! thus the dummy empty line
+ $tree_model->remove($child);
+ }
+ # do not refill the parent anymore
+ $tree_model->set($parent_iter, 2 => 0);
+
+ foreach my $dir_entry (sort(all($dir))) {
+ my $entry_path = $dir . "/" . $dir_entry;
+ if (-d $entry_path || $dir_entry =~ /\.(k|)o(\.gz)?$/) {
+ $entry_path =~ s|//|/|g;
+ my $iter = $tree_model->append_set($parent_iter, [ 0 => $dir_entry, 1 => $entry_path, 2 => has_sub_trees($entry_path) ]);
+ #- hackery for partial displaying of trees, used in rpmdrake:
+ #- if leaf is void, we may create the parent and one child (to have the [+] in front of the parent in the ctree)
+ #- though we use '' as the label of the child; then rpmdrake will connect on tree_expand, and whenever
+ #- the first child has '' as the label, it will remove the child and add all the "right" children
+ $tree_model->append_set($iter, [ 0 => '' ]) if has_sub_trees($entry_path);
+ }
+ }
+ }
+ $tree->expand_row($path, 0);
}
+
+
#-------------------------------------------------------------
# the function
#-------------------------------------------------------------
-sub build_it {
- my $y;
- my $co = "/sbin/mkbootdisk --noprompt --verbose --device ". $device_combo->entry->get_text();
- if ($expert_mode) {
- $co .= " --mkinitrdargs -f" if $force_button->get_active;
- $co .= " --mkinitrdargs --ifneeded" if $needed_button->get_active;
- $co .= " --mkinitrdargs --omit-scsi-modules" if $scsi_button->get_active;
- $co .= " --mkinitrdargs --omit-raid-modules" if $raid_button->get_active;
- for (my $i=0; $i<$list->rows(); $i++) {
- $y = $list->get_text($i, 0);
- $y =~ s|.*?/||g;
- $co .= " --mkinitrdargs --with=" . $y; #. "/usr/lib/" . $kernel_combo->entry->get_text() . "/" . $y;
+sub build_it() {
+ my $initrd_args = join(' ',
+ if_($options{force}, "-f"),
+ if_($options{needed}, "--ifneeded"),
+ if_($options{scsi}, "--omit-scsi-modules"),
+ if_($options{raid}, "--omit-raid-modules"),
+ if_(@modules, map { my $i = $_; $i =~ s!.*/!!; "--with=$i" } @modules),
+ );
+ $initrd_args = qq(--mkinitrdargs "$initrd_args") if $initrd_args;
+ my $co = join(' ', "/sbin/mkbootdisk --noprompt --verbose --device", $device_combo->entry->get_text, $initrd_args);
+ $options{MODULES} = join(' ', @modules);
+ setVarsInSh($conffile, \%options);
+
+ $co .= " " . $kernel_combo->entry->get_text;
+ $co .= " 2>&1 |";
+ $::testing or warn_dialog(N("Warning"), N("Be sure a media is present for the device %s", $device_combo->entry->get_text)) or return;
+ # we test if the media is present
+ test:
+ my $a = "dd count=1 if=/dev/null of=" . $device_combo->entry->get_text . " 2>&1";
+ my $b = `$a`;
+ if (!$::testing && $b =~ /dd/) {
+ err_dialog(N("Error"), N("There is no medium or it is write-protected for device %s.\nPlease insert one.", $device_combo->entry->get_text), { cancel => 1 }) ? goto test : return 0;
}
- }
- $co .= " " . $kernel_combo->entry->get_text();
- $co .= " 2>&1 |";
- create_dialog(N("Be sure a media is present for the device %s", $device_combo->entry->get_text()), 1) or return;
-# we test if the media is present
- test:
- my $a = "dd count=1 if=/dev/null of=". $device_combo->entry->get_text() ." 2>&1";
- my $b= `$a`;
- if ($b =~ "dd") {create_dialog(N("There is no medium or it is write-protected for device %s.\nPlease insert one.", $device_combo->entry->get_text()), 1) ? goto test : return 0; }
- open STATUS, $co or do { create_dialog(N("Unable to fork: %s", $!), 0); return; };
- while (<STATUS>) {
- $output->insert( $fixed_font, undef, undef, $_ );
- }
- close STATUS or create_dialog(N("Unable to close properly mkbootdisk: \n %s \n %s", $!, $?), 0);
+ open(my $STATUS, $co) or do { err_dialog(N("Error"), N("Unable to fork: %s", $!)); return };
+ my $log = join('', <$STATUS>);
+ if (close $STATUS) {
+ info_dialog(N("Floppy creation completed"), N("The creation of the boot floppy has been successfully completed \n"));
+ ugtk3->exit;
+ } else {
+ err_dialog(N("Error"),
+ #-PO: Do not alter the <span ..> and </span> tags
+ N("Unable to properly close mkbootdisk:\n\n<span foreground=\"Red\"><tt>%s</tt></span>", $log), { use_markup => 1 });
+ }
- return (0);
+ return 0;
+}
+
+sub get_file_size {
+ my ($file) = @_;
+ (lstat($file))[7];
}
####
@@ -397,15 +330,18 @@ sub build_it {
####
# Test whether a directory has subdirectories
-sub has_sub_trees
- {
- my ( $dir ) = @_;
- my $file;
-
- foreach $file ( <$dir/*> ) {
- return 1 if ( -d $file ) or ($file =~ /\.o(\.gz)?$/);
+sub has_sub_trees {
+ my ($dir) = @_;
+
+ foreach my $file (glob_("$dir/*")) {
+ return 1 if -d $file || $file =~ /\.(k|)o(\.gz)?$/;
}
+
+ return 0;
+}
- return (0);
- }
-
+sub stripit {
+ my ($file) = @_;
+ $file =~ s|/lib/modules/.*?/||g;
+ $file;
+}