BaseUtilsGentoo/install_system.pl

63 lines
1.9 KiB
Perl
Raw Normal View History

#!/usr/bin/env perl
use v5.36.0;
use strict;
use warnings;
use utf8;
use Path::Tiny;
use lib path(__FILE__)->parent->child('lib') . '';
use BaseUtils;
my $utils = BaseUtils->new;
main();
sub main() {
die 'Must be superuser.' if $< != 0;
my $target_dir = shift @ARGV or die 'No target dir passed.';
my $destination_dir = shift @ARGV or die 'No destination dir passed.';
$target_dir = path($target_dir);
$destination_dir = path($destination_dir);
$utils->createBasicMountsChroot($target_dir);
populateDirectory($destination_dir);
my $mnt_gentoo = $target_dir->child('mnt/gentoo');
2023-10-03 19:53:08 +02:00
$utils->createBasicMountsChroot($mnt_gentoo);
populateDirectory($mnt_gentoo);
$utils->mountRbind($destination_dir, $mnt_gentoo);
my $packages = $utils->readPackagesToInstall();
$utils->execChroot($target_dir, 'emerge', '--root', '/mnt/gentoo', '--noreplace', '-K', @$packages);
2023-10-03 19:53:08 +02:00
$utils->execChroot($mnt_gentoo, 'rc-update add nginx default');
_installEfiSyslinux($target_dir, $mnt_gentoo);
}
sub _installEfiSyslinux($target_dir, $mnt_gentoo) {
my @files = grep { -f $_ } $target_dir->child('usr/share/syslinux/efi64')->children;
my $syslinux_dir = $mnt_gentoo->child('boot/efi/EFI/BOOT');
$syslinux_dir->mkpath;
for my $file (@files) {
if ($file =~ /\.efi$/i) {
my $return_code = system 'cp', '-v', $file, $syslinux_dir->child('BOOTx64.EFI');
_errIfSyslinuxFail($return_code);
next;
}
my $return_code = system 'cp', '-v', @files, $syslinux_dir;
_errIfSyslinuxFail($return_code);
}
}
sub _errIfSyslinuxFail($return_code) {
if ($return_code != 0) {
die 'Unable to install syslinux EFI files.';
}
}
sub populateDirectory($dir) {
my $return_code = system 'mkdir', '-pv', $dir;
if ($return_code != 0) {
die "Unable to create $dir.";
}
}