diff options
author | Martin Whitaker <mageia@martin-whitaker.me.uk> | 2017-12-18 10:54:01 +0000 |
---|---|---|
committer | Martin Whitaker <mageia@martin-whitaker.me.uk> | 2017-12-18 10:54:01 +0000 |
commit | 296dc5bb53c430c8842ab7327d8a76b5750c64b4 (patch) | |
tree | 5670e983d5d459466dac2b7a49b7ce14827c7e9d /lib/MGA/DrakISO/Media.pm | |
parent | 7e53518a7d8709998482eef1e9da21ee1a1886a9 (diff) | |
download | drakiso-296dc5bb53c430c8842ab7327d8a76b5750c64b4.tar drakiso-296dc5bb53c430c8842ab7327d8a76b5750c64b4.tar.gz drakiso-296dc5bb53c430c8842ab7327d8a76b5750c64b4.tar.bz2 drakiso-296dc5bb53c430c8842ab7327d8a76b5750c64b4.tar.xz drakiso-296dc5bb53c430c8842ab7327d8a76b5750c64b4.zip |
Start creating a new set of tools for generating Mageia ISO images.
The aim is to share as much code as possible between the tool used
to generate the Live ISOs and the tool used to generate the classic
installer ISOs.
This is derived from the user/martinw/use-grub2 branch of draklive.
Diffstat (limited to 'lib/MGA/DrakISO/Media.pm')
-rw-r--r-- | lib/MGA/DrakISO/Media.pm | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/lib/MGA/DrakISO/Media.pm b/lib/MGA/DrakISO/Media.pm new file mode 100644 index 0000000..97e21ab --- /dev/null +++ b/lib/MGA/DrakISO/Media.pm @@ -0,0 +1,88 @@ +package MGA::DrakISO::Media; + +use MDK::Common; +use MGA::DrakISO::Storage; +use POSIX; +use common; + +sub new { + my ($media) = @_; + + bless $media, 'MGA::DrakISO::Media'; + + $media->{partitions} ||= [ { mntpoint => '/' } ]; + + foreach my $mntpoint (qw(/ OEM_RESCUE)) { + my $part = find { $_->{mntpoint} eq $mntpoint } @{$media->{partitions}}; + $part->{fs_type} ||= $media->get_media_setting('fs'); + if (my $label = $mntpoint eq '/' && $media->get_media_label) { + $part->{device_LABEL} ||= $label; + } + } + + $media->{boot_entries} ||= [ '' => '' ]; + + $media; +} + +sub get_initrd_path { + my ($media) = @_; + '/' . $media->{storage} . '/initrd.gz'; +} + +#- mainly for storage-specific subroutines +sub get_storage_setting { + my ($media, $setting) = @_; + $MGA::DrakISO::Storage::storage_types{$media->{storage}}{$setting}; +} + +#- for actions that support an optional boot storage type +sub get_boot_setting { + my ($media, $setting, $opts) = @_; + $opts->{boot} ? $MGA::DrakISO::Storage::storage_types{$opts->{boot}}{$setting} : get_media_setting($media, $setting); +} + +#- for user-customisable media setting, that can override storage setting +sub get_media_setting { + my ($media, $setting) = @_; + $media->{$setting} || $media->get_storage_setting($setting); +} + +sub get_media_fs_module { + my ($media) = @_; + my $fs = $media->get_media_setting('fs'); + $fs eq 'iso9660' ? 'isofs' : $fs eq 'ext2' ? @{[]} : $fs; +} + +sub get_media_label { + my ($media) = @_; + first($media->get_media_setting('source') =~ /^LABEL=(.*)$/); +} + +sub get_media_source_for_nash { + my ($media) = @_; + my $label = $media->get_media_label; + #- strip vfat labels to 11 chars and upper-case it + $label && $media->get_media_setting('fs') eq 'vfat' ? + 'LABEL=' . uc(substr($label, 0, 11)) : + $media->get_media_setting('source'); +} + +sub find_partition_index { + my ($media, $mntpoint) = @_; + eval { find_index { $_->{mntpoint} eq $mntpoint } @{$media->{partitions}} }; +} + +sub find_boot_partition_index { + my ($media) = @_; + $media->find_partition_index('/boot') || $media->find_partition_index('/'); +} + +sub supplement_slash_size { + my ($media, $total_size) = @_; + my $correction = 1.2; + my $slash = find { $_->{mntpoint} eq '/' } @{$media->{partitions}}; + $slash->{size} ||= POSIX::ceil($total_size * $correction / $common::SECTORSIZE); +} + +1; |