#!/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";