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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? loader.c~

?? linux 安裝程序
?? C~
?? 第 1 頁 / 共 5 頁
字號(hào):
/* * 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) {

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
高清视频一区二区| 麻豆精品国产91久久久久久| 成人激情开心网| 国产欧美va欧美不卡在线| 国产suv精品一区二区三区| 国产精品久线观看视频| 在线亚洲一区二区| 日韩主播视频在线| 精品久久久久久最新网址| 国产精品自拍网站| 中文字幕亚洲欧美在线不卡| 91国内精品野花午夜精品| 日韩av中文字幕一区二区三区| 久久久无码精品亚洲日韩按摩| www.综合网.com| 亚洲大型综合色站| 久久一日本道色综合| jizzjizzjizz欧美| 丝袜国产日韩另类美女| www激情久久| 日本电影亚洲天堂一区| 麻豆中文一区二区| 国产精品嫩草99a| 91麻豆精品91久久久久同性| 国产河南妇女毛片精品久久久| 亚洲日本免费电影| 日韩欧美色综合网站| 91美女蜜桃在线| 久久精品噜噜噜成人av农村| 国产精品乱码一区二区三区软件 | 水蜜桃久久夜色精品一区的特点 | 欧美成人a在线| 不卡的av网站| 韩日av一区二区| 亚洲高清视频中文字幕| 精品91自产拍在线观看一区| 色88888久久久久久影院按摩| 日本成人在线电影网| 国产精品女人毛片| 欧美成人免费网站| 欧洲生活片亚洲生活在线观看| 国产精品影视在线观看| 丝袜美腿亚洲色图| 夜夜嗨av一区二区三区网页 | 欧美日韩精品欧美日韩精品一综合| 激情综合色综合久久| 亚洲国产精品一区二区www在线| 久久久久久亚洲综合影院红桃| 欧美亚洲高清一区| 成人av高清在线| 国产精品12区| 精品一区二区三区免费观看| 性做久久久久久免费观看欧美| 国产精品伦一区二区三级视频| 26uuu久久综合| 欧美精品vⅰdeose4hd| 91麻豆精品秘密| 成人18视频在线播放| 九九国产精品视频| 免费的国产精品| 亚洲午夜久久久久久久久久久| 亚洲品质自拍视频| 中文字幕在线观看不卡视频| 久久九九久久九九| 久久久99久久| 久久新电视剧免费观看| 日韩一卡二卡三卡四卡| 69堂国产成人免费视频| 欧美日韩一级二级| 欧美日韩国产首页| 在线观看亚洲专区| 91九色02白丝porn| 91国产视频在线观看| 在线中文字幕一区二区| 欧美性猛交xxxx乱大交退制版| 91激情在线视频| 欧美日韩一级大片网址| 欧美精品一二三四| 欧美一区二区视频在线观看2020| 欧美高清精品3d| 91精品国产欧美一区二区成人| 777xxx欧美| 日韩美女天天操| 久久亚洲综合色| 国产精品国产三级国产aⅴ无密码| 国产精品美女久久久久aⅴ国产馆| 国产欧美日韩久久| 亚洲欧美欧美一区二区三区| 一级中文字幕一区二区| 午夜av一区二区| 久久99久久精品欧美| 国产一区二区三区在线观看精品 | 亚洲欧美电影一区二区| 亚洲一区二区视频在线| 日本在线播放一区二区三区| 激情综合色综合久久| 成人精品鲁一区一区二区| 99久久精品一区| 欧美日韩一区二区在线视频| 精品人在线二区三区| 国产亚洲va综合人人澡精品| 亚洲久草在线视频| 日本色综合中文字幕| 国产成人av电影免费在线观看| 91蜜桃婷婷狠狠久久综合9色| 欧美天天综合网| 久久久一区二区| 亚洲精品中文在线影院| 久久er99热精品一区二区| 成人av资源网站| 3d动漫精品啪啪一区二区竹菊| 久久夜色精品一区| 亚洲精品视频观看| 蜜臀久久99精品久久久画质超高清| 粉嫩一区二区三区性色av| 欧美羞羞免费网站| 久久综合色播五月| 亚洲精品日韩一| 国产主播一区二区三区| 在线观看日韩国产| 国产欧美一区二区在线| 五月激情综合色| av在线播放成人| 精品精品国产高清a毛片牛牛| 亚洲欧美另类在线| 国产精品一区二区三区四区| 欧美性色aⅴ视频一区日韩精品| 久久亚洲一区二区三区明星换脸 | 麻豆精品一区二区三区| 91亚洲大成网污www| 精品粉嫩超白一线天av| 亚洲高清免费一级二级三级| 国产.欧美.日韩| 日韩三级视频在线观看| 亚洲一区二区三区四区五区黄| 国产成人亚洲综合a∨婷婷| 91精品国产综合久久精品| 亚洲欧美成人一区二区三区| 国产成人综合亚洲网站| 日韩欧美高清一区| 亚洲第一福利视频在线| 一本色道久久综合精品竹菊| 国产视频一区二区在线| 六月丁香婷婷色狠狠久久| 欧美日韩一区三区四区| 一区二区三区四区国产精品| 成人永久aaa| 久久久久九九视频| 精品在线观看免费| 日韩一级黄色大片| 日精品一区二区| 欧美日韩国产片| 亚洲一区二区影院| 91福利在线免费观看| 亚洲精品五月天| 91在线丨porny丨国产| 国产精品三级av在线播放| 国产一区二区在线看| 欧美电影免费观看高清完整版在线 | 国产伦精品一区二区三区免费迷| 制服.丝袜.亚洲.中文.综合| 亚洲高清免费一级二级三级| 欧美在线免费播放| 亚洲一区二区三区在线播放| 91国偷自产一区二区开放时间| 日韩伦理av电影| 91丝袜美腿高跟国产极品老师| 亚洲欧洲精品一区二区三区不卡| 成人免费高清视频在线观看| 亚洲国产岛国毛片在线| 成人福利视频在线| 中文字幕日本乱码精品影院| 色综合欧美在线| 亚洲一区二区不卡免费| 制服丝袜日韩国产| 极品美女销魂一区二区三区| 久久精品欧美日韩精品| av一区二区三区黑人| 亚洲美女在线一区| 精品视频在线视频| 麻豆精品一区二区av白丝在线| 久久亚洲一区二区三区明星换脸 | 天堂资源在线中文精品| 欧美一区二区三区小说| 蜜臀av国产精品久久久久| 精品国产sm最大网站免费看| 成人毛片在线观看| 亚洲国产日韩综合久久精品| 欧美蜜桃一区二区三区| 国内一区二区视频| 中文字幕在线免费不卡| 欧美美女激情18p| 韩国三级中文字幕hd久久精品| 国产精品久久久一区麻豆最新章节| 91网页版在线| 五月激情综合网| 久久新电视剧免费观看| 91免费视频观看| 秋霞成人午夜伦在线观看| 欧美国产成人精品|