ubuntu-18.04.1-desktop-amd64.iso initrd 基本文件系统中启动脚本分析 (1)

2023-05-16

1.  解压 ubuntu-18.04.1-desktop-amd64.iso

2. 查看 boot/grub/grub.cfg,知道引导文件系统是 /casper/initrd.lz

menuentry "Try Ubuntu without installing" {
    set gfxpayload=keep
    linux    /casper/vmlinuz  file=/cdrom/preseed/ubuntu.seed boot=casper quiet splash ---
    initrd    /casper/initrd.lz
}

3. 解压 /casper/initrd.lz 到initrd目录,结构如下

4. 首先查看 init脚本文件,kernel将在启动后首先默认执行它,除非启动参数另外指定。

4.1 建立基本系统设备目录以支持应用程序运行,其中提前从启动参数提取quiet全局变量是因为它可能会被udev脚本引用。

export PATH=/sbin:/usr/sbin:/bin:/usr/bin

[ -d /dev ] || mkdir -m 0755 /dev
[ -d /root ] || mkdir -m 0700 /root
[ -d /sys ] || mkdir /sys
[ -d /proc ] || mkdir /proc
[ -d /tmp ] || mkdir /tmp
mkdir -p /var/lock
mount -t sysfs -o nodev,noexec,nosuid sysfs /sys
mount -t proc -o nodev,noexec,nosuid proc /proc

case " $(cat /proc/cmdline) " in
*\ quiet\ *)
    quiet=y
    ;;
*)
    quiet=n
    echo "Loading, please wait..."
    ;;
esac
export quiet

# Note that this only becomes /dev on the real filesystem if udev's scripts
# are used; which they will be, but it's worth pointing out
mount -t devtmpfs -o nosuid,mode=0755 udev /dev
mkdir /dev/pts
mount -t devpts -o noexec,nosuid,gid=5,mode=0620 devpts /dev/pts || true
mount -t tmpfs -o "noexec,nosuid,size=10%,mode=0755" tmpfs /run
mkdir -m 0755 /run/initramfs

导出全局变量 DPKG_ARCH

# Export the dpkg architecture
export DPKG_ARCH=
. /conf/arch.conf

/conf/arch.conf内容很简单

DPKG_ARCH=amd64

 导出有关变量,之后会在解析启动参数时对设定项进行赋值,init脚本运行结束时,这些变量大都会被用unset命令释放掉,避免增加无谓的系统负担,这一点值得学习。

# Export relevant variables
export ROOT=
export ROOTDELAY=
export ROOTFLAGS=
export ROOTFSTYPE=
export IP=
export IP6=
export BOOT=
export BOOTIF=
export UBIMTD=
export break=
export init=/sbin/init
export readonly=y
export rootmnt=/root
export debug=
export panic=
export blacklist=
export resume=
export resume_offset=
export drop_caps=
export fastboot=n
export forcefsck=n
export fsckfix=
export recovery=

设置hostname,要定制的话修改 etc/hostname的值,默认似乎没有这个文件。

# mdadm needs hostname to be set. This has to be done before the udev rules are called!
if [ -f "/etc/hostname" ]; then
        /bin/hostname -F /etc/hostname >/dev/null 2>&1
fi

导出各种需要的外部变量(*.conf)和函数定义(/scripts/functions)。后面用的比较多的是maybe_break() 和run_scripts()

