Linux in RAM: debirf way
You want to have absolute disk speed? Let's see how it can be done in 2018 with versioning and automation.
before run this tutorial
you must know
- linux essential
- difference between
bash
andsh
(debirf writen onsh
) - 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
likenano +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
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, 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
От модератора: нам в Песочницу пришла статья на английском языке. Мы её прочитали и и в качестве пятничного эксперимента решили опубликовать. Не судите строго, всем peace and happy Friday! Let's come together! Короче, фром зе боттом оф ауа хартс.
Комментарии (35)
skymal4ik
17.08.2018 20:23+1Спасибо, было интересно (и язык статьи и сама статья), спасибо за свежую струю.
Но одна из причин, почему я сюда захожу — это то что все материалы и комментарии на родном языке и не надо мучаться, и вспоминать перевод слов или фраз. Надеюсь так и останется.
mwizard
17.08.2018 20:28+5Администрации: статьи на английском смысл имеют, когда это хорошие, грамотные статьи. Лично по моему мнению, данный пост не относится к этой категории.
lemproix
17.08.2018 21:13Для меня материалы на английском языке плохо осваивается и хабр был решением! А теперь свой английский все таки придется потянуть)
FenixFly
17.08.2018 23:35Можно не читать статьи на английском на хабре. Интересных IT форумов на английском пруд пруди, написанных красиво и грамотно. Я думаю создатели хабра поймут это скоро.
Fox_exe
17.08.2018 21:50+2Надо бы примечание редакции в начало статьи поднять — а то подумал, что это какойто бот прорвался и фальшивую статью написал, в которой будет куча ссылок на фрод/спам/вирусы/и т.п.
saboteur_kiev
17.08.2018 23:33-1I think it should be a good idea to block russian comments in english articles.
FenixFly
17.08.2018 23:38And then english articles will be without comments.
saboteur_kiev
18.08.2018 14:19Какой тогда смысл в английских статьях на Хабре, если их нельзя обсудить с англоязычной аудиторией?
Zettabyte
18.08.2018 00:32+1[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]
stychos
18.08.2018 01:03A number of big companies already solved this with the autotranslation. Not a best way but keeps community active in articles in another languages.
EduardGeneralov Автор
18.08.2018 00:12+1Всем привет. Прошу прощения за свой английский, это писалось заметкой сегодня в 4-ом часу ночи, и записано было только в целях обучения своего падавана (:
Английский для заметок выбран, т.к. не приходится переключаться для спец. слов, да и получается кратко и по делу.
Закинул на хабру спонтанно, не ожидал, что опубликуют. Обещаю подтянуть язык, и впредь писать на русском ?
Хабровчане, перевод этой же статьи на родной нужен?lamer84
18.08.2018 11:35Все-таки, наверное, в четвертом часу ночи лучше спать. Перевод, думаю, нужен.
Ну и, как предложили выше, это пояснение — да в шапку статьи, многие вопросы снимет.
win32nipuh
18.08.2018 11:43Ну, да, особенно подобные места надо перевести
mkdir -p rescue/iso/isolinux/
…
Kwent
18.08.2018 14:16+1Ну не знаю, отмазка «писал в четвертом часу ночи заметку и кинул на отвали на хабр» как-то оскорбительна даже, а проверить, а вычитать, а правила посмотреть где «язык публикаций русский»? Куда торопиться? Статью люди все-таки читают.
kovserg
18.08.2018 08:08www.slitaz.org — linux in ram из каробки
stychos
20.08.2018 00:47Мне tinycore нравится.
kovserg
20.08.2018 10:15У меня они просто на загрузочной флешке лежат как инструмент когда винде или линуху какому нибудь хреново. Да и выглядит симпатично: плюс есть web интерфейс можно настраивать хоть с телефона.
tinycore как-то не впечатляет в этом плане. Выглядит тоскливо и русский язык из коробки отсутствует.
lair
Ну хоть бы английский был хороший, так ведь нет же...
rkfg
Да ладно, у меня столько волнующих идей появилось после прочтения фразы "how to automate you desires via scripting"...
tormozedison
А теперь подумаем, как эту фразу написать лучше, чтобы нельзя было двояко понять.
lair
"how to achieve what you want with scripting"
Merkat0r
*как заархивировать то, что ты хочешь со скриптами* :)
c0f04
Аchieve (достичь), а не archive. Слышали слово «ачивки» у любителей компьютерных игр? Это отсюда как раз.
Merkat0r
дада :) но
а судя по опыту, лучше никогда не использовать в тех. статьях похожие слова ибо с очень большой вероятностью какой-нибудь
индусализарне носитель языка так и прочитает\переведет, лучше максимально просто, без оборотов и так, чтобкитайскаяшкольница из 2А понялаlair
Это в смысле "не писать по-английски"?
VolCh
Вы удивитесь, но в английском все слова состоят всего из 26 букв и, наверное, китайцам не понятно как их вообще различать можно в таких условиях, ну не анализировать же отношения каждого из 10 подряд идущих иероглифов в совокупности, чтобы получить одно понятие.
P.S. если что не силён в китайском.
lair
Нет, ну если кто-то настолько плохо знает английский язык, ему ничего не поможет.
Merkat0r
примерно большая часть планеты, горе от ума оно такое :)
lair
"Примерно большая часть планеты" и не читает английские тексты.