Linux in RAM: debirf way 2018

Linux in RAM: debirf way


Do you want to have absolute disk speed nowadays, don’t you? Let's revise how it could be done with versioning and automation in 2018.


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

Changelog:


  • The language of the article is corrected in English
  • sample repository introduced at github
  • Added test params
  • added asciicast

You must know before running this tutorial:


  • linux essential
  • the main difference between bash and sh (debirf written on sh, so I recommend to follow the style)
  • how to format usb key (in any way)
  • what drivers are needed for your hardware (or you can debug it via dmesg|lspci)
  • how to gain your task purposes via the 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 preparing


They are (optional) enable non-free components for basic installation. In addition, 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

Up to start:


Let's imagine, our flash drive:


  • must to be fast, so it is recommended to use 8+ class, or booting will take enough 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)

Test it


  • Install qemu
    • for linux: apt-get install -yq qemu
    • for macos: brew install qemu
  • decide which resources will be allocated for VM
    • -smp 1 1 real kernel
    • -m 1G 1G memory
  • additional
    • -nographic will launch VM in current terminal window
    • --enable-kvm enables hardware accelation
    • -kernel vmlinuz-* permit directly pass kernel
    • -initrd *.cgz direct access to .cgz file with initramfs
    • -append allows bypass kernel params, here are the parameters for running without a graphical shell

The command to start the virtual machine:


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

Test sample


asciicast