# Bring in the main config
. /conf/initramfs.conf
for conf in conf/conf.d/*; do
    [ -f ${conf} ] && . ${conf}
done
. /scripts/functions

之后是解析启动参数 /proc/cmdline,比较常用的有init=,root=,boot=

    init=*)
        init=${x#init=}
        ;;
    root=*)
        ROOT=${x#root=}
        if [ -z "${BOOT}" ] && [ "$ROOT" = "/dev/nfs" ]; then
            BOOT=nfs
        fi
        ;;

    boot=*)
        BOOT=${x#boot=}
        ;;

如果没有指定boot,将会设置默认值local,为什么不在之前定义时直接设置呢?恐怕是担心送的参数就是空的情况(boot= )

# Default to BOOT=local if no boot script defined.
if [ -z "${BOOT}" ]; then
    BOOT=local
fi

之后是系统恢复变量的设置,暂时没有关注,童鞋自己分析吧。

if [ -n "${noresume}" ] || [ "$RESUME" = none ]; then
    export noresume=y
    unset resume
else
    resume=${RESUME:-}
fi

 之后是很重要的初始化脚本调用过程,将在“ubuntu-18.04.1-desktop-amd64.iso initrd 基本文件系统中启动脚本分析 (2)”中详述。以下是简略的初始化脚本或函数调用过程

/scripts/init-top
load_modules
/scripts/init-premount
. /scripts/local
. /scripts/nfs
. /scripts/${BOOT}
parse_numeric ${ROOT}
mount_top
mount_premount
mountroot
mount_bottom
nfs_bottom
local_bottom
/scripts/init-bottom

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ubuntu-18.04.1-desktop-amd64.iso initrd 基本文件系统中启动脚本分析 (1) 的相关文章

  • Wifiphisher —— 非常非常非常流氓的 WIFI 网络钓鱼框架

    编者注 xff1a 这是一个非常流氓的 WIFI 网络钓鱼工具 xff0c 甚至可能是非法的工具 xff08 取决于你的使用场景 xff09 在没有事先获得许可的情况下使用 Wifiphisher 攻击基础网络设施将被视为非法活动 使用时请
  • BlockCode 少儿编程 2 《做早操》

    1 题目 34 做早操 34 34 小朋友们排成一队做早操 xff0c 小明前面有4个小朋友 xff0c 后面有3个小朋友 34 34 4个同学 xff0c 3个同学 34 34 这队一共多少个小朋友 xff1f 34 2 编程知识 CPU
  • BlockCode 少儿编程 10 《分铅笔》

    1 题目 34 分铅笔 34 34 妈妈给姐姐买了8支铅笔 xff0c 给弟弟买了4支铅笔 xff0c 姐姐分给弟弟 xff0c 使得姐弟俩两人的铅笔一样多 34 34 8支 xff0c 4支 34 34 姐姐最后有几只铅笔 xff1f 3
  • USB3.0扩展坞集线器Hub引起鼠标卡顿飘解决方法

    大部分USB3 0扩展坞集线器Hub会引起鼠标卡顿飘 xff0c 尤其是无线鼠标 蓝牙鼠标 xff0c 无线键盘也会出现输入迟缓的问题 mac 和 Windows都是这样 解决方法 xff1a 1 xff09 usb3 0集线器插入2 0接
  • 禁止鼠标唤醒睡眠的电脑,无线鼠标、蓝牙鼠标

    经常一不小心碰到鼠标就会唤醒睡眠的电脑 xff0c 有时咳嗽声大一点也能唤醒 解决方法 xff1a xff08 1 xff09 打开 设备管理器 在 此电脑 上右键 xff0c 属性 左侧找到设备管理器 或者 xff0c 在开始按钮上右键
  • C#与C++ dll 之间传递字符串string wchar_t* char* IntPtr

    1 由C 向C 43 43 dll 传入字符串时 xff0c 参数直接用string xff0c 设置编码格式 CharSet Unicode CharSet Ansi C 43 43 dll接收使用wchar t 或 char 2 由C
  • SwiftUI 导航 NavigationStack NavigationLink navigationDestination

    导航的显示区域使用NavigationStack 导航的新视图会显示在NavagationStack中 左右分栏导航使用NavigationSplitView 触发导航的按钮使用NavigationLink 示例1 显示颜色视图 struc
  • SwiftUI 数组初始化 append 不工作 无效 init中 State Array

    State的数组在初始化函数init是不能添加数据的 xff0c append在init中无效 xff0c 不能添加数据 实现方法如下 xff1a 采用视图控件的回调函数 appear if myArray count 61 61 0 my
  • SwiftUI List 中 多个 按钮 button 同时触发 buttonStyle

    在list中的一个单元格中设置多个按钮会出现同时触发的问题 xff0c 解决方法是增设按钮的类型属性 buttonStyle borderless 在List的单元格中 xff0c 按钮的下面 buttonStyle borderless
  • 隐私策略

    隐私权声明 软件注重对您的个人隐私的保护 我们不会在任何情况下收集您的信息 本隐私权声明适用于本软件的所有相关服务 您个人信息的搜集 本软件不收集任何您的个人信息 控制您的个人信息 本软件不控制您的任何个人信息 您个人信息的安全 严格保护您
  • MMPlayer同步文件到手机应用中的方法

    自己准备好要同步的文件 xff0c 如mp3 mp4 xff0c 然后按照如下操作 xff1a xff08 1 xff09 mac电脑插上iPhone xff08 2 xff09 打开访达Finder xff08 3 xff09 在左上列表
  • 全世界到底有多少软件开发人员?

    埃文斯数据公司 Evans Data Corporation 2019 最新的统计数据 xff08 原文 xff09 显示 xff0c 2018 年全球共有 2300 万软件开发人员 xff0c 预计到 2019 年底这个数字将达到 264
  • 并查集【通俗易懂】【知识点】

    为了解释并查集的原理 xff0c 我将举一个有爱的例子 话说江湖上散落着各式各样的大侠 xff0c 有上千个之多 他们没有什么正当职业 xff0c 整天背着剑在外面走来走去 xff0c 碰到和自己不是一路人的 xff0c 就免不了要打一架
  • QtreeWiget各节点之间连线样式设置

    QTreeWidget树状图默认各节点直接是没有线连接的 xff0c 看着层次感不强 xff0c 用户体验不太好 xff0c 所以需要设置一下样式 方法一 xff1a 通过对qtreewidget进行qss样式设置 效果图如下 xff1a
  • gitlab安装部署及问题解决(实践篇)

    系统环境 xff1a centos7 9 gitlab版本 xff1a 11 1 4 一 GitLab简介 GitLab 是一个用于仓库管理系统的开源项目 xff0c 使用Git作为代码管理工具 xff0c 并在此基础上搭建起来的web服务
  • 详解利用nodejs对json文件进行新增数据及删除指定的数据

    细节链接 详解利用nodejs对本地json文件进行增删改查 文件 1 首先存在packagename json文件 xff0c 具体内容如下 34 label 34 34 星享优惠 34 34 value 34 34 com kyy xx
  • VS.NET中Web Services入门

    Visual Studio NET 中的 XML Web services 入门 摘要 xff1a Microsoft Visual Studio NET 和 XML Web services 提供了一个简单 灵活且基于标准的模型 xff0
  • Openstack Manila使用初探 (Packstack)

    使用Packstack All in one 安装好Openstack之后 研究一下Manila组件的使用 主机名 cloud 192 168 31 233 1 manila conf 1 1 配置文件分析 Packstack的配置文件pa
  • Centos7+Packstack安装部署Openstack Mitaka之(一) 安装Packstack

    学习Openstack的前两个月 时间都花在环境部署上了 主要是版本的问题 导致了一系列的麻烦 之前使用devstack已经部署成功了 但是manila不能用 残念 问题主要出在网络上 研究完manila的网络模块之后再回头找原因吧 不打算
  • Tomcat的四种web应用部署方式详解

    在Tomcat中有四种部署Web应用的方式 xff0c 简要的概括分别是 xff1a xff08 1 xff09 利用Tomcat自动部署 xff08 2 xff09 利用控制台进行部署 xff08 3 xff09 增加自定义的Web部署文

随机推荐

  • 虚拟机linux插入U盘搜索不到怎么整

    我在 dev下找 xff0c 使用fdisk xff0c 都没有找到插入的u盘 看了下服务 vmware的USB也是开启的 最后发现vmware的USB是2 0 xff0c 改成3 0就好了 又白白浪费了半天时间
  • 使用adb查看Settings Provider的值

    使用adb查看Settings Provider的值 前言 在Android的ROM开发中 xff0c 经常会遇到一些修改系统默认的Settings Provider的值要求 xff0c 那么修改以后 xff0c 怎么验证呢 本篇文章介绍一
  • DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

    本文作者 xff1a PETER LAI xff0c 是 Diode 的区块链工程师 在进入软件开发领域之前 xff0c 他主要是在做工商管理相关工作 Peter Lai 也是一位活跃的开源贡献者 目前 xff0c 他正在与 Diode 团
  • 【EasyExcel】EasyExcel导入合并单元格的数据

    以下代码可以用来处理带有合并单元格的数据导入 span class token keyword import span span class token namespace cn span class token punctuation s
  • 华为防火墙USG2220 DDNS动态域名配置

    关于DDNS DDNS xff08 DynamicDomain Name Server xff09 是动态域名服务的缩写 DDNS是将用户的动态IP地址映射到一个固定的域名解析服务上 xff0c 用户每次连接网络的时候客户端程序就会通过信息
  • ubuntu下安装ffmpeg出现的问题解决方法

    error while loading shared libraries libavdevice so 52 xff1a cannot open shared object file No such file or directory 红色
  • 【穿山甲系列】找出后台偷偷耗电的元凶

    作者 xff1a 万宇 团队 xff1a 腾讯移动品质中心TMQ 背景故事 先来看一个浏览器用户反馈 如图所示 xff0c 在浏览器用户反馈中 xff0c 耗电一直是头部问题之一 xff0c 用户对于电量是非常敏感的 xff0c 特别是那种
  • WSL2 安装桌面

    WSL2 安装桌面 如果已经安装了xfce 或者xubuntu desktop xff0c 可以选择性卸载 xff0c 参考 如何卸载xfce桌面或者xubuntu desktop 如何卸载xfce桌面或者xubuntu desktop 简
  • [Learn Android Studio 汉化教程]第一章 : Android Studio 介绍

    转载自 xff1a http ask android studio org question 789 This chapter walks you through installing and setting up your develop
  • Ubuntu禁用鼠标加速、禁用“提高鼠标精准度”、线性化鼠标移动

    Ubuntu18以下的版本默认是开启鼠标加速的 xff0c 这对FPS玩家来说很不友好 不过要改也很简单 xff0c 输入以下命令即可 xset m 00 为了每次开机都进行此操作 xff0c 可以把以下命令写成 sh脚本 xff0c 赋予
  • MFC下的TRACE

    define TRACE AfxTrace define TRACE0 sz AfxTrace T 34 s 34 T sz define TRACE1 sz p1 AfxTrace T sz p1 define TRACE2 sz p1
  • 机器人工程师应该具备哪些技能?

    1 需要掌握PLC机器人的工业控制基础 在工业机器人行业中 xff0c PLC编程是必不可少的 PLC被称为工业自动化的灵魂 xff0c 相当于人脑 xff0c 以不同的方式控制整个机器人 为了使机器人灵活移动 xff0c 除了机器人本身之
  • CUDA 安装教程

    安装教程主要针对 Linux Ubuntu 20 04 一 使用 Docker 镜像 xff08 推荐 xff09 打包好的 cuda 镜像 https hub docker com r nvidia cuda https catalog
  • React vs Angular vs vue 的就业机会对比

    本文来自于 skilldime 网站的报告 xff0c 其实根据 StackOverFlow 网站所发布的职位进行统计的结果 Angular 框架是 2010 年推出的 xff0c 存在时间最长 但 React 在过去几年中实现了真正的爆炸
  • 开关灯——计蒜客T1079

    假设有 N 盏灯 xff08 N 为不大于 5000 的正整数 xff09 xff0c 从 1 到 N 按顺序依次编号 xff0c 初始时全部处于开启状态 xff1b 有 M 个人 xff08 M 为不大于 N 的正整数 xff09 也从
  • [PTA]输入一组数(少于50个元素),要求对该数组元素进行倒序输出。

    7 2 翻转数组 10 分 输入一组数 xff08 少于50个元素 xff09 xff0c 要求对该数组元素进行倒序输出 输入格式 第一行输入一个数n表示数组中元素个数 xff0c 然后一行输入n个整数 xff0c 数与数间用空格隔开 输出
  • pypi私有仓库搭建

    1 创建目录 mkdir var docker pypi cd var docker pypi mkdir p auth 认证文件存放目录 mkdir p packages pypi安装包存放目录 2 创建认证文件 安装htpasswd a
  • 阿里云ESC开启安全组

    1 所有文章优先发表在个人博客 xff0c 后续如果有修改的话 xff0c 可能忘记更新到CSDN了 xff0c 给你带来不便 xff0c 抱歉 2 个人博客本篇文章地址 xff1a https www xdx97 com article
  • 听说docker命令你还记不住

    docker作为轻量级的 高性能的沙箱容器 xff0c 使用频率极高 xff0c 功能非常强大 强大的功能需要繁杂的命令来支撑 xff0c 虽然docker命令很多 xff0c 多的记不住 好记性不如一个烂笔头 xff0c 本文汇总了doc
  • ubuntu-18.04.1-desktop-amd64.iso initrd 基本文件系统中启动脚本分析 (1)

    1 解压 ubuntu 18 04 1 desktop amd64 iso 2 查看 boot grub grub cfg xff0c 知道引导文件系统是 casper initrd lz menuentry 34 Try Ubuntu w