use IO::Select;
use Cwd 'abs_path';
use Gtk3 '-init';
-use Gtk3::WebKit;
+use Gtk3::WebKit2;
use Encode;
use String::ShellQuote;
use Data::Dumper;
if ($dev =~ m|^/dev/sd([a-h]?[a-z]\|i[a-v])$|) {
return "${dev}$partnum";
+ } elsif ($dev =~ m|^/dev/xvd[a-z]$|) {
+ # Citrix Hypervisor blockdev
+ return "${dev}$partnum";
} elsif ($dev =~ m|^/dev/[hxev]d[a-z]$|) {
return "${dev}$partnum";
} elsif ($dev =~ m|^/dev/[^/]+/c\d+d\d+$|) {
}
}
+ mkdir "$targetdir/mnt";
+ mkdir "$targetdir/mnt/hostrun";
+ syscmd("mount --bind /run $targetdir/mnt/hostrun") == 0 ||
+ die "unable to bindmount run on $targetdir/mnt/hostrun\n";
+
update_progress(1, 0.05, $maxper, "extracting base system");
my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size) = stat ($basefile);
die "unable to mount proc on $targetdir/proc\n";
syscmd("mount -n -t sysfs sysfs $targetdir/sys") == 0 ||
die "unable to mount sysfs on $targetdir/sys\n";
+ syscmd("chroot $targetdir mount --bind /mnt/hostrun /run") == 0 ||
+ die "unable to re-bindmount hostrun on /run in chroot\n";
update_progress(1, $maxper, 0.5, "configuring base system");
# cleanup
- # hack: remove dead.letter from sshd installation
- syscmd("rm -rf $targetdir/dead.letter");
-
unlink "$targetdir/usr/sbin/policy-rc.d";
diversion_remove($targetdir, "/sbin/start-stop-daemon");
syscmd("chroot $targetdir /usr/bin/dpkg-query -W --showformat='\${package}\n'> final.pkglist");
}
+ syscmd("umount $targetdir/run");
+ syscmd("umount $targetdir/mnt/hostrun");
syscmd("umount $targetdir/tmp");
syscmd("umount $targetdir/proc");
syscmd("umount $targetdir/sys");
my $data = file_get_contents($path);
if ($filename eq 'license.htm') {
- my $license = decode('utf8', file_get_contents("${proxmox_cddir}/EULA"));
+ my $license = eval { decode('utf8', file_get_contents("${proxmox_cddir}/EULA")) };
+ if (my $err = $@) {
+ die $err if !$opt_testmode;
+ $license = "TESTMODE: Ignore non existent EULA...\n";
+ }
my $title = "END USER LICENSE AGREEMENT (EULA)";
$data =~ s/__LICENSE__/$license/;
$data =~ s/__LICENSE_TITLE__/$title/;
}
- $htmlview->load_html_string($data, $url);
+ $htmlview->load_html($data, $url);
$last_display_change = time();
}
my $vbox2 = Gtk3::VBox->new(0, 0);
$hbox->add($vbox2);
- $htmlview = Gtk3::WebKit::WebView->new();
+ $htmlview = Gtk3::WebKit2::WebView->new();
my $scrolls = Gtk3::ScrolledWindow->new();
$scrolls->add($htmlview);
my $device_change_handler = sub {
my $current = shift;
- $ipconf->{selected} = $device_active_map->{$current->get_active()};
+
+ my $new = $device_active_map->{$current->get_active()};
+ return if $new eq $ipconf->{selected};
+
+ $ipconf->{selected} = $new;
my $iface = $ipconf->{ifaces}->{$ipconf->{selected}};
$config->{mngmt_nic} = $iface->{name};
$ipconf_entry_addr->set_text($iface->{inet}->{addr} || $iface->{inet6}->{addr})
my $html_data = file_get_contents($ack_template);
my %config_values = (
- __target_hd__ => $target_hd,
+ __target_hd__ => join(' | ', @{$config_options->{target_hds}}),
__target_fs__ => $config_options->{filesys},
- __country__ => $country,
+ __country__ => $cmap->{country}->{$country}->{name},
__timezone__ => $timezone,
__keymap__ => $keymap,
__mailto__ => $mailto,
my $target_hd_combo;
my $target_hd_label;
-my $hdopion_first_setup = 1;
+my $hdoption_first_setup = 1;
my $create_basic_grid = sub {
my $grid = Gtk3::Grid->new();
});
}
- if ($hdopion_first_setup) {
+ if ($hdoption_first_setup) {
$disk_selector->set_active ($i+1) if $hds->[$i];
} else {
my $hdind = 0;
$grid->attach($options_stack, 0, $row, 2, 1);
$row++;
- $hdopion_first_setup = 0;
+ $hdoption_first_setup = 0;
my $switch_view = sub {
my $raid = $config_options->{filesys} =~ m/zfs|btrfs/;
return ($devlist, $mode);
}
+my $last_hd_selected = 0;
sub create_hdsel_view {
$prev_btn->set_sensitive(1); # enable previous button at this point
$vbox->pack_start($hbox, 0, 0, 10);
my ($disk, $devname, $size, $model) = @{@$hds[0]};
- $target_hd = $devname;
+ $target_hd = $devname if !defined($target_hd);
$target_hd_label = Gtk3::Label->new("Target Harddisk: ");
$hbox->pack_start($target_hd_label, 0, 0, 0);
$target_hd_combo->append_text (get_device_desc($devname, $size, $model));
}
- $target_hd_combo->set_active(0);
+ my $raid = $config_options->{filesys} =~ m/zfs|btrfs/;
+ if ($raid) {
+ $target_hd_label->set_text("Target: $config_options->{filesys} ");
+ $target_hd_combo->set_visible(0);
+ $target_hd_combo->set_no_show_all(1);
+ }
+ $target_hd_combo->set_active($last_hd_selected);
$target_hd_combo->signal_connect(changed => sub {
$a = shift->get_active;
my ($disk, $devname) = @{@$hds[$a]};
+ $last_hd_selected = $a;
$target_hd = $devname;
});
set_next(undef, sub {
if ($config_options->{filesys} =~ m/zfs/) {
- eval { get_zfs_raid_setup(); };
+ my ($devlist) = eval { get_zfs_raid_setup() };
if (my $err = $@) {
- display_message("Warning: $err\n" .
- "Please fix ZFS setup first.");
- } else {
- $step_number++;
- create_country_view();
+ display_message("Warning: $err\nPlease fix ZFS setup first.");
+ return;
}
+ $config_options->{target_hds} = [ map { $_->[1] } @$devlist ];
} elsif ($config_options->{filesys} =~ m/btrfs/) {
- eval { get_btrfs_raid_setup(); };
+ my ($devlist) = eval { get_btrfs_raid_setup() };
if (my $err = $@) {
- display_message("Warning: $err\n" .
- "Please fix BTRFS setup first.");
- } else {
- $step_number++;
- create_country_view();
+ display_message("Warning: $err\nPlease fix BTRFS setup first.");
+ return;
}
+ $config_options->{target_hds} = [ map { $_->[1] } @$devlist ];
} else {
- $step_number++;
- create_country_view();
+ $config_options->{target_hds} = [ $target_hd ];
}
+
+ $step_number++;
+ create_country_view();
});
}