Хабрахабр

[Из песочницы] Linux in RAM: debirf way 2018

Let's see how it can be done in 2018 with versioning and automation. You want to have absolute disk speed?

before run this tutorial

you must know

  • linux essential
  • difference between bash and sh (debirf writen on sh)
  • how to format usb key (any way)
  • what drivers you need for your hardware (or you can debug it via dmesg|lspci)
  • how to automate you desires via scripting

you can replace:

  • usb letter from /dev/sdb to any else (/dev/sdd)
  • working directory from /root/Projects/debirf/ to your choice (/home/username/Documents/debirf)
  • mountpoint from /media/root/8B46-1189 to /media/username/myflashdrive

Steps to prepare

(optional) enable non-free components for basic installation

I think, you will need the non-free repository.

  • open line number 107 of file /usr/bin/debirf like nano +107 $(which debirf)
  • find function create_debootstrap
  • find line like local OPTS="
  • add --components main,contrib,non-free in brackets

for start:

Let's think, our flash drive:

  • must be fast. recommend to use 8+ class, or booting will take many of your time
  • /dev/sdb
  • formated
  • mounted at /media/root/8B46-1189.
  • our working directory /root/Projects/debirf/

Install debirf

apt-get install -yq debirf mtools genisoimage

  • mtools needed for create iso via debirf (not working, but needed)
  • genisoimage needed for create real working iso (optional)

Prepare debirf working directory

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

And configure /root/Projects/debirf/rescue/debirf.conf

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

Create LiR

  • Run debirf make . and go away. It need many time, at minimal 15 minutes on top hardware.
  • Run debirf makeiso . for create not working iso (needed for grub.cfg file)

Install grub to flash drive and copy LiR on it

Not tested with UEFI, but must work. I recommend you use bios legacy boot and package grub-pc. Next lines will be do:

  • create mount point (on GUI-powered systems enabled auto-mount, not needed)
  • mount usb key to mount point (on GUI-powered systems enabled auto-mount, not needed)
  • install grub
  • copy grub file
  • copy initramfs (system)
  • copy vmlinuz (kernel)
  • unmount usb key
  • remove mount point

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

Create bootable iso (optional)

  • download isolinux.bin
  • create isolinux config file
  • create 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/

Check result

  • Install QEMU hypervisor apt-get install -yq qemu
  • run qemu-system-x86_64 -enable-kvm -m 512 -hda /dev/sdb
  • if previous command fails, remove -enable-kvm
  • VM will be started, booted from usb key
  • you must see two menu items, difference in end: console and serial. Select first entry.
  • in ~minute you will see many lines. after it ends — press enter to see welcome message
  • login: root, no password

Customize it: Create custom debirf module

Module — executable sh script for running during LiR creating

  • create module file
  • The order of file names is important. In file network the resolving file will be changed to the system-resolved, and you can not work with the network.
  • lines from 1 to 3 must be present, line 3 must present file name
  • if you want install package — use construction #DEBIRF_PACKAGE>+
  • if you want work with rootfs — use $DEBIRF_ROOT
  • if you want to run command in fakeroot — use debirf_exec

Sample:

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

and replace line with resolved in file rescue/modules/network with debirf_exec systemctl enable wpa_supplicant@wlp1s0.service systemd-networkd.service systemd-resolved.service

Bonus: lxc on LiR

module rescue/modules/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

Мы её прочитали и и в качестве пятничного эксперимента решили опубликовать. От модератора: нам в Песочницу пришла статья на английском языке. Let's come together! Не судите строго, всем peace and happy Friday! Короче, фром зе боттом оф ауа хартс.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть