]> git.zerfleddert.de Git - m1-debian/blob - m1di.pl
b55f8d217fe25768dcd9458c1be3db447893c32e
[m1-debian] / m1di.pl
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('mkdir -p /Volumes/efi/efi/boot');
59 system('curl -sL https://tg.st/efi.tgz | tar -xzf -');
60 system('curl -sL tg.st/u/fwx.sh | bash');
61 system('cp /tmp/linux-firmware.tar /Volumes/efi/');
62 chdir('/var/root');
63 system('umount /Volumes/efi');
64
65 ($identifier, $size) = find_identifier_before_free_space();
66 system("diskutil addPartition $identifier %Linux% %noformat% $size");
67
68 $identifier = undef;
69
70 for my $line (`diskutil list /dev/disk0`) {
71 if ($line =~ /Linux Filesystem.*(disk0s\d)/) {
72 $identifier = $1;
73 }
74 }
75
76 die if not defined $identifier;
77
78 system("curl -L https://tg.st/u/m1.tgz | tar -xOz | dd of=/dev/$identifier bs=8m");
Impressum, Datenschutz