Install grub to flash drive and copy LiR on it


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


  • create mount point (on GUI-powered systems enabled auto-mount it isn't needed)
  • mount usb key to mount point (on GUI-powered systems enabled auto-mount it isn't 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’s names is important. In file network the resolving file will be changed to the system-resolved, and you can’t 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
Поделиться публикацией
Комментарии 45
    +18

    Ну хоть бы английский был хороший, так ведь нет же...

      +8

      Да ладно, у меня столько волнующих идей появилось после прочтения фразы "how to automate you desires via scripting"...

        +1
        А теперь подумаем, как эту фразу написать лучше, чтобы нельзя было двояко понять.
          +4

          "how to achieve what you want with scripting"

            –1
            *как заархивировать то, что ты хочешь со скриптами* :)
              +2
              Аchieve (достичь), а не archive. Слышали слово «ачивки» у любителей компьютерных игр? Это отсюда как раз.
                0
                дада :) но
                А теперь подумаем, как эту фразу написать лучше, чтобы нельзя было двояко понять.

                а судя по опыту, лучше никогда не использовать в тех. статьях похожие слова ибо с очень большой вероятностью какой-нибудь индус ализар не носитель языка так и прочитает\переведет, лучше максимально просто, без оборотов и так, чтоб китайская школьница из 2А поняла
                  +2
                  а судя по опыту, лучше никогда не использовать в тех. статьях похожие слова

                  Это в смысле "не писать по-английски"?

                    0
                    Вы удивитесь, но в английском все слова состоят всего из 26 букв и, наверное, китайцам не понятно как их вообще различать можно в таких условиях, ну не анализировать же отношения каждого из 10 подряд идущих иероглифов в совокупности, чтобы получить одно понятие.

                    P.S. если что не силён в китайском.
                  0

                  Нет, ну если кто-то настолько плохо знает английский язык, ему ничего не поможет.

                    0
                    примерно большая часть планеты, горе от ума оно такое :)
                      0
                      примерно большая часть планеты

                      "Примерно большая часть планеты" и не читает английские тексты.

          0
          Спасибо, было интересно (и язык статьи и сама статья), спасибо за свежую струю.

          Но одна из причин, почему я сюда захожу — это то что все материалы и комментарии на родном языке и не надо мучаться, и вспоминать перевод слов или фраз. Надеюсь так и останется.
            +12
            Администрации: статьи на английском смысл имеют, когда это хорошие, грамотные статьи. Лично по моему мнению, данный пост не относится к этой категории.
              0

              Для меня материалы на английском языке плохо осваивается и хабр был решением! А теперь свой английский все таки придется потянуть)

                +1

                Можно не читать статьи на английском на хабре. Интересных IT форумов на английском пруд пруди, написанных красиво и грамотно. Я думаю создатели хабра поймут это скоро.

                  0
                  А можете подсказать примеры таких? А то хотелось бы почитать, а на слуху только medium пока что…
                    0

                    Если новости, то например CNET. Для андроида раньше читал Appy Geek.


                    Может быть dzone.com

                +3
                Надо бы примечание редакции в начало статьи поднять — а то подумал, что это какойто бот прорвался и фальшивую статью написал, в которой будет куча ссылок на фрод/спам/вирусы/и т.п.
                  –9
                  I think it should be a good idea to block russian comments in english articles.
                    +5

                    And then english articles will be without comments.

                      0
                      Какой тогда смысл в английских статьях на Хабре, если их нельзя обсудить с англоязычной аудиторией?
                        0
                        А тут есть англоязычная аудитория?
                          0
                          В планах :))
                      +3
                      [Friday_night_mode_on]
                      I think it should be a good idea to block russian
                      Meanwhile at RosKomNadzor:
                      — Say no more!

                      [Friday_night_mode_off]
                      • НЛО прилетело и опубликовало эту надпись здесь
                          +1
                          And then you get accused for words you didn't say:)
                        +2

                        Всем привет. Прошу прощения за свой английский, это писалось заметкой сегодня в 4-ом часу ночи, и записано было только в целях обучения своего падавана (:
                        Английский для заметок выбран, т.к. не приходится переключаться для спец. слов, да и получается кратко и по делу.


                        Закинул на хабру спонтанно, не ожидал, что опубликуют. Обещаю подтянуть язык, и впредь писать на русском ️
                        Хабровчане, перевод этой же статьи на родной нужен?

                          +1
                          Нужен
                            0

                            Все-таки, наверное, в четвертом часу ночи лучше спать. Перевод, думаю, нужен.
                            Ну и, как предложили выше, это пояснение — да в шапку статьи, многие вопросы снимет.

                              0
                              Ну, да, особенно подобные места надо перевести
                              mkdir -p rescue/iso/isolinux/
                                0

                                Если идти сверху вниз — переводить не нужно. От working directory, в статье /root/Projects/debirf/.

                                +2
                                Ну не знаю, отмазка «писал в четвертом часу ночи заметку и кинул на отвали на хабр» как-то оскорбительна даже, а проверить, а вычитать, а правила посмотреть где «язык публикаций русский»? Куда торопиться? Статью люди все-таки читают.
                              • НЛО прилетело и опубликовало эту надпись здесь
                                  0
                                  www.slitaz.org — linux in ram из каробки
                                  • НЛО прилетело и опубликовало эту надпись здесь
                                      0
                                      У меня они просто на загрузочной флешке лежат как инструмент когда винде или линуху какому нибудь хреново. Да и выглядит симпатично: плюс есть web интерфейс можно настраивать хоть с телефона.
                                      tinycore как-то не впечатляет в этом плане. Выглядит тоскливо и русский язык из коробки отсутствует.

                                      • НЛО прилетело и опубликовало эту надпись здесь
                                      0
                                      К сожалению, неоднократно сталкивался с тем, что на новых (2017г.+) компьютерах initrd таких дистрибутивов не видит USB-контроллеры (даже USB2.0) и не мог подмонтировать флэшку/USB-DVD и загрузить оставшиеся файлы оттуда.

                                      Вот от готового, обновляемого дистрибутива на основании данной статьи я бы не отказался: судя по мануалу, он создаёт один большой initrd, который загружается в память real-mode загрузчиком через интерфейс BIOS/UEFI, и потому доставляет гораздо меньше неудобств.
                                        0

                                        Разница между UEFI машинами и старыми в рамках статьи:


                                        apt-get install -yq grub-efi
                                        grub-install --efi-directory=/media/root/8B46-1189/boot/efi --boot-directory=/media/root/8B46-1189/boot/efi/EFI --bootloader-id=grub
                                      +1
                                      а почему бы и нет…
                                      Для тех, кто в танке:
                                      debirf (DEBian on Initial Ram Filesystem) is a set of tools designed to create and prepare a kernel and initial ram filesystem that can run a full-blown Debian environment entirely from RAM.
                                      packages.debian.org/ru/jessie/debirf
                                        0
                                        The language of the article is corrected in English :)
                                        Article in the process of translation into Russian
                                          0
                                          is corrected in English

                                          Угу. Именно что.

                                            0
                                            статью отдавал переводчику, честно
                                              0

                                              … и переводчик оставил в тексте перлы навроде "debirf written on sh"? Неподходящий переводчик, не используйте его в этих целях.

                                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                        Самое читаемое