亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? loader.c~

?? linux 安裝程序
?? C~
?? 第 1 頁 / 共 5 頁
字號:
/* * loader.c * * This is the installer loader.  Its job is to somehow load the rest * of the installer into memory and run it.  This may require setting * up some devices and networking, etc. The main point of this code is * to stay SMALL! Remember that, live by that, and learn to like it. * * Erik Troan <ewt@redhat.com> * Matt Wilson <msw@redhat.com> * Michael Fulbright <msf@redhat.com> * Jeremy Katz <katzj@redhat.com> * * Copyright 1997 - 2006 Red Hat, Inc. * * This software may be freely redistributed under the terms of the GNU * General Public License. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */#include <ctype.h>#include <errno.h>#include <execinfo.h>#include <fcntl.h>#include <newt.h>#include <popt.h>#include <signal.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <strings.h>#include <syslog.h>#include <unistd.h>#ifdef NASH_FIRMWARE_LOADER#include <nash.h>#endif#include <sys/ioctl.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/wait.h>#include <linux/fb.h>#include <linux/serial.h>#include <linux/vt.h>#ifdef USE_MTRACE#include <mcheck.h>#endif#include "loader.h"#include "loadermisc.h" /* JKFIXME: functions here should be split out */#include "log.h"#include "lang.h"#include "kbd.h"#include "kickstart.h"#include "windows.h"/* module stuff */#include "modules.h"#include "moduleinfo.h"#include "moduledeps.h"#include "modstubs.h"#include "driverdisk.h"/* hardware stuff */#include "hardware.h"#include "firewire.h"#include "pcmcia.h"#include "usb.h"/* install method stuff */#include "method.h"#include "cdinstall.h"#include "nfsinstall.h"#include "hdinstall.h"#include "urlinstall.h"#include "net.h"#include "telnetd.h"#include <selinux/selinux.h>#include "selinux.h"#include "../isys/imount.h"#include "../isys/isys.h"#include "../isys/stubs.h"#include "../isys/lang.h"#include "../isys/eddsupport.h"#include "../isys/str.h"/* maximum number of extra arguments that can be passed to the second stage */#define MAX_EXTRA_ARGS 128static char * extraArgs[MAX_EXTRA_ARGS];static int hasGraphicalOverride();static int newtRunning = 0;/* boot flags -- we need these in a lot of places */int flags = LOADER_FLAGS_SELINUX | LOADER_FLAGS_NOFB;#ifdef INCLUDE_LOCAL#include "cdinstall.h"#include "hdinstall.h"#endif#ifdef INCLUDE_NETWORK#include "nfsinstall.h"#include "urlinstall.h"#endifint num_link_checks = 5;static struct installMethod installMethods[] = {#if !defined(__s390__) && !defined(__s390x__)    { N_("Local CDROM"), "cdrom", 0, CLASS_CDROM, mountCdromImage },#endif    { N_("Hard drive"), "hd", 0, CLASS_HD, mountHardDrive },    { N_("NFS directory"), "nfs", 1, CLASS_NETWORK, mountNfsImage },    { "FTP", "ftp", 1, CLASS_NETWORK, mountUrlImage },    { "HTTP", "http", 1, CLASS_NETWORK, mountUrlImage },};static int numMethods = sizeof(installMethods) / sizeof(struct installMethod);void setupRamfs(void) {    mkdirChain("/tmp/ramfs");    doPwMount("none", "/tmp/ramfs", "ramfs", 0, NULL);}void doSuspend(void) {    newtFinished();    exit(1);}void doShell(void) {    /* this lets us debug the loader just by having a second initramfs     * containing /sbin/busybox */    int child, status;    newtSuspend();    if (!(child = fork())) {	    execl("/sbin/busybox", "msh", NULL);	    _exit(1);    }    waitpid(child, &status, 0);    newtResume();}void startNewt(void) {    if (!newtRunning) {        char *buf = sdupprintf(_("Welcome to %s"), getProductName());        newtInit();        newtCls();        newtDrawRootText(0, 0, buf);        free(buf);                newtPushHelpLine(_("  <Tab>/<Alt-Tab> between elements  | <Space> selects | <F12> next screen "));                newtRunning = 1;        if (FL_TESTING(flags))             newtSetSuspendCallback((void *) doSuspend, NULL);        else if (!access("/sbin/busybox",  X_OK))             newtSetSuspendCallback((void *) doShell, NULL);    }}void stopNewt(void) {    if (newtRunning) newtFinished();    newtRunning = 0;}static char * productName = NULL;static char * productPath = NULL;static void initProductInfo(void) {    FILE *f;    int i;    f = fopen("/.buildstamp", "r");    if (!f) {        productName = strdup("anaconda");        productPath = strdup("anaconda");    } else {        productName = malloc(256);        productPath = malloc(256);        productName = fgets(productName, 256, f); /* stamp time */        productName = fgets(productName, 256, f); /* product name */        productPath = fgets(productPath, 256, f); /* product version */        productPath = fgets(productPath, 256, f); /* product path */        i = strlen(productName) - 1;        while (isspace(*(productName + i))) {            *(productName + i) = '\0';            i--;        }        i = strlen(productPath) - 1;        while (isspace(*(productPath + i))) {            *(productPath + i) = '\0';            i--;        }    }}char * getProductName(void) {    if (!productName) {       initProductInfo();    }    return productName;}char * getProductPath(void) {    if (!productPath) {       initProductInfo();    }    return productPath;}void initializeConsole(moduleList modLoaded, moduleDeps modDeps,                       moduleInfoSet modInfo) {    if (!FL_NOFB(flags))        mlLoadModuleSet("vgastate:vga16fb", modLoaded, modDeps, modInfo);    /* enable UTF-8 console */    printf("\033%%G");    fflush(stdout);    isysLoadFont();    if (!FL_TESTING(flags))        isysSetUnicodeKeymap();}/* fbcon is buggy and resets our color palette if we allocate a terminal * after initializing it, so we initialize 9 of them before we need them. * If it doesn't work, the user gets to suffer through having an ugly palette, * but things are still usable. */static void initializeTtys(void) {    int fd, n;    char dev[] = "/dev/ttyX";    for (n = 9; n > 0; n--) {	sprintf(dev, "/dev/tty%d", n);	mknod(dev, 0600, S_IFCHR | makedev(4, n));	fd = open(dev, O_RDWR|O_NOCTTY);	if (fd >= 0) {	    ioctl(fd, VT_ACTIVATE, n);	    if (n == 1)		ioctl(fd, VT_WAITACTIVE, n);	    close(fd);	} else	    logMessage(ERROR, "failed to initialize %s", dev);    }}static void spawnShell(void) {    pid_t pid;    if (FL_SERIAL(flags) || FL_NOSHELL(flags)) {        logMessage(INFO, "not spawning a shell");        return;    } else if (access("/bin/sh",  X_OK))  {        logMessage(ERROR, "cannot open shell - /bin/sh doesn't exist");        return;    }    if (!(pid = fork())) {	int fd;    	fd = open("/dev/tty2", O_RDWR|O_NOCTTY);    	if (fd < 0) {            logMessage(ERROR, "cannot open /dev/tty2 -- no shell will be provided");	    return;	}        dup2(fd, 0);        dup2(fd, 1);        dup2(fd, 2);                close(fd);        setsid();	/* enable UTF-8 console */	printf("\033%%G");	fflush(stdout);	isysLoadFont();	        if (ioctl(0, TIOCSCTTY, NULL)) {            logMessage(ERROR, "could not set new controlling tty");        }                signal(SIGINT, SIG_DFL);        signal(SIGTSTP, SIG_DFL);        if (!access("/mnt/source/RHupdates/pyrc.py", R_OK|X_OK))            setenv("PYTHONSTARTUP", "/mnt/source/RHupdates/pyrc.py", 1);        else if (!access("/tmp/updates/pyrc.py", R_OK|X_OK))            setenv("PYTHONSTARTUP", "/tmp/updates/pyrc.py", 1);        else if (!access("/usr/lib/anaconda-runtime/pyrc.py", R_OK|X_OK))            setenv("PYTHONSTARTUP", "/usr/lib/anaconda-runtime/pyrc.py", 1);        setenv("LD_LIBRARY_PATH", LIBPATH, 1);        setenv("LANG", "C", 1);                if (execl("/bin/sh", "-/bin/sh", NULL) == -1) {            logMessage(CRITICAL, "exec of /bin/sh failed: %s", strerror(errno));            exit(1);        }    }    return;}void loadUpdates(struct loaderData_s *loaderData) {    int done = 0;    int rc;    char * device = NULL, ** devNames = NULL;    char * buf;    int num = 0;    do {         rc = getRemovableDevices(&devNames);        if (rc == 0)             return;        /* we don't need to ask which to use if they only have one */        if (rc == 1) {            device = strdup(devNames[0]);            free(devNames);        } else {            startNewt();            rc = newtWinMenu(_("Update Disk Source"),                             _("You have multiple devices which could serve "                               "as sources for an update disk.  Which would "                               "you like to use?"), 40, 10, 10,                             rc < 6 ? rc : 6, devNames,                             &num, _("OK"), _("Back"), NULL);                        if (rc == 2) {                free(devNames);                return;            }            loaderData->updatessrc = strdup(devNames[num]);            free(devNames);        }        buf = sdupprintf(_("Insert your updates disk into /dev/%s and press "                           "\"OK\" to continue."), loaderData->updatessrc);        rc = newtWinChoice(_("Updates Disk"), _("OK"), _("Cancel"), buf);        if (rc == 2)            return;        logMessage(INFO, "UPDATES device is %s", loaderData->updatessrc);        devMakeInode(loaderData->updatessrc, "/tmp/upd.disk");        if (doPwMount("/tmp/upd.disk", "/tmp/update-disk", "ext2",                       IMOUNT_RDONLY, NULL) &&            doPwMount("/tmp/upd.disk", "/tmp/update-disk", "iso9660",                       IMOUNT_RDONLY, NULL)) {            newtWinMessage(_("Error"), _("OK"),                            _("Failed to mount updates disk"));        } else {            /* Copy everything to /tmp/updates so we can unmount the disk  */            winStatus(40, 3, _("Updates"), _("Reading anaconda updates..."));            if (!copyDirectory("/tmp/update-disk", "/tmp/updates")) done = 1;            newtPopWindow();            umount("/tmp/update-disk");        }    } while (!done);        return;}static int loadUpdatesFromRemote(char * url, struct loaderData_s * loaderData) {    int rc = getFileFromUrl(url, "/tmp/updates.img", loaderData);    if (rc != 0)        return rc;    copyUpdatesImg("/tmp/updates.img");    unlink("/tmp/updates.img");    return 0;}static void checkForHardDrives(void) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人免费网站| 国产精品污网站| 精品女同一区二区| 国产午夜亚洲精品午夜鲁丝片| 欧美极品美女视频| 夜夜爽夜夜爽精品视频| 免费在线观看一区| 成人综合在线观看| 欧美亚洲国产bt| 精品国产一区二区三区av性色| 国产精品免费久久久久| 亚洲午夜日本在线观看| 久久99精品一区二区三区 | 中文字幕制服丝袜成人av| 精品国产成人在线影院 | 久久一夜天堂av一区二区三区| 欧美一级国产精品| 久久久久久久综合狠狠综合| 亚洲精品免费播放| 国产精一区二区三区| 久久久久久夜精品精品免费| 国产日韩影视精品| 亚洲一区二区三区激情| 人人精品人人爱| eeuss鲁片一区二区三区| 欧美电影在哪看比较好| 国产精品高清亚洲| 麻豆精品蜜桃视频网站| 99国产欧美另类久久久精品 | 一区二区三区在线视频播放| 狠狠久久亚洲欧美| 91国在线观看| 亚洲欧美日韩综合aⅴ视频| 亚洲成av人片在线| 精品一区二区三区免费毛片爱 | 欧美日本一区二区三区四区 | 国产精品小仙女| 日本高清不卡在线观看| 日韩免费观看2025年上映的电影| 中文乱码免费一区二区| 青青青伊人色综合久久| 丝袜脚交一区二区| 一本到三区不卡视频| 欧美成人精品3d动漫h| 亚洲欧洲综合另类| 九色综合狠狠综合久久| 91偷拍与自偷拍精品| 精品免费一区二区三区| 亚洲一区二区四区蜜桃| 国产成人精品一区二区三区四区 | 欧美三级韩国三级日本三斤| 国产欧美日韩精品在线| 国产永久精品大片wwwapp| 欧美精品在线观看播放| 1024亚洲合集| 国产激情一区二区三区四区| 欧美大片在线观看一区二区| 亚洲一区二区三区不卡国产欧美| 国产福利一区二区三区视频| 欧美激情一区不卡| 欧美zozo另类异族| 日韩你懂的电影在线观看| 国产视频一区在线播放| 亚洲成人tv网| 91一区二区在线观看| 久久新电视剧免费观看| 天堂va蜜桃一区二区三区| 91美女在线视频| 欧美韩国一区二区| 国产一区二区三区四| 欧美日韩一卡二卡三卡| 一区二区三区加勒比av| 成人一区在线观看| 久久亚洲精品小早川怜子| 日本欧美一区二区三区| 久久久三级国产网站| 青青草精品视频| 色婷婷国产精品| 亚洲精品高清在线| 色婷婷亚洲一区二区三区| 国产精品视频在线看| 国产又黄又大久久| 亚洲精品在线观看网站| 免费在线成人网| 欧美久久久影院| 午夜精品久久久久久久久久| 欧美性xxxxx极品少妇| 亚洲日本在线看| 一本久久a久久精品亚洲| 国产精品女同一区二区三区| 国产激情一区二区三区四区| 国产丝袜在线精品| 国产成人免费视频网站高清观看视频| 久久美女高清视频| 国产伦精一区二区三区| 欧美精品一区二区三区高清aⅴ| 免费观看日韩av| 亚洲精品在线一区二区| 狠狠色丁香久久婷婷综合_中| 制服丝袜成人动漫| 日韩激情视频网站| 欧美日韩1区2区| 麻豆成人综合网| 精品裸体舞一区二区三区| 亚洲视频在线一区观看| 国产亚洲欧美激情| 26uuuu精品一区二区| 欧美色视频一区| 99久久777色| 国产一区91精品张津瑜| 午夜精品久久久久久久99樱桃| 欧美韩国日本不卡| 欧美影片第一页| 成人午夜电影久久影院| 一区二区三区.www| 亚洲免费在线视频| 一区二区国产视频| 欧美日韩精品二区第二页| 婷婷开心激情综合| 日韩女优视频免费观看| 国产中文字幕一区| 久久精品人人做人人爽97| 972aa.com艺术欧美| 午夜婷婷国产麻豆精品| 精品福利在线导航| 99视频国产精品| 亚洲成va人在线观看| 精品成人一区二区| 成人毛片在线观看| 亚洲精品美腿丝袜| 国产亚洲1区2区3区| 欧美怡红院视频| 99精品久久99久久久久| 亚洲欧美日韩系列| 日韩精品一区二区在线观看| 国产v综合v亚洲欧| 日本一区二区不卡视频| 91美女福利视频| 精品中文av资源站在线观看| 中文字幕精品一区二区三区精品| 91免费国产在线观看| 免费观看91视频大全| 亚洲视频中文字幕| 欧美一级xxx| 99r精品视频| 另类小说视频一区二区| 国产欧美一区二区精品性色 | 欧洲国内综合视频| 国内精品久久久久影院色| 中文字幕av资源一区| 99精品国产视频| 久久精品国产第一区二区三区| 亚洲欧美综合另类在线卡通| 欧美变态口味重另类| 一本在线高清不卡dvd| 久久69国产一区二区蜜臀| 一区二区三区产品免费精品久久75| 日本亚洲一区二区| 亚洲男人的天堂av| 在线观看免费视频综合| 国产欧美综合在线观看第十页| 亚洲高清免费视频| 久草在线在线精品观看| 亚洲一区二三区| 国产精品热久久久久夜色精品三区| 91精品国产欧美日韩| 91亚洲国产成人精品一区二区三| 色婷婷av一区二区三区之一色屋| 亚洲乱码中文字幕| 日韩视频一区在线观看| 亚洲欧洲综合另类| 国产剧情一区在线| 欧美一区二区三区免费大片| 国产精品久久久久桃色tv| 蜜桃视频在线一区| 欧美偷拍一区二区| 国产精品久久久久久亚洲毛片 | 久久精品免视看| 欧美日韩另类国产亚洲欧美一级| 成人免费av在线| 国产成人亚洲综合a∨婷婷| 日产国产欧美视频一区精品| 亚洲最大成人网4388xx| 国产精品久久久久久久久搜平片 | 国产亚洲综合在线| 日韩免费福利电影在线观看| 欧美日韩国产首页| 欧美综合欧美视频| 色老综合老女人久久久| 99久久精品免费看| 国产91精品一区二区| 国产精品99久久不卡二区| 韩国av一区二区| 久久超碰97人人做人人爱| 免费精品99久久国产综合精品| 五月综合激情婷婷六月色窝| 亚洲午夜精品在线| 亚欧色一区w666天堂| 一区二区久久久久久| 亚洲一区二区三区三|