Exemple #1
0
function package($platform, $image_name)
{
    global $dirs;
    global $mfsroot_pad, $image_pad;
    _set_permissions($image_name);
    if (!file_exists("tmp")) {
        _exec("mkdir -p tmp");
        _exec("mkdir -p tmp/mnt");
        _exec("mkdir -p tmp/stage");
    }
    $kernel = _platform_to_kernel($platform);
    // mfsroot
    // add rootfs
    _exec("cd tmp/stage; tar -cf - -C {$image_name} ./ | tar -xpf -");
    // ...system modules
    _exec("mkdir -p tmp/stage/boot");
    _exec("mkdir -p tmp/stage/boot/kernel");
    if ($platform == "generic-pc" || $platform == "generic-pc-cdrom") {
        _exec("cp /sys/i386/compile/{$kernel}/modules/usr/src/sys/modules/acpi/acpi/acpi.ko tmp/stage/boot/kernel/");
    }
    // ...stamps
    _exec("echo \"" . basename($image_name) . "\" > tmp/stage/etc/version");
    _exec("echo `date` > tmp/stage/etc/version.buildtime");
    _exec("echo {$platform} > tmp/stage/etc/platform");
    // get size and package mfsroot
    $mfsroot_size = _get_dir_size("tmp/stage") + $mfsroot_pad;
    _exec("dd if=/dev/zero of=tmp/mfsroot bs=1k count={$mfsroot_size}");
    _exec("mdconfig -a -t vnode -f tmp/mfsroot -u 0");
    _exec("bsdlabel -rw md0 auto");
    _exec("newfs -O 1 -b 8192 -f 1024 -o space -m 0 /dev/md0c");
    _exec("mount /dev/md0c tmp/mnt");
    _exec("cd tmp/mnt; tar -cf - -C ../stage ./ | tar -xpf -");
    // dummynet.ko and ipfw.ko reside in mfsroot/boot/kernel
    _exec("mkdir -p tmp/mnt/boot/kernel");
    _exec("cp /sys/i386/compile/{$kernel}/modules/usr/src/sys/modules/dummynet/dummynet.ko tmp/mnt/boot/kernel/");
    _exec("cp /sys/i386/compile/{$kernel}/modules/usr/src/sys/modules/ipfw/ipfw.ko tmp/mnt/boot/kernel/");
    _log("---- {$platform} - " . basename($image_name) . " - mfsroot ----");
    _exec("df tmp/mnt");
    _exec("umount tmp/mnt");
    _exec("rm -rf tmp/stage/*");
    _exec("mdconfig -d -u 0");
    _exec("gzip -9 tmp/mfsroot");
    _exec("mv tmp/mfsroot.gz {$dirs['mfsroots']}/{$platform}-" . basename($image_name) . ".gz");
    // .img
    if ($platform != "generic-pc-cdrom") {
        // add mfsroot
        _exec("cp {$dirs['mfsroots']}/{$platform}-" . basename($image_name) . ".gz " . "tmp/stage/mfsroot.gz");
        // ...boot
        _exec("mkdir -p tmp/stage/boot");
        _exec("mkdir -p tmp/stage/boot/kernel");
        _exec("cp /usr/obj/usr/src/sys/boot/i386/loader/loader tmp/stage/boot/");
        _exec("cp {$dirs['boot']}/{$platform}/loader.rc tmp/stage/boot/");
        // ...conf
        _exec("mkdir -p tmp/stage/conf");
        _exec("cp {$dirs['phpconf']}/config.xml tmp/stage/conf");
        _exec("cp /sys/i386/compile/{$kernel}/kernel.gz tmp/stage/kernel.gz");
        // get size and populate
        $image_size = _get_dir_size("tmp/stage") + $asterisk_size + $image_pad;
        $image_size += 16 - $image_size % 16;
        _exec("dd if=/dev/zero of=tmp/image.bin bs=1k count={$image_size}");
        _exec("mdconfig -a -t vnode -f tmp/image.bin -u 0");
        _exec("bsdlabel -Brw -b /usr/obj/usr/src/sys/boot/i386/boot2/boot md0 auto");
        _exec("newfs -O 1 -b 8192 -f 1024 -o space -m 0 /dev/md0a");
        _exec("mount /dev/md0a tmp/mnt");
        _exec("cd tmp/mnt; tar -cf - -C ../stage ./ | tar -xpf -");
        _log("---- {$platform} - " . basename($image_name) . " - system partition ----");
        _exec("df tmp/mnt");
        _exec("umount tmp/mnt");
        // cleanup
        _exec("mdconfig -d -u 0");
        _exec("gzip -9 tmp/image.bin");
        _exec("mv tmp/image.bin.gz {$dirs['images']}/m0n0wall-{$platform}-" . basename($image_name) . ".img");
        // .iso
    } else {
        if ($platform == "generic-pc-cdrom" && !file_exists($dirs['images'] . "/{$platform}-{$version}-" . basename($image_name) . ".iso")) {
            _exec("mkdir -p tmp/cdroot");
            _exec("cp " . $dirs['mfsroots'] . "/{$platform}-" . basename($image_name) . ".gz tmp/cdroot/mfsroot.gz");
            _exec("cp /sys/i386/compile/{$kernel}/kernel.gz tmp/cdroot/kernel.gz");
            _exec("mkdir -p tmp/cdroot/boot");
            _exec("cp /usr/obj/usr/src/sys/boot/i386/cdboot/cdboot tmp/cdroot/boot/");
            _exec("cp /usr/obj/usr/src/sys/boot/i386/loader/loader tmp/cdroot/boot/");
            _exec("cp " . $dirs['boot'] . "/{$platform}/loader.rc tmp/cdroot/boot/");
            _exec("cp /usr/obj/usr/src/sys/boot/i386/boot2/boot tmp/cdroot/boot/");
            _exec("mkisofs -b \"boot/cdboot\" -no-emul-boot -A \"m0n0wall CD-ROM image\" " . "-c \"boot/boot.catalog\" -d -r -publisher \"m0n0.ch\" " . "-p \"Your Name\" -V \"m0n0wall_cd\" -o \"m0n0wall.iso\" tmp/cdroot/");
            _exec("mv m0n0wall.iso " . $dirs['images'] . "/m0n0wall-cdrom-" . basename($image_name) . ".iso");
        }
    }
    _exec("rm -rf tmp");
}
                _set_users("add", $userid, $groupid);
                break;
            case ' DELETE ':
                _page_sechead("exhibit.png", "User Management");
                _set_users("delete", $userid, $groupid);
                break;
            default:
                _page_sechead("exhibit.png", "User Management");
                break;
        }
        _display_users();
        break;
    case 'rolls':
    default:
        $roll = $_REQUEST['roll'];
        $library = $_REQUEST['library'];
        $public = $_REQUEST['public'];
        $group = $_REQUEST['group'];
        if (!isset($roll) and !isset($library)) {
            _page_sechead("exhibit.png", "Roll Management");
            _display_permissions();
        } elseif (isset($public) and isset($group)) {
            _page_sechead("exhibit.png", "Roll Management");
            _set_permissions($roll, $library, $public, $group);
        } else {
            _page_sechead("error.png", "An error occurred updating permissions.");
            _display_permissions();
        }
        break;
}
_page_footer();