summaryrefslogtreecommitdiffstats
path: root/make_boot_img
diff options
context:
space:
mode:
Diffstat (limited to 'make_boot_img')
-rwxr-xr-xmake_boot_img311
1 files changed, 280 insertions, 31 deletions
diff --git a/make_boot_img b/make_boot_img
index e4bea7468..74f2f8b39 100755
--- a/make_boot_img
+++ b/make_boot_img
@@ -1,72 +1,321 @@
#!/usr/bin/perl
-@ARGV >= 2 or die "usage: $0 <image> cdrom|hd|network|network_ks\n";
+@ARGV >= 2 or die "usage: $0 <image> all|other|cdrom|hd|hdreiser|network|blank|pcmcia|live|tftp|tftprd\n";
+
+use Config;
+Config->import;
+my ($arch) = $Config{archname} =~ /(.*)-/;
+my $corporate = $ENV{CORPORATE} && " corporate"; #- use this for building a corporate version.
($img, $type) = @ARGV;
-$ks = "kickstart=floppy" if $type =~ s/_ks//;
-$mnt = "/mnt/disk";
+$instdir = "install";
+$mnt = "/tmp/drakx_mnt";
+$mke2fs = "/sbin/mke2fs -q -m 0 -F -s 1";
+
if ($>) {
$sudo = "sudo";
$ENV{PATH} = "/sbin:/usr/sbin:$ENV{PATH}";
}
+sub __ { print @_, "\n"; system(@_); }
+sub _ { __ @_; $? and die; }
+
+_ "$sudo mkdir $mnt" unless -e $mnt;
+_ "$sudo mkdir ${mnt}2" unless -e "${mnt}2";
$install = $ {{
+ all => "full-install",
+ other => "full-install",
+ blank => "full-install",
+ live => "full-install",
+ tftp => "full-install",
+ tftprd => "full-install",
+ pcmcia => "full-install",
network => "install",
cdrom => "local-install",
- hd => "local-install"
+ hd => "local-install",
+ hdreiser => "local-install",
+ live64 => "full-install",
+ tftp64 => "full-install",
+ tftprd64 => "full-install",
+ pcmcia64 => "full-install",
+ network64 => "install",
+ cdrom64 => "local-install",
+ hd64 => "local-install",
}}{$type} or die;
-$0 =~ /initrd/ ?
- initrd($mnt, $img) :
- boot_img($mnt, $img);
-
-sub __ { print @_, "\n"; system(@_); }
-sub _ { __ @_; $? and die; }
+$img =~ /rdz$/ ? initrd($mnt, $img) : $::{"boot_img_$arch"}->($mnt, $img);
+sub install_s { _ "strip $_[0]"; _ "$sudo install $_[0] $_[1]" }
sub initrd {
my ($mnt, $img) = @_;
+ my ($ltype, $I) = $type =~ /(.*?)(64)/; $ltype ||= $type;
my $tmp = "$ENV{HOME}/tmp/initrd";
-
- _ "install -s install/installinit/init install/install1/sbin/init";
- _ "install -s install/$install install/install1/sbin/install";
+ my $tar = "$instdir/install1.tar.bz2";
__ "$sudo umount $tmp $mnt 2>/dev/null";
- _ "dd if=/dev/zero of=$tmp bs=1k count=2000";
- _ "echo y | mke2fs $tmp";
- _ "$sudo mount $tmp $mnt -o loop";
- _ "$sudo cp -a install/install1/* $mnt";
- _ "$sudo install -d $mnt/modules";
- _ "$sudo cp -f modules/${type}_modules.cgz $mnt/modules/modules.cgz";
- _ "$sudo cp -f modules/modules.dep $mnt/modules/";
+ _ "dd if=/dev/zero of=$tmp bs=1k count=" . ($type eq "all" ? 4000 : 2000);
+ _ "$mke2fs $tmp";
+ _ "$sudo mount -t ext2 $tmp $mnt -o loop";
+
+ _ "$sudo tar xyC $mnt -f $tar";
+ install_s("$instdir/installinit/init", "$mnt/sbin");
+ install_s("$instdir/$install", "$mnt/sbin/install");
+
+ my $ftype = $type =~ /^(all)$/ ? "pcmcia" : $type;
+ if ($ftype eq "pcmcia") {
+ unlink "$mnt/sbin/sh";
+ _ "$sudo cp -a tools/$arch/sh $mnt/sbin";
+ _ "$sudo cp -a /etc/pcmcia $mnt/etc";
+ _ "$sudo patch -p0 -d $mnt/etc < $instdir/pcmcia_config.patch";
+ }
+ _ "$sudo cp -f install_${ftype}_modules/* $mnt/modules/" if -d "install_${ftype}_modules";
+ _ "$sudo cp -f modules$I/${ltype}_modules.cgz $mnt/modules/modules$I.cgz" if $type !~ /blank/;
+ _ "$sudo cp -f modules$I/modules.dep $mnt/modules/";
_ "$sudo umount $mnt";
- _ "gzip -9 -c $tmp > $img";
- _ "rm -f $tmp";
+
+# Workaround for vfat-loop bug (quite touchy)
+ _ "gzip -9f $tmp";
+ _ "cp -f $tmp.gz $img";
+ _ "rm -f $tmp.gz";
+# _ "gzip -9 -c $tmp > $img";
+# _ "rm -f $tmp";
}
-sub boot_img {
+sub boot_img_i386 {
my ($mnt, $img) = @_;
__ "$sudo umount $mnt 2>/dev/null";
- _ "bunzip2 -c install/installinit/emptyboot.img.bz2 > $img";
- _ "$sudo mount -o umask=0 $img $mnt -o loop";
- _ "cat vmlinuz > $mnt/vmlinuz";
- initrd("${mnt}2", "$mnt/initrd.gz");
-
+ if ($type eq "hd") {
+ _ "bunzip2 -c $instdir/installinit/msgboot.img.bz2 > $img";
+ } elsif ($type eq "all") {
+ _ "bunzip2 -c $instdir/installinit/msgboot-graphicallogo-2880.img.bz2 > $img";
+ } else {
+ _ "bunzip2 -c $instdir/installinit/msgboot-graphicallogo.img.bz2 > $img";
+ }
+ _ "$sudo mount -t msdos -o umask=0 $img $mnt -o loop";
+ _ "cat vmlinuz > $mnt/vmlinuz" if $type !~ /blank/;
+ -f "$type.rdz" ? _ "cp -f $type.rdz $mnt" : initrd("${mnt}2", "$mnt/$type.rdz");
+
+ my $ftype = $type =~ /^(other|all)$/ ? "cdrom" : $type;
+ my $timeout = 72;
output("$mnt/syslinux.cfg", "
default linux
-prompt 0
+prompt 1
+timeout $timeout
+display boot.msg
+F1 help.msg
+F2 boot.msg
label linux
kernel vmlinuz
- append $ks initrd=initrd.gz mdkinst $type
+ append ramdisk_size=32000 initrd=$type.rdz $ftype vga=788
+label vgalo
+ kernel vmlinuz
+ append ramdisk_size=32000 initrd=$type.rdz $ftype vga=785
+label vgahi
+ kernel vmlinuz
+ append ramdisk_size=32000 initrd=$type.rdz $ftype vga=791
+label vga16
+ kernel vmlinuz
+ append ramdisk_size=32000 initrd=$type.rdz $ftype vga16
+label text
+ kernel vmlinuz
+ append ramdisk_size=32000 initrd=$type.rdz $ftype text
+label patch
+ kernel vmlinuz
+ append ramdisk_size=32000 initrd=$type.rdz $ftype patch vga=788
+label expert
+ kernel vmlinuz
+ append ramdisk_size=32000 initrd=$type.rdz $ftype expert vga=788
+label rescue
+ kernel vmlinuz
+ append ramdisk_size=32000 initrd=$type.rdz $ftype rescue rw
+label lnx4win
+ kernel vmlinuz
+ append ramdisk_size=32000 initrd=$type.rdz $ftype lnx4win vga=788
+label preinst
+ kernel vmlinuz
+ append ramdisk_size=32000 initrd=all.rdz cdrom rescue oem rw
+label oem
+ kernel vmlinuz
+ append ramdisk_size=32000 initrd=all.rdz cdrom rescue oem rw
+label auto
+ kernel vmlinuz
+ append ramdisk_size=32000 initrd=$type.rdz $ftype auto_install=Mandrake/base/auto_inst.cfg.pl
+label all
+ kernel vmlinuz
+ append ramdisk_size=32000 initrd=$type.rdz pcmcia vga=788
");
- _ "cp -f install/installinit/ks.cfg $mnt 2>/dev/null" if $ks;
_ "sync";
+ _ "df $mnt";
}
+sub boot_img_alpha {
+ my ($mnt, $img) = @_;
+
+ __ "$sudo umount $mnt 2>/dev/null";
+ _ "dd if=/dev/zero of=$img bs=1k count=1440";
+ _ "$mke2fs $img";
+ _ "/sbin/e2writeboot $img /boot/bootlx";
+ _ "$sudo mount -t ext2 $img $mnt -o loop";
+ _ "cp -f vmlinux.gz $mnt" if $type !~ /blank/;
+ -f "$type.rdz" ? _ "cp -f $type.rdz $mnt" : initrd("${mnt}2", "$mnt/$type.rdz");
+
+ mkdir "$mnt/etc", 0777;
+ output("$mnt/etc/aboot.conf",
+"0:vmlinux.gz initrd=$type.rdz rw ramdisk_size=32000 $type
+1:vmlinux.gz initrd=$type.rdz rw ramdisk_size=32000 text $type
+");
+ _ "sync";
+ _ "df $mnt";
+}
+sub boot_img_sparc {
+ my ($mnt, $img) = @_;
+ if ($type =~ /^live(.*)/) {
+ #- hack to produce directly into /export the needed file for cdrom boot.
+ my $dir = "/export";
+ my $boot = "boot"; #- non-absolute pathname only!
+
+ _ "mkdir -p $dir/$boot";
+ _ "cp -f /boot/cd.b /boot/second.b $dir/$boot";
+ _ "cp -f vmlinux$1 $dir/$boot/vmlinux$1";
+ -f "live$1.rdz" ? _ "cp -f live$1.rdz $dir/$boot" : initrd("${mnt}2", "$dir/$boot/live$1.rdz");
+
+ output("$dir/$boot/silo.conf", "
+partition=1
+default=linux
+timeout=100
+read-write
+message=/$boot/boot.msg
+image=\"cat /$boot/boot.msg\"
+ label=1
+ single-key
+image=\"cat /$boot/general.msg\"
+ label=2
+ single-key
+image=\"cat /$boot/expert.msg\"
+ label=3
+ single-key
+image=\"cat /$boot/rescue.msg\"
+ label=4
+ single-key
+image=\"cat /$boot/kickit.msg\"
+ label=5
+ single-key
+image=\"cat /$boot/param.msg\"
+ label=6
+ single-key
+image[sun4c,sun4d,sun4m]=/$boot/vmlinux
+ label=linux
+ alias=install
+ initrd=/$boot/live.rdz
+ append=\"ramdisk_size=32000$corporate\"
+image[sun4c,sun4d,sun4m]=/$boot/vmlinux
+ label=text
+ initrd=/$boot/live.rdz
+ append=\"ramdisk_size=32000 text$corporate\"
+image[sun4c,sun4d,sun4m]=/$boot/vmlinux
+ label=expert
+ initrd=/$boot/live.rdz
+ append=\"ramdisk_size=32000 expert$corporate\"
+image[sun4c,sun4d,sun4m]=/$boot/vmlinux
+ label=ks
+ initrd=/$boot/live.rdz
+ append=\"ramdisk_size=32000 ks$corporate\"
+image[sun4c,sun4d,sun4m]=/$boot/vmlinux
+ label=rescue
+ initrd=/$boot/live.rdz
+ append=\"ramdisk_size=32000 rescue rw root=/dev/ram3$corporate\"
+image[sun4u]=/$boot/vmlinux64
+ label=linux
+ alias=install
+ initrd=/$boot/live64.rdz
+ append=\"ramdisk_size=32000$corporate\"
+image[sun4u]=/$boot/vmlinux64
+ label=text
+ initrd=/$boot/live64.rdz
+ append=\"ramdisk_size=32000 text$corporate\"
+image[sun4u]=/$boot/vmlinux64
+ label=expert
+ initrd=/$boot/live64.rdz
+ append=\"ramdisk_size=32000 expert$corporate\"
+image[sun4u]=/$boot/vmlinux64
+ label=ks
+ initrd=/$boot/live64.rdz
+ append=\"ramdisk_size=32000 ks$corporate\"
+image[sun4u]=/$boot/vmlinux64
+ label=rescue
+ initrd=/$boot/live64.rdz
+ append=\"ramdisk_size=32000 rescue rw root=/dev/ram3$corporate\"
+");
+
+ output("$dir/$boot/README", "
+To Build a Bootable CD-ROM, try:
+ mkisofs -R -o t.iso -s /$boot/silo.conf /export
+");
+ } elsif ($type =~ /^tftprd(.*)/) {
+ my $dir = "/export";
+ my $boot = "images";
+ my $setarch = $1 ? "sparc64" : "sparc32";
+
+ _ "mkdir -p $dir/$boot";
+ -f "$type.rdz" or initrd("${mnt}2", "$type.rdz");
+ _ "cp -f vmlinux$1.aout $dir/$boot/$type.img";
+ _ "$setarch kernel$1/src/arch/sparc$1/boot/piggyback $dir/$boot/$type.img kernel$1/boot/System.map $type.rdz";
+ } elsif ($type =~ /^tftp(.*)/) {
+ my $dir = "/export";
+ my $boot = "images";
+
+ _ "mkdir -p $dir/$boot";
+ _ "cp -f vmlinux$1.aout $dir/$boot/$type.img";
+ } else {
+ my $dir = "floppy";
+ my ($ltype, $I) = $type =~ /(.*?)(64)/; $ltype ||= $type;
+
+ __ "$sudo umount $mnt 2>/dev/null";
+ _ "rm -rf $dir";
+ _ "mkdir -p $dir";
+ _ "cp -f /boot/fd.b /boot/second.b $dir";
+ _ "cp -f vmlinuz$I $dir/vmlinux$I.gz" if $type !~ /blank/;
+ -f "$type.rdz" ? _ "cp -f $type.rdz $dir" : initrd("${mnt}2", "$dir/$type.rdz");
+
+ output("$dir/boot.msg", "
+Welcome to Linux-Mandrake 7.1
+
+Press <Enter> to install or upgrade a system 7mLinux-Mandrake7m
+");
+
+ output("$dir/silo.conf", "
+partition=1
+default=linux
+timeout=100
+read-write
+message=/boot.msg
+image=/vmlinux$I.gz
+ label=linux
+ initrd=/$type.rdz
+ append=\"ramdisk_size=32000 $ltype$corporate\"
+");
+ _ "genromfs -d $dir -f /dev/ram -A 2048,/.. -a 512 -V \'DrakX boot disk\'";
+ _ "$sudo mount -t romfs /dev/ram $mnt";
+ _ "silo -r $mnt -F -i /fd.b -b /second.b -C /silo.conf";
+ _ "$sudo umount $mnt";
+ _ "dd if=/dev/ram of=$type.img bs=1440k count=1";
+ _ "sync";
+ _ "$sudo mount -t romfs /dev/ram $mnt";
+ _ "df $mnt";
+ }
+}
+
+sub boot_img_ppc {
+ my ($mnt, $img) = @_;
+ # Here's a quick hack... just to give the script somethign to do. :)
+ # We do not yet have a set way of making bootable images.
+ _ "cp $type.rdz $img";
+}
sub output {
my $f = shift;