And all our installer does, and I will give you the code if you want it,
I'd be happy to even have Pavel audit it, is make two arrays,
extern unsigned int installer_size;
extern unsigned char installer_data[];
extern unsigned int data_size;
extern unsigned char data_data[];
which we do some magic on to make sure they are preallocated (HPUX decided
that static global data should be allocated and bzeroed at runtime, so
we preinitialize them with garbage if I remember correctly).
Then the thing that makes the installer mmaps the object, looks for these
arrays (we stick some magic numbers in front of them), and files them in
with a .tar.gz and the real installer, which is a shell script.
The reason we didn't use shar, Pavel, is that we are shipping a binary.
If we used shar that would increase the size of the image that you download
and we wanted downloads to be fast. As it is, I think it's a couple of MB.
Anyway, then the actual binary which runs is generated from the following
program which is hardly worth all the fuss.
main()
{
char installer_name[200];
char data_name[200];
char cmd[2048];
int fd;
fprintf(stderr, "Please wait while we unpack the installer...");
sprintf(installer_name, "/tmp/installer%d", getpid());
fd = creat(installer_name, 0777);
if (fd == -1) {
perror(installer_name);
exit(1);
}
if (write(fd, installer_data, installer_size) != installer_size) {
perror("write on installer");
unlink(installer_name);
exit(1);
}
close(fd);
sprintf(data_name, "/tmp/data%d", getpid());
fd = creat(data_name, 0777);
if (fd == -1) {
perror(data_name);
exit(1);
}
sprintf(installer_name, "/tmp/installer%d", getpid());
if (write(fd, data_data, data_size) != data_size) {
perror("write on data");
unlink(data_name);
exit(1);
}
close(fd);
fprintf(stderr, "done.\n");
sprintf(cmd, "%s %s %s", installer_name, installer_name, data_name);
system(cmd);
exit(0);
}
----- Larry McVoy lm at bitmover.com http://www.bitmover.com/lm - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/