RAM中的Linux:Debirf Way 2018

内存中的Linux:debirf方法


您现在想拥有绝对的磁盘速度吗? 让我们修改一下如何在2018年使用版本控制和自动化来完成它。


从主持人那里:沙盒中出现了一篇英文文章。 我们阅读并决定将其发布为星期五实验。 不要严格判断,每个星期五和平快乐! 一起来吧! 简而言之,来自Aua Hearts的底部。

变更日志:


  • 文章语言已用英语更正
  • github上引入的示例存储库
  • 添加了测试参数
  • 添加抗癌药

在运行本教程之前,您必须知道:


  • linux必备
  • bash和sh之间的主要区别(debirf写在sh上,所以我建议遵循这种风格)
  • 如何格式化USB密钥(以任何方式)
  • 您的硬件需要什么驱动程序(或者您可以通过dmesg | lspci对其进行调试)
  • 如何通过脚本获得任务目的

您可以替换:


  • /dev/sdb到其他任何人的USB信( /dev/sdd
  • 工作目录从/root/Projects/debirf/到您选择的( /home/username/Documents/debirf
  • /media/root/8B46-1189/media/username/myflashdrive

准备步骤


它们是(可选)启用基本组件的非自由组件。 另外,我认为您将需要非免费的存储库。


  • 打开文件/usr/bin/debirf行号107,例如nano +107 $(which debirf)
  • 查找功能create_debootstrap
  • 找到像local OPTS="这样的行local OPTS="
  • --components main,contrib,non-free括号中添加--components main,contrib,non-free

开始:


想象一下,我们的闪存驱动器:


  • 必须快,所以建议使用8+类,否则启动将花费足够的时间
  • /开发/ SDB
  • 格式化的
  • 安装在/media/root/8B46-1189
  • 我们的工作目录/root/Projects/debirf/

安装debirf


 apt-get install -yq debirf mtools genisoimage 

  • 通过debirf创建iso所需的mtools(不起作用,但需要)
  • 创建真实工作iso所需的genisoimage(可选)

准备debirf工作目录


 mkdir -p /root/Projects/debirf tar xzf /usr/share/doc/debirf/example-profiles/rescue.tgz -C /root/Projects/debirf cd /root/Projects/debirf/rescue 

并配置/root/Projects/debirf/rescue/debirf.conf


 DEBIRF_LABEL="debirf-rescue" DEBIRF_SUITE=stretch DEBIRF_DISTRO=debian DEBIRF_MIRROR=http://ftp.ru.debian.org/debian/ 

创建LiR


  • 运行debirf make . 走开 在顶级硬件上,它需要很多时间,最少需要15分钟。
  • 运行debirf makeiso . 用于创建无法正常工作的iso(grub.cfg文件需要)

测试一下


  • 安装qemu
    • 对于linux: apt-get install -yq qemu
    • 对于macOS: brew install qemu
  • 决定将为VM分配哪些资源
    • -smp 1 1实际内核
    • -m 1G 1G内存
  • 额外的
    • -nographic将在当前终端窗口中启动VM
    • --enable-kvm启用硬件加速
    • -kernel vmlinuz-*允许直接通过内核
    • -initrd *.cgz使用initramfs直接访问.cgz文件
    • -append允许绕过内核参数,这是无需图形外壳程序即可运行的参数

启动虚拟机的命令:


 qemu-system-x86_64 --enable-kvm -kernel vmlinuz-* -initrd *.cgz -append "console=tty0 console=ttyS0,115200n8" -m 1G -smp 1 -net nic,vlan=0 -net user -nographic 

测试样品


航天员


将grub安装到闪存驱动器并在其上复制LiR


我建议您使用BIOS旧版引导程序并打包grub-pc。 尚未通过UEFI测试,但必须能够正常工作。 接下来的几行是:


  • 创建挂载点(在启用了GUI的系统上自动挂载是不需要的)
  • 将USB密钥挂载到挂载点(在启用了GUI的系统上自动挂载是不需要的)
  • 安装grub
  • 复制grub文件
  • 复制initramfs(系统)
  • 复制vmlinuz(内核)
  • 卸载USB密钥
  • 删除挂载点

 mkdir -p /media/root/8B46-1189 mount /dev/sdb1 /media/root/8B46-1189 grub-install --boot-directory=/media/root/8B46-1189/boot /dev/sdb cp /root/Projects/debirf/rescue/iso/boot/grub/grub.cfg /media/root/8B46-1189/boot/grub/ cp /root/Projects/debirf/rescue/*.cgz /media/root/8B46-1189 cp /root/Projects/debirf/rescue/vmlinuz-* /media/root/8B46-1189 umount /media/root/8B46-1189 rm -rf /media/root/8B46-1189 

创建可启动的ISO(可选)


  • 下载isolinux.bin
  • 创建isolinux配置文件
  • 创建ISO

 mkdir -p rescue/iso/isolinux/ wget -O rescue/iso/isolinux/isolinux.bin 'http://mirror.yandex.ru/centos/7/os/x86_64/isolinux/isolinux.bin' cat << EOF > rescue/iso/isolinux/isolinux.cfg TIMEOUT 5 DEFAULT lir LABEL lir LINUX /vmlinuz-4.9.0-7-amd64 INITRD /debirf-rescue_stretch_4.9.0-7-amd64.cgz EOF genisoimage -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -l -input-charset default -V LiR -A "Linux in RAM" -o rescue/rescue.iso rescue/iso/ 

检查结果


  • 安装QEMU hypervisor apt-get install -yq qemu
  • 运行qemu-system-x86_64 -enable-kvm -m 512 -hda /dev/sdb
  • 如果先前的命令失败,则删除-enable-kvm
  • VM将启动,并通过USB密钥启动
  • 您必须看到两个菜单项,结尾不同:控制台和串行。 选择第一个条目。
  • 在〜分钟内,您会看到很多行。 结束后-按Enter键以查看欢迎消息
  • 登录名:root,无密码

自定义它:创建自定义debirf模块


模块-在LiR创建期间运行的可执行sh脚本


  • 创建模块文件
  • 文件名的顺序很重要。 在文件network ,解析文件将更改为系统解析的文件,您将无法使用网络;
  • 第1至3行必须存在,第3行必须存在文件名
  • 如果要安装软件包,请使用构造#DEBIRF_PACKAGE>+
  • 如果要使用rootfs,请使用$DEBIRF_ROOT
  • 如果要在fakeroot中运行命令,请使用debirf_exec

样本:


 cat <<< EOF > rescue/modules/mi #!/bin/sh -e # debirf module: mi # prepare to run on mi notebook # # This script were written by # Eduard Generalov <eduard@generalov.net> # # They are Copyright 2018, and published under the MIT, #DEBIRF_PACKAGE>+firmware-iwlwifi #DEBIRF_PACKAGE>+firmware-misc-nonfree #DEBIRF_PACKAGE>+wpasupplicant echo 'iwlwifi' >> $DEBIRF_ROOT/etc/modules cat << EOF > $DEBIRF_ROOT/etc/wpa_supplicant/wpa_supplicant-wlp1s0.conf ctrl_interface=/run/wpa_supplicant update_config=1 network={ ssid="WiFi_SSID" psk="WIFIPASSWORD" } EOF cat << EOF > $DEBIRF_ROOT/etc/systemd/network/wireless.network [Match] Name=wlp1s0 [Network] DHCP=ipv4 [DHCP] RouteMetric=20 EOF 

并用debirf_exec systemctl enable wpa_supplicant@wlp1s0.service systemd-networkd.service systemd-resolved.service文件抢救/模块/网络中的已resolved行以debirf_exec systemctl enable wpa_supplicant@wlp1s0.service systemd-networkd.service systemd-resolved.service


奖励:LiR上的lxc


救援模块/模块/ LXC


 #!/bin/sh -e # debirf module: lxc # prepare lxc # # This script were written by # Eduard Generalov <eduard@generalov.net> # # They are Copyright 2018, and published under the MIT, #DEBIRF_PACKAGE>+lxc mkdir -p $DEBIRF_ROOT/root/.ssh/ ssh-keygen -b 2048 -t rsa -f $DEBIRF_ROOT/root/.ssh/id_rsa -q -N "" cp $DEBIRF_ROOT/root/.ssh/id_rsa $DEBIRF_ROOT/root/.ssh/authorized_keys chmod 400 $DEBIRF_ROOT/root/.ssh/authorized_keys debirf_exec systemctl enable lxc-net cat << EOF > $DEBIRF_ROOT/etc/lxc/default.conf lxc.network.type = veth lxc.network.link = lxc lxc.network.name = eth0 lxc.network.flags = up lxc.network.hwaddr = 00:FF:AA:FF:xx:xx lxc.mount.entry=/var/cache/apt var/cache/apt none bind,rw 0 0 lxc.mount.entry = /root/.ssh/ root/.ssh none bind,create=dir 0 0 EOF cat << EOF > $DEBIRF_ROOT/etc/default/lxc-net USE_LXC_BRIDGE="true" LXC_BRIDGE="lxc" LXC_ADDR="10.0.3.1" LXC_NETMASK="255.255.255.0" LXC_NETWORK="10.0.3.0/24" LXC_DHCP_RANGE="10.0.3.2,10.0.3.254" LXC_DHCP_MAX="253" LXC_DHCP_CONFILE="" LXC_DOMAIN="lxc" EOF 

Source: https://habr.com/ru/post/zh-CN420501/


All Articles