my $mkpart = sub {
my ($fstype, $size) = @_;
$pnum++;
- my $end = defined($size) ? $cpos + $size : $hdsize_mb;
+ my $end = defined($size) ? $cpos + $size : ($hdsize_mb - 1);
if ($fstype) {
push @$pcmd, 'mkpart', 'primary', $fstype, $cpos, $end;
} else {
unlink "$targetdir/proxmox_install_mode";
- # disable bacula-fd
- syscmd ("touch '$targetdir/etc/bacula/do_not_run'");
-
# set timezone
unlink ("$targetdir/etc/localtime");
symlink ("/usr/share/zoneinfo/$timezone", "$targetdir/etc/localtime");
$sel = $timezone; # used once to select default
}
- my $cb = $lastzonecb = Gtk3::ComboBoxText->new_with_entry();
+ my $cb = $lastzonecb = Gtk3::ComboBoxText->new();
$cb->set_size_request (200, -1);
$cb->signal_connect ('changed' => sub {
$label->set_alignment (1, 0.5);
$hbox3->pack_start ($label, 0, 0, 10);
- my $kmapcb = Gtk3::ComboBoxText->new_with_entry ();
+ my $kmapcb = Gtk3::ComboBoxText->new();
$kmapcb->set_size_request (200, -1);
foreach my $layout (sort keys %{$cmap->{kmaphash}}) {
$kmapcb->append_text ($layout);
$label0->set_alignment (1, 0.5);
$grid->attach($label0, 0, $row, 1, 1);
- my $fstypecb = Gtk3::ComboBoxText->new_with_entry ();
+ my $fstypecb = Gtk3::ComboBoxText->new();
my $fstype = ['ext3', 'ext4', 'zfs (RAID0)', 'zfs (RAID1)',
'zfs (RAID10)', 'zfs (RAIDZ-1)',
$disk_label[$i] = Gtk3::Label->new ("Hardisk $i");
$disk_label[$i]->set_alignment (1, 0.5);
$grid->attach($disk_label[$i], 0, $row, 1, 1);
- $disk_selector[$i] = Gtk3::ComboBoxText->new_with_entry();
- my $e = $disk_selector[$i]->get_child();
- $e->set_width_chars(40);
- foreach my $hd (@$hds) {
+ $disk_selector[$i] = Gtk3::ComboBoxText->new();
+ $disk_selector[$i]->append_text("-- do not use --");
+ $disk_selector[$i]->set_active(0);
+ foreach my $hd (@$hds) {
my ($disk, $devname, $size, $model) = @$hd;
- $disk_selector[$i]->append_text (get_device_desc ($devname, $size, $model));
+ $disk_selector[$i]->append_text(get_device_desc ($devname, $size, $model));
$disk_selector[$i]->{pve_disk_id} = $i;
$disk_selector[$i]->signal_connect (changed => sub {
my $w = shift;
my $diskid = $w->{pve_disk_id};
- my $a = $w->get_active;
+ my $a = $w->get_active - 1;
$config_options->{"disksel${diskid}"} = ($a >= 0) ? $hds->[$a] : undef;
});
}
if ($hdopion_first_setup) {
- $disk_selector[$i]->set_active ($i) if $hds->[$i];
+ $disk_selector[$i]->set_active ($i+1) if $hds->[$i];
} else {
my $hdind = 0;
if (my $cur_hd = $config_options->{"disksel$i"}) {
foreach my $hd (@$hds) {
if (@$hd[1] eq @$cur_hd[1]) {
- $disk_selector[$i]->set_active($hdind);
+ $disk_selector[$i]->set_active($hdind+1);
last;
}
$hdind++;
}
}
- die "$filesys need at least one device\n" if scalar(@$devlist) < 1;
+ my $diskcount = scalar(@$devlist);
+ die "$filesys need at least one device\n" if $diskcount < 1;
my $cmd= '';
if ($filesys eq 'zfs (RAID0)') {
$cmd .= " @$hd[1]";
}
} elsif ($filesys eq 'zfs (RAID1)') {
+ die "zfs (RAID1) need at least 2 device\n" if $diskcount < 2;
$cmd .= ' mirror ';
- foreach my $hd (@$devlist) {
+ my $hd = @$devlist[0];
+ my $expected_size = @$hd[2]; # all disks needs same size
+ foreach $hd (@$devlist) {
+ die "mirrored disks must have same size\n" if @$hd[2] != $expected_size;
$cmd .= " @$hd[1]";
push @$bootdevlist, $hd;
}
} elsif ($filesys eq 'zfs (RAID10)') {
- my $count = scalar(@$devlist);
- my $half = int($count/2);
- die "zfs (RAID10) need at least 2 device\n" if $count < 2;
- die "zfs (RAID10) need at an even numver of devices\n" if $half*2 != $count;
+ my $half = int($diskcount/2);
+ die "zfs (RAID10) need at least 4 device\n" if $diskcount < 4;
+ die "zfs (RAID10) need at an even numver of devices\n" if $half*2 != $diskcount;
push @$bootdevlist, @$devlist[0], @$devlist[1];
- for (my $i = 0; $i < $count; $i+=2) {
+ for (my $i = 0; $i < $diskcount; $i+=2) {
my $hd1 = @$devlist[$i];
my $hd2 = @$devlist[$i+1];
+ die "mirrored disks must have same size\n" if @$hd1[2] != @$hd2[2];
$cmd .= ' mirror ' . @$hd1[1] . ' ' . @$hd2[1];
}
my $level = $1;
my $mindisks = 2 + $level;
die "zfs (RAIDZ-$level) need at least $mindisks devices\n" if scalar(@$devlist) < $mindisks;
- $cmd .= ' raidz$level';
- foreach my $hd (@$devlist) {
+ my $hd = @$devlist[0];
+ my $expected_size = @$hd[2]; # all disks needs same size
+ $cmd .= " raidz$level";
+ foreach $hd (@$devlist) {
+ die "mirrored disks must have same size\n" if @$hd[2] != $expected_size;
$cmd .= " @$hd[1]";
push @$bootdevlist, $hd;
}
$target_hd_label = Gtk3::Label->new ("Target Harddisk: ");
$hbox->pack_start ($target_hd_label, 0, 0, 0);
- $target_hd_combo = Gtk3::ComboBoxText->new_with_entry();
- my $e = $target_hd_combo->get_child();
- $e->set_width_chars(40);
+ $target_hd_combo = Gtk3::ComboBoxText->new();
foreach my $hd (@$hds) {
($disk, $devname, $size, $model) = @$hd;
eval { get_zfs_raid_setup(); };
if (my $err = $@) {
display_message ("Warning: $err\n" .
- "Please fix ZFS setup first.");
+ "Please fix ZFS setup first.");
} else {
create_country_view();
}