46 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/perl
 | |
| 
 | |
| use strict;
 | |
| use warnings;
 | |
| 
 | |
| use PVE::Tools ();
 | |
| 
 | |
| use IO::File ();
 | |
| 
 | |
| sub usage {
 | |
|     die "USAGE: $0 INFILE OUTFILE [ABI INFILE-IS-DEB]\n";
 | |
| }
 | |
| 
 | |
| my $input_file = shift // usage();
 | |
| my $output_file = shift // usage();
 | |
| my $abi = shift;
 | |
| my $extract_deb = shift;
 | |
| 
 | |
| die "input file '$input_file' does not exist\n" if ! -e $input_file;
 | |
| 
 | |
| my $modules_symver_fh;
 | |
| 
 | |
| if ($extract_deb) {
 | |
| 	usage() if !defined($abi);
 | |
| 	my $cmd = [];
 | |
| 	push @$cmd, ['dpkg', '--fsys-tarfile', $input_file];
 | |
| 	push @$cmd, ['tar', '-xOf', '-', "./usr/src/linux-headers-${abi}/Module.symvers"];
 | |
| 	$modules_symver_fh = IO::File->new_tmpfile();
 | |
| 	PVE::Tools::run_command($cmd, output => '>&'.fileno($modules_symver_fh));
 | |
| 	seek($modules_symver_fh, 0, 0);
 | |
| } else {
 | |
| 	open($modules_symver_fh, '<', $input_file) or die "can't open '$input_file' - $!\n";
 | |
| }
 | |
| 
 | |
| my $lines = [];
 | |
| while(my $line = <$modules_symver_fh>) {
 | |
| 	if ($line =~ /^(.+)\s+(.+)\s+(.+)$/) {
 | |
| 		push @$lines, "$3 $2 $1";
 | |
| 	} else {
 | |
| 		warn "malformed symvers line: '$line'\n";
 | |
| 	}
 | |
| }
 | |
| close($modules_symver_fh);
 | |
| 
 | |
| PVE::Tools::file_set_contents($output_file, join("\n", sort @$lines));
 | 
