summaryrefslogtreecommitdiffstats
path: root/tools/update_images
blob: 1cc5ea533c2b4d82d04195584ac1b01d0e654484 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#!/usr/bin/perl

@ARGV == 3 or die "Usage: $0 filename.img imagetype path_to_mar_bin\n  ex. $0 cdrom-changedisk.img cdrom\n\nPut the old images (*.img), new vmlinuz, new modules.dep and new *.mar files in a fresh directory, and update each image file one by one.";

$file = $ARGV[0];
$img = $ARGV[1];
$marbin = $ARGV[2];

sub __ { print @_, "\n"; system(@_); }
sub _ { __ @_; $? and die; }

$topdir = '/tmp/updimg';

print "Updating boot image file $file of type $img\n";

_ "rm -rf $topdir";
_ "mkdir $topdir";

_ "mkdir $topdir/img";
_ "mount -o loop $file $topdir/img";

$rdz = glob("$topdir/img/*.rdz");
$rdz or die "Could not glob rdz file in $topdir/img/*.rdz\n";

_ "zcat $rdz > /tmp/meuh";
_ "mkdir $topdir/initrd";
_ "mount -o loop /tmp/meuh $topdir/initrd";

print "\n\tOld sizes:\n";
print `ls -l $topdir/img/vmlinuz`;
print `ls -l $topdir/initrd/modules/modules.mar`;
system("df $topdir/img");
print "\n";

_ "cp -f vmlinuz $topdir/img/vmlinuz";
system("$marbin -l $topdir/initrd/modules/modules.mar | sort > $topdir/oldmar");
system("$marbin -l ${img}_modules.mar | sort > $topdir/newmar");
_ "cp -f ${img}_modules.mar $topdir/initrd/modules/modules.mar";
_ "cp -f modules.dep $topdir/initrd/modules/modules.dep";

_ "umount $topdir/initrd";
_ "gzip -c /tmp/meuh > $rdz";

print "\n\tNew sizes:\n";
print `ls -l vmlinuz`;
print `ls -l ${img}_modules.mar`;
system("df $topdir/img");
print "\nDiff from old to new marfiles:\n";
print `diff -u $topdir/oldmar $topdir/newmar`;
print "\n";

_ "umount $topdir/img";