#!/usr/bin/perl # Copyright 2004 Dan Risacher (not that I'm proud of it, mind you) # May be used for any purpose so long as copyright remains in the source code use strict; my $MOUNT = "/mnt/initrd"; my $IMAGE = "initrd.img"; my $SOURCE = "template"; my %progs; my %libs; &doit ("umount $MOUNT"); &doit ("dd if=/dev/zero of=$IMAGE bs=1024 count=20000"); &doit ("mke2fs -F $IMAGE"); &doit ("mount -o loop $IMAGE $MOUNT"); &doit ("cd $SOURCE; cp -rp . $MOUNT"); &read_proglist; ©_progs; &doit ("umount $MOUNT"); &doit ("gzip -9 <$IMAGE >$IMAGE.gz"); sub read_proglist { open PROGRAMS, "programs.txt"; while (my $line = ) { $line =~ s/\#.*//; if ($line =~ m/^\s*(\S+)/) { if (-x $1) { my $ldd = `ldd $1`; # print "$1\n"; $progs{$1} = 1; # print $ldd; while ($ldd =~ s/ \=\> (\S+)//) { # print " $1\n"; $libs{$1} = 1; } } } } } sub copy_progs { for my $f (keys %progs) { &doit( "cp -p $f $MOUNT/$f"); } for my $f (keys %libs) { $f =~ m!(\S*\/)!; # match parent directory if (! -e "$MOUNT/$1") { &doit( "mkdir -p $MOUNT/$1"); } print "$f\n"; &doit( "cp -p $f $MOUNT/$f"); } } sub doit { print @_, "\n"; system @_; }