⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 build-initrd.sh

📁 Fast and transparent file system and swap encryption package for linux. No source code changes to li
💻 SH
📖 第 1 页 / 共 2 页
字号:
        /* wandered off to change_root code path!    */        wrStr("ERROR: initrd config says USEPIVOT>0, but bootloader acts like USEPIVOT=0\n");        _exit(0);    }#else    if(getpid() == 1) {        /* change_root was configured, but kernel    */        /* has wandered off to pivot_root code path! */        wrStr("ERROR: initrd config says USEPIVOT=0, but bootloader acts like USEPIVOT>0\n");        runInit();    }#endif#if ${INITIALDELAY}    {        struct timespec req;        wrStr("Delaying ${BOOTDEV} mount for ${INITIALDELAY} seconds...\n");        req.tv_sec = ${INITIALDELAY};        req.tv_nsec = 0;        nanosleep(&req, 0);        wrStr("...delay complete, continuing\n");    }#endif#if ${TOOLSPROMPT}    wrStr("Please insert BOOT-TOOLS media, and press ENTER  ");    read(0, buf, sizeof(buf));#endif    /* this intentionally mounts /boot partition as /lib */    if(mount("${BOOTDEV}", "/lib", "${BOOTTYPE}", MS_MGC_VAL | MS_RDONLY, 0)) {        wrStr("Mounting ${BOOTDEV} as /lib failed\n");        goto fail4;    }#if ${UTF8KEYBMODE}    buf[0] = 0;    strCat(buf, "/lib/kbd_mode -u");    exeWait(buf);#endif#if ${LOADNATIONALKEYB}    buf[0] = 0;    strCat(buf, "/lib/loadkeys");#if ${UTF8KEYBMODE}    strCat(buf, " -u");#endif    strCat(buf, " /lib/default.kmap");    exeWait(buf);#endif    uname(&un);    if((un.release[0] > '2') || (un.release[1] != '.') || (un.release[2] >= '6') || (un.release[3] != '.')) {        modext = ".ko";    } else {        modext = ".o";    }#if ${USEMODULE}    buf[0] = 0;    strCat(buf, "/lib/insmod /lib/modules-");    strCat(buf, &un.release[0]);    strCat(buf, "/loop");    strCat(buf, modext);    strCat(buf, " ${LOOPMODPARAMS}");    if(exeWait(buf)) goto fail5;#endif#if ${EXTRAMODULELOAD1}    buf[0] = 0;    strCat(buf, "/lib/insmod /lib/modules-");    strCat(buf, &un.release[0]);    strCat(buf, "/${EXTRAMODULENAME1}");    strCat(buf, modext);    strCat(buf, " ${EXTRAMODULEPARAMS1}");    if(exeWait(buf)) goto fail5;#endif#if ${EXTRAMODULELOAD2}    buf[0] = 0;    strCat(buf, "/lib/insmod /lib/modules-");    strCat(buf, &un.release[0]);    strCat(buf, "/${EXTRAMODULENAME2}");    strCat(buf, modext);    strCat(buf, " ${EXTRAMODULEPARAMS2}");    if(exeWait(buf)) goto fail5;#endif#if ${EXTRAMODULELOAD3}    buf[0] = 0;    strCat(buf, "/lib/insmod /lib/modules-");    strCat(buf, &un.release[0]);    strCat(buf, "/${EXTRAMODULENAME3}");    strCat(buf, modext);    strCat(buf, " ${EXTRAMODULEPARAMS3}");    if(exeWait(buf)) goto fail5;#endif#if ${EXTRAMODULELOAD4}    buf[0] = 0;    strCat(buf, "/lib/insmod /lib/modules-");    strCat(buf, &un.release[0]);    strCat(buf, "/${EXTRAMODULENAME4}");    strCat(buf, modext);    strCat(buf, " ${EXTRAMODULEPARAMS4}");    if(exeWait(buf)) goto fail5;#endif#if ${EXTRAMODULELOAD5}    buf[0] = 0;    strCat(buf, "/lib/insmod /lib/modules-");    strCat(buf, &un.release[0]);    strCat(buf, "/${EXTRAMODULENAME5}");    strCat(buf, modext);    strCat(buf, " ${EXTRAMODULEPARAMS5}");    if(exeWait(buf)) goto fail5;#endif#if ${EXTERNALGPGFILES}#if ${MOUNTDELAY}    {        struct timespec req;        wrStr("Delaying ${EXTERNALGPGDEV} mount for ${MOUNTDELAY} seconds...\n");        req.tv_sec = ${MOUNTDELAY};        req.tv_nsec = 0;        nanosleep(&req, 0);        wrStr("...delay complete, continuing\n");    }#endif    if(mount("${EXTERNALGPGDEV}", "/mnt", "${EXTERNALGPGTYPE}", MS_MGC_VAL | MS_RDONLY, 0)) {        wrStr("Mounting ${EXTERNALGPGDEV} containing gpg key files failed.\n");        goto fail5;    }#endif    tryAgain:#if !(${USEROOTSETUP})    wrStr("\nEncrypted file system, please supply correct password to continue\n\n");#endif    buf[0] = 0;    strCat(buf, "/lib/${LOSETUPPROG} -e ${CIPHERTYPE} ${PSEED} ${ITERCOUNTK} ${LOINIT}");#if ${USEGPGKEY}    strCat(buf, " -K /${GPGMNTPATH}/${GPGKEYFILE} -G /${GPGMNTPATH}");#endif    strCat(buf, " /dev/loop${DEVFSSLASH1}${ROOTLOOPINDEX} ${CRYPTROOT}");    if(exeWait(buf)) {        if(++x >= 5) goto fail3;        goto tryAgain;    }#if !(${USEROOTSETUP})    wrStr("\n");#endif#if ${USEPIVOT}    if(mount("/dev/loop${DEVFSSLASH1}${ROOTLOOPINDEX}", "/new-root", "${ROOTTYPE}", MS_MGC_VAL | MS_RDONLY, 0)) {        wrStr("Mounting /dev/loop${DEVFSSLASH1}${ROOTLOOPINDEX} failed\n");        buf[0] = 0;        strCat(buf, "/lib/${LOSETUPPROG} -d /dev/loop${DEVFSSLASH1}${ROOTLOOPINDEX}");        if(exeWait(buf)) goto fail3;        if(++x >= 5) goto fail3;        goto tryAgain;    }#if ${EXTERNALGPGFILES}    umount("/mnt");#endif    umount("/lib");    if(chdir("/new-root")) {        wrStr("chdir() to /new-root failed\n");        goto fail1;    }#if ${USEPIVOT} == 2    removeInitramfsFiles();    if(mount(".", "/", 0, MS_MGC_VAL | MS_MOVE, 0)) {        wrStr("Overmounting root failed\n");        fail1:        chdir("/");        umount("/new-root");        goto fail4;    }    /* initramfs/switch_root type setup wants chroot() immediately after mount() */    if(chroot(".")) {        wrStr("chroot() to new root failed\n");        goto fail1;    }#else    if(pivot_root(".", "initrd")) {        wrStr("pivot_root() to new root failed.\n Either 'initrd' directory is missing from your encrypted root partition\n or your kernel doesn't have pivot_root system call.\n");        fail1:        chdir("/");        umount("/new-root");        goto fail4;    }    /* pivot_root type setup wants chdir("/") immediately after pivot_root() */#endif    chdir("/");#if ${USEDEVFS}    if(mount("none", "dev", "devfs", MS_MGC_VAL, 0)) {        wrStr("Mounting /dev failed\n");        goto fail1;    }#endif    x = open("dev/console", O_RDWR, 0);    if(x == -1) {        wrStr("Opening /dev/console on encrypted root failed\n");        goto fail1;    }    dup2(x, 0);    dup2(x, 1);    dup2(x, 2);    close(x);#if ${USEPIVOT} == 1    /* pivot_root type setup wants chroot() after chdir("/") */    if(chroot(".")) {        wrStr("chroot() to new root failed\n");        goto fail1;    }    wrStr("Pivoting to encrypted root completed successfully\n");#else    wrStr("Switching to encrypted root completed successfully\n");#endif    runInit();#else    /* USEPIVOT=0 configured, write new device number to real-root-dev */    if(mount("none", "/proc", "proc", MS_MGC_VAL, 0)) {        wrStr("Mounting /proc failed\n");        goto fail3;    }    if((x = open("/proc/sys/kernel/real-root-dev", O_WRONLY, 0)) == -1) {        wrStr("Unable to open real-root-dev\n");        goto fail2;    }    write(x, "0x70${ROOTLOOPINDEX}\n", 6);    close(x);    fail2:    umount("/proc");#endif    fail3:#if ${EXTERNALGPGFILES}    umount("/mnt");#endif    fail5:    umount("/lib");    fail4:#if ${USEPIVOT}    doHalt();#endif    _exit(0);}EOFif [ ${USEDIETLIBC} == 1 ] ; then    diet ${GCC} -Wall -O2 -s -static -pipe tmp-c-$$.c -o tmp-c-$$else    ${GCC} -Wall -O2 -s -static -nostartfiles -pipe tmp-c-$$.c -o tmp-c-$$firm -f tmp-c-$$.[co]mkdir tmp-d-$$if [ ${USEPIVOT} != 2 ] ; then    x=`cat tmp-c-$$ | wc -c`    y=`expr ${x} + 1023`    x=`expr ${y} / 1024`    y=`expr ${x} + 11`    if [ ${x} -gt 7 ] ; then        y=`expr ${y} + 1`    fi    if [ ${x} -gt 519 ] ; then        y=`expr ${y} + 3`    fi    if [ ${USEGPGKEY} == 1 ] ; then        y=`expr ${y} + 1`    fi    if [ ${EXTERNALGPGFILES} == 1 ] ; then        y=`expr ${y} + 1`    fi    dd if=/dev/zero of=tmp-i-$$ bs=1024 count=${y}    /sbin/mkfs -t minix -i 32 tmp-i-$$    mount -t minix tmp-i-$$ tmp-d-$$ -o loop=/dev/loop${DEVFSSLASH2}${TEMPLOOPINDEX}ficd tmp-d-$$mkdir dev libln -s lib lib64if [ ${USEPIVOT} != 2 ] ; then    mv ../tmp-c-$$ linuxrcelse    mv ../tmp-c-$$ initfiif [ ${EXTERNALGPGFILES} == 1 ] ; then    mkdir mntfiif [ ${USEGPGKEY} == 1 ] ; then    ln -s lib binfiif [ ${USEPIVOT} != 0 ] ; then    mkdir new-rootelse    mkdir procfi# <device name prefix> <major dev-id> <minor dev-id start> <device 0 suffix>function maybeMakeDiskNode{    x=$3    for i in "$4" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ; do        for y in ${BOOTDEV} ${CRYPTROOT} ${GPGMOUNTDEV} ; do            if [ ${y} == /dev/$1${i} ] ; then                mknod dev/$1${i} b $2 ${x}                mknodCount=`expr ${mknodCount} + 1`            fi        done        x=`expr ${x} + 1`    done    return}if [ ${USEDEVFS} == 0 ] ; then    mknodCount=0    mknodRefCount=2    if [ ${EXTERNALGPGFILES} == 1 ] ; then        mknodRefCount=`expr ${mknodRefCount} + 1`    fi    maybeMakeDiskNode hda       3   0 ""    maybeMakeDiskNode hdb       3  64 ""    maybeMakeDiskNode hdc      22   0 ""    maybeMakeDiskNode hdd      22  64 ""    maybeMakeDiskNode hde      33   0 ""    maybeMakeDiskNode hdf      33  64 ""    maybeMakeDiskNode hdg      34   0 ""    maybeMakeDiskNode hdh      34  64 ""    maybeMakeDiskNode sda       8   0 ""    maybeMakeDiskNode sdb       8  16 ""    maybeMakeDiskNode sdc       8  32 ""    maybeMakeDiskNode sdd       8  48 ""    maybeMakeDiskNode sde       8  64 ""    maybeMakeDiskNode sdf       8  80 ""    maybeMakeDiskNode sdg       8  96 ""    maybeMakeDiskNode sdh       8 112 ""    maybeMakeDiskNode uba     180   0 ""    maybeMakeDiskNode ubb     180   8 ""    maybeMakeDiskNode ubc     180  16 ""    maybeMakeDiskNode ubd     180  24 ""    maybeMakeDiskNode ube     180  32 ""    maybeMakeDiskNode ubf     180  40 ""    maybeMakeDiskNode ubg     180  48 ""    maybeMakeDiskNode ubh     180  56 ""    maybeMakeDiskNode scd      11   0  0    maybeMakeDiskNode sr       11   0  0    maybeMakeDiskNode md        9   0  0    maybeMakeDiskNode fd        2   0  0    maybeMakeDiskNode idac0d0p 72   0  0    maybeMakeDiskNode idac0d1p 72  16  0    maybeMakeDiskNode idac0d2p 72  32  0    maybeMakeDiskNode idac0d3p 72  48  0    if [ ${mknodCount} != ${mknodRefCount} ] ; then        echo "*****************************************************************"        echo "***  Internal build-initrd.sh error condition detected. This  ***"        echo "***  script was supposed to create block device nodes for     ***"        echo "***  BOOTDEV=, CRYPTROOT= and possibly EXTERNALGPGDEV= but    ***"        echo "***  lacked knowledge of how to create at least one of them.  ***"        echo "***  Script aborted.                                          ***"        echo "*****************************************************************"        cd ..        if [ ${USEPIVOT} != 2 ] ; then            umount tmp-d-$$            rmdir tmp-d-$$            rm tmp-i-$$        else            rm -rf tmp-d-$$        fi        exit 1    fi    # NOTE: If you add/remove/change these device names, then also edit    # removeInitramfsFiles() function so it can remove all device nodes    mknod dev/console c 5 1    mknod dev/tty c 5 0    mknod dev/tty1 c 4 1    mknod dev/null c 1 3    mknod dev/zero c 1 5    mknod dev/ram0 b 1 0    mknod dev/ram1 b 1 1    mknod dev/loop${ROOTLOOPINDEX} b 7 ${ROOTLOOPINDEX}fiif [ ${USEPIVOT} != 2 ] ; then    cd ..    df tmp-d-$$    umount tmp-d-$$    rmdir tmp-d-$$    sync ; sync ; sync    gzip -9 tmp-i-$$else    find | cpio -o -H newc | gzip -9c >../tmp-i-$$.gz    cd ..    rm -rf tmp-d-$$fimv tmp-i-$$.gz ${DESTINATIONROOT}${DESTINATIONPREFIX}/${INITRDGZNAME}ls -l ${DESTINATIONROOT}${DESTINATIONPREFIX}/${INITRDGZNAME}if [ ${INITRDONLY} == 1 ] ; then    echo Done.    sync    exit 0fiz="/sbin/losetup"if [ ${USEMODULE}${EXTRAMODULELOAD1}${EXTRAMODULELOAD2}${EXTRAMODULELOAD3}${EXTRAMODULELOAD4}${EXTRAMODULELOAD5} != 000000 ] ; then    z="${z} /sbin/insmod"    if [ -r ${SOURCEROOT}/sbin/insmod.modutils ] ; then        z="${z} /sbin/insmod.modutils"    fi    if [ -r ${SOURCEROOT}/sbin/insmod.old ] ; then        z="${z} /sbin/insmod.old"    fifiif [ ${UTF8KEYBMODE} == 1 ] ; then    z="${z} "`which kbd_mode`fiif [ ${LOADNATIONALKEYB} == 1 ] ; then    z="${z} "`which loadkeys`fiif [ ${USEGPGKEY} == 1 ] ; then    z="${z} "`which gpg`fifor x in ${z} ; do    echo Copying ${SOURCEROOT}${x} to ${DESTINATIONROOT}${DESTINATIONPREFIX}    cp -p ${SOURCEROOT}${x} ${DESTINATIONROOT}${DESTINATIONPREFIX}    y=`ldd ${SOURCEROOT}${x} | perl -ne 'if(/([^ ]*) \(0x/){print "$1\n"}'`    for a in ${y} ; do        echo Copying ${SOURCEROOT}${a} to ${DESTINATIONROOT}${DESTINATIONPREFIX}        cp -p ${SOURCEROOT}${a} ${DESTINATIONROOT}${DESTINATIONPREFIX}    donedoneif [ ${USEPIVOT} != 2 ] ; then    if [ ! -d ${DESTINATIONROOT}/initrd ] ; then        mkdir ${DESTINATIONROOT}/initrd    fifiecho Done.syncexit 0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -