]>
Commit | Line | Data |
---|---|---|
1 | #!/usr/bin/perl | |
2 | ||
3 | # SPDX-License-Identifier: MIT | |
4 | ||
5 | # Todo: | |
6 | # Create an exclude identifier list of all Apple volumes and build a safetey check | |
7 | # Detect if the paritions already exist and offer to reinstall system | |
8 | # Let the use pick between u-boot and untethered m1n1 | |
9 | # Check that there is at least 1.5 GB space | |
10 | # Make sure that there is only one free region | |
11 | ||
12 | use strict; | |
13 | ||
14 | my ($identifier, $size); | |
15 | ||
16 | sub | |
17 | find_identifier_before_free_space | |
18 | { | |
19 | my $identifier = undef; | |
20 | my $size = undef; | |
21 | ||
22 | for my $line (`diskutil list /dev/disk0`) { | |
23 | ||
24 | if ($line =~ /^\s+\(free space\)\s+(\d+.\d GB)/) { | |
25 | $size = $1; | |
26 | $size =~ s/\s+//g; | |
27 | last; | |
28 | } | |
29 | ||
30 | if ($line =~ /(disk0s\d)$/) { | |
31 | $identifier = $1; | |
32 | } | |
33 | } | |
34 | ||
35 | die if not defined $identifier; | |
36 | die if not defined $size; | |
37 | ||
38 | return ($identifier, $size); | |
39 | } | |
40 | ||
41 | ($identifier, $size) = find_identifier_before_free_space(); | |
42 | system("diskutil addPartition $identifier %EFI% LB 512MB"); | |
43 | ||
44 | $identifier = undef; | |
45 | ||
46 | for my $line (`diskutil list /dev/disk0`) { | |
47 | if ($line =~ /EFI.*(disk0s\d)/) { | |
48 | $identifier = $1; | |
49 | } | |
50 | } | |
51 | ||
52 | die if not defined $identifier; | |
53 | ||
54 | system("newfs_msdos /dev/$identifier"); | |
55 | system("mkdir -p /Volumes/efi"); | |
56 | system("mount -t msdos /dev/$identifier /Volumes/efi"); | |
57 | chdir('/Volumes/efi'); | |
58 | system('curl -sL https://tg.st/u/efi.tgz | tar -xz'); | |
59 | system('curl -sL tg.st/u/fwx.sh | bash'); | |
60 | system('cp /tmp/linux-firmware.tar /Volumes/efi/'); | |
61 | chdir('/var/root'); | |
62 | system('umount /Volumes/efi'); | |
63 | ||
64 | ($identifier, $size) = find_identifier_before_free_space(); | |
65 | system("diskutil addPartition $identifier %Linux% %noformat% $size"); | |
66 | ||
67 | $identifier = undef; | |
68 | ||
69 | for my $line (`diskutil list /dev/disk0`) { | |
70 | if ($line =~ /Linux Filesystem.*(disk0s\d)/) { | |
71 | $identifier = $1; | |
72 | } | |
73 | } | |
74 | ||
75 | die if not defined $identifier; | |
76 | ||
77 | system("curl -L https://tg.st/u/m1.tgz | tar -xOz | dd of=/dev/$identifier bs=8m"); |