LINUX.ORG.RU

Сообщения Spoofing

 

Создание загрузочных образов boobstrap v1.0

Новости — Open Source
Группа Open Source

Хочу представить вашему вниманию фреймворк под названием boobstrap, написаный на POSIX shell, для создания загрузочных образов с дистрибутивами GNU/Linux. Фреймворк позволяет пройти весь пусть в три простых шага: от развёртывания системы в chroot, создания initramfs-образа включающего в себя систему из chroot, и в конечном счёте загрузочного ISO-образа. boobstrap включает в себя три утилиты mkbootstrap, mkinitramfs и mkbootisofs соответсвенно.

( читать дальше... )

>>> Получить исходный код

 

Spoofing
()

Цветной вывод echo-сообщений в Bash в стиле mIRC

Форум — General

Делюсь кодом для раскраски сообщений выводимых через echo, который использую в своём проекте.

Использовать так:

. colours.sh
echo Bla bla bla | msg -2 --foreground "Light Red" --highlight

Где -1 это STDOUT, соответственно -2 для STDERR.

Можно указать --foreground, --background, --highlight и --bold.

Коды цветов связаны напрямую с mIRC, т.е. условно скажем, если в линуксовой консоли 0 (нулевой) это чёрный, 1 (первый) это красный, то в mIRC порядок немножечко другой, и красный там это 4 цвет. Если вы хоть раз в жизни пользовались IRC клиентом, то знаете, о чём речь. Порядок цветов именно такой, какой используется в IRC, просто мне так удобнее потому что в отличии от линуксовой консоли цвета mIRC я помню наизусть )) Но можете изменить порядок цветов как вам надо. Цвета можно использовать указывая их номер или их полное название, описание цветов в IRC тут: https://www.mirc.com/colors.html

echo "Bla Bla Bla" | msg -1 --foreground 9 --background 1

9 это зелный текст, 1 это чёрный фон.

Надеюсь это кому-нибудь окажется полезным.

#! /bin/sh -

msg() {
	STDOUT=""
	STDERR=""
	fore=""
	back=""
	ctrl=""
	sgr0=""
	while test "$1"; do
		case "$1" in
			"-1")		STDOUT="yes" ;;
			"-2")		STDERR="yes" ;;
			"--foreground")	fore="$2" ; shift ; ;;
			"--background")	back="$2" ; shift ; ;;
			"--highlight")	ctrl="$ctrl$SWITCH_HIGHLIGHT" ; ;;
			"--bold")	ctrl="$ctrl$SWITCH_BOLD" ; ;;
		esac
		shift
	done
	case "$fore" in
		"00"|"0"|"White")	fore="$FOREGROUND_00" ;;
		"01"|"1"|"Black")	fore="$FOREGROUND_01" ;;
		"02"|"2"|"Blue")	fore="$FOREGROUND_02" ;;
		"03"|"3"|"Green")	fore="$FOREGROUND_03" ;;
		"04"|"4"|"Light Red")	fore="$FOREGROUND_04" ;;
		"05"|"5"|"Brown")	fore="$FOREGROUND_05" ;;
		"06"|"6"|"Purple")	fore="$FOREGROUND_06" ;;
		"07"|"7"|"Orange")	fore="$FOREGROUND_07" ;;
		"08"|"8"|"Yellow")	fore="$FOREGROUND_08" ;;
		"09"|"9"|"Light Green")	fore="$FOREGROUND_09" ;;
		"10"|"Cyan")		fore="$FOREGROUND_10" ;;
		"11"|"Light Cyan")	fore="$FOREGROUND_11" ;;
		"12"|"Light Blue")	fore="$FOREGROUND_12" ;;
		"13"|"Pink")		fore="$FOREGROUND_13" ;;
		"14"|"Grey")		fore="$FOREGROUND_14" ;;
		"15"|"Light Grey")	fore="$FOREGROUND_15" ;;
		*)			fore="$FOREGROUND_DEFAULT" ;;
	esac
	case "$back" in
		"00"|"0"|"White")	back="$BACKGROUND_00" ;;
		"01"|"1"|"Black")	back="$BACKGROUND_01" ;;
		"02"|"2"|"Blue")	back="$BACKGROUND_02" ;;
		"03"|"3"|"Green")	back="$BACKGROUND_03" ;;
		"04"|"4"|"Light Red")	back="$BACKGROUND_04" ;;
		"05"|"5"|"Brown")	back="$BACKGROUND_05" ;;
		"06"|"6"|"Purple")	back="$BACKGROUND_06" ;;
		"07"|"7"|"Orange")	back="$BACKGROUND_07" ;;
		"08"|"8"|"Yellow")	back="$BACKGROUND_08" ;;
		"09"|"9"|"Light Green")	back="$BACKGROUND_09" ;;
		"10"|"Cyan")		back="$BACKGROUND_10" ;;
		"11"|"Light Cyan")	back="$BACKGROUND_11" ;;
		"12"|"Light Blue")	back="$BACKGROUND_12" ;;
		"13"|"Pink")		back="$BACKGROUND_13" ;;
		"14"|"Grey")		back="$BACKGROUND_14" ;;
		"15"|"Light Grey")	back="$BACKGROUND_15" ;;
		*)			back="$BACKGROUND_DEFAULT" ;;
	esac
	if test "$fore$back$ctrl"; then
		sgr0="$(tput sgr0)"
	fi
	if test "$STDOUT" = "yes"; then
		while read input; do
			echo "$fore$back$ctrl$input$sgr0" >&1
		done
	fi
	if test "$STDERR" = "yes"; then
		while read input; do
			echo "$fore$back$ctrl$input$sgr0" >&2
		done
	fi
}

mirc_colours_schema() {
	FOREGROUND_00="$(tput setaf 7)$(tput bold)"
	FOREGROUND_01="$(tput setaf 0)"
	FOREGROUND_02="$(tput setaf 4)"
	FOREGROUND_03="$(tput setaf 2)"
	FOREGROUND_04="$(tput setaf 1)$(tput bold)"
	FOREGROUND_05="$(tput setaf 1)"
	FOREGROUND_06="$(tput setaf 5)"
	FOREGROUND_07="$(tput setaf 3)"
	FOREGROUND_08="$(tput setaf 3)$(tput bold)"
	FOREGROUND_09="$(tput setaf 2)$(tput bold)"
	FOREGROUND_10="$(tput setaf 6)"
	FOREGROUND_11="$(tput setaf 6)$(tput bold)"
	FOREGROUND_12="$(tput setaf 4)$(tput bold)"
	FOREGROUND_13="$(tput setaf 5)$(tput bold)"
	FOREGROUND_14="$(tput setaf 0)$(tput bold)"
	FOREGROUND_15="$(tput setaf 7)"
	FOREGROUND_DEFAULT=""

	BACKGROUND_00="$(tput setab 7)$(tput bold)"
	BACKGROUND_01="$(tput setab 0)"
	BACKGROUND_02="$(tput setab 4)"
	BACKGROUND_03="$(tput setab 2)"
	BACKGROUND_04="$(tput setab 1)$(tput bold)"
	BACKGROUND_05="$(tput setab 1)"
	BACKGROUND_06="$(tput setab 5)"
	BACKGROUND_07="$(tput setab 3)"
	BACKGROUND_08="$(tput setab 3)$(tput bold)"
	BACKGROUND_09="$(tput setab 2)$(tput bold)"
	BACKGROUND_10="$(tput setab 6)"
	BACKGROUND_11="$(tput setab 6)$(tput bold)"
	BACKGROUND_12="$(tput setab 4)$(tput bold)"
	BACKGROUND_13="$(tput setab 5)$(tput bold)"
	BACKGROUND_14="$(tput setab 0)$(tput bold)"
	BACKGROUND_15="$(tput setab 7)"
	BACKGROUND_DEFAULT=""

	SWITCH_OFF="$(tput sgr0)"
	SWITCH_BOLD="$(tput bold)"
	SWITCH_UNDERLINE_ON="$(tput smul)"
	SWITCH_UNDERLINE_OFF="$(tput rmul)"
	SWITCH_HIGHLIGHT="$(tput blink)"
	SWITCH_REVERSE="$(tput rev)"
	SWITCH_DEFAULT=""
}

mirc_colours_schema

 ,

Spoofing
()

Почему XZ модули не загружаются?

Форум — Linux-install

Есть такой сборочный скрипт (CRUX Pkgbuild), который включает сжатие модулей посредством XZ и другие настройки ядра скриптом scripts/config, который поставляется вместе с исходниками ядра. Нет необходимости тащить за собой весь .config, рано или поздно позабыв чем он отличается от ванильки (inb4 scripts/diffconfig), а так всё «на виду», тем более что, надо-то всего несколько опций включать.

Так вот, при загрузке ОС выполняются правила iptables -t nat, а iptable_nat подхватывается как модуль (значение в ядре по-умолчанию), а поскольку модуль имеет .ko.xz формат, ядро ругается, что такого модуля нет. Сделав unxz модуль успешно загрузился вручную через modprobe.

ЧЯДНТ? Как сделать чтобы сжатые XZ модули подгружались ядром? В других дистрибутивах это работает!

name=linux
version=5.7.2
release=1
source=(https://cdn.kernel.org/pub/linux/kernel/v5.x/$name-$version.tar.xz)

build() {
        cd $name-$version
        make defconfig
        make kvmconfig

        # KO (Kernel Objects)
        scripts/config -e MODULE_COMPRESS
        scripts/config -e MODULE_COMPRESS_XZ

        # Virtualization
        scripts/config -m KVM
        scripts/config -m KVM_INTEL
        scripts/config -m KVM_AMD

        # SquashFS + OverlayFS
        scripts/config -e OVERLAY_FS

        scripts/config -e SQUASHFS
        scripts/config -e SQUASHFS_XZ

        # Sound
        scripts/config -e SND_HDA_INPUT_BEEP
        scripts/config -e SND_HDA_PATCH_LOADER
        scripts/config -e SND_HDA_CODEC_REALTEK
        scripts/config -e SND_HDA_CODEC_HDMI
        scripts/config -e SND_USB_AUDIO

        # AMD GPU
        scripts/config -m DRM_AMDGPU
        scripts/config -e DRM_AMD_ACP

        # nVidia GPU
        scripts/config -m DRM_NOUVEAU

        # "GIGABYTE X470 AORUS ULTRA GAMING" ethernet
        scripts/config -m CONFIG_IGB
        scripts/config -m CONFIG_IGBVF

        make olddefconfig
        make
        install -D -m 0644 "$(make -s image_name)" $PKG/lib/modules/$version/vmlinuz
        make INSTALL_MOD_PATH="$PKG" modules_install
        rm $PKG/lib/modules/$version/{source,build}
}

И чтобы не плодить треды сразу вопрос про distcc.

1. Чтобы distcc работало корректно на каждой «ноде» должна быть абсолютная точная конфигурация системы, включая все пакеты, все заголовочные файлы и прочая? Или нет? Просто на любом хосте, на любом дистрибутиве, может быть даже на любой архитектуре ставишь distcc и он творит такую магию, возвращая корретные скомпилированные бинарники?

2. Если происходит второй вариант с «магией», то может быть я создам загрузочный ISO с дистрибутивом, чтобы каждый желающий, кто хочет поделиться вычислительными ресурсами, просто загружал этот ISO в своей виртуалке/железке, становясь частью «улья», сообщая «матке» свой IP, куда далее все кому нужна быстрая сборка через distcc, «вступают и компилируют»?

3. Из второго варианта вытекает третий, если это может быть небезопасно, что вместо корректного бинарника тебе отправят условный майнер, может внедрить систему подписей или вроде того, как у пакетов дистрибутивов? Вообще, если пользователи линукс доверяют бинарным дистрибутивам в принципе, то не вижу оснований не доверять удалённым distcc нодам, которые собирают те же самые бинарники.

Где я ошибся? Заранее спасибо.

 ,

Spoofing
()

root и все-все-все

Форум — Talks

Поставил Manjaro / Arch Linux чтобы закрыть несколько багов в проекте связанных со спецификой дистрибутивов, думал сейчас быстренько разберусь со всем и свалю обратно. Дак нет же, вместо того, чтобы в user-friendly дистрибутиве просто сделать git clone и начать щёлкать Issues как орешки, мне пришлось бодаться с запуском QEMU из под root! Мдя...

Почему во времена всеобщей виртуализации, контейнеризации и одноразовых нод, — запустил, поработал, удалил, всё ещё существуют рекомендации «не запускать ничего с правами root». И ладно бы, дело ограничивалось одними лишь предупреждениями, — программы вовсе отказываются запускаться.

Мне удобно работать из под root, т.к. это не накладывает никаких ограничений на работу с системой, на тот-же mount. Удобно, когда перед тобой все возможности системы без ограничений, а значит без лишних движений на постоянные sudo/su. Система тоже одноразовая, каждый раз загружается заново по сети, например, или с флешки, или пусть даже я её установлю на диск, она всё ещё остаётся одноразовой поскольку служит одноразовой цели. Надёжность — это когда ты делаешь бэкапы, а не вводишь постоянно свой пароль. С чего ради все считают, что если ты устанавливают систему, значит всё, «и в радости и в горе, пока rm -rf / не разлучит вас». А значит надо всё запретить! Нипущать! Никого тебе удобства работы из под root!

Или Debian, установщик которого всё ещё считает, что / под всю систему это для «novice», а раздельные / /home /var это для «expert», ха! Если надо настроить специфичную конфигурацию, делаешь это в отдельном контейнере, виртуалке. Когда мало ресурсов или возможностей виртуалки, или даже тебе визуально легче представить это на реальном железе, то делаешь это соответственно на отдельной железке, одноразово, опять же, сохраняешь свою конфигурацию и пользуешься на века. К чему нужна вся эта суета вокруг выбора ФС? Сплошная экономия на спичках чтобы выиграть сущие проценты производительности.

Наступили времена одноразовых нод. Одноразовых железок, даже.

И хватит уже носиться с root как со священной коровой.

 

Spoofing
()

Разное поведение grep

Форум — General

CRUX

# pkginfo -i | egrep '(pcre|grep)'
grep 3.4-2
libpcre 8.44-1
# ldd /sbin/switch_root | grep -o "/.* "
/lib/libc.so.6 
/lib/ld-linux-x86-64.so.2

Manjaro

# pacman -Q | egrep "(pcre|grep)"
grep 3.4-1
pcre 8.44-1
pcre2 10.35-1
# ldd /sbin/switch_root | grep -o "/.* "
/usr/lib/libc.so
/lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2

Вот и как писать после этого на POSIX shell. -_-

В итоге сделал так.

lddtree() {
	if test "$1" = ""; then
		return 0
	fi

	echo "$1"

	for dep in $(ldd "$1" | grep "=> /" | cut -d " " -f 3); do
		lddtree "$dep"
	done
}

Потому как предыдущий вариант, с grep -o "/.* ", радостно сообщал:

ldd: ./=>: Нет такого файла или каталога
      =>
        Failure []
      /lib64/ld-linux-x86-64.so.2
        Failure []
      /usr/bin/mv
        Failure []
      /usr/lib64/ld-linux-x86-64.so.2
        Failure []
      /usr/lib/ld-linux-x86-64.so.2
        Failure []
      /usr/lib/libacl.so.1
        Failure []
      /usr/lib/libattr.so.1
        Failure []
      /usr/lib/libc.so.6
        Failure []

 , ,

Spoofing
()

Подскажите программу для написания документации

Форум — General

Пишу утилиту, и надо бы написать документацию к ней.

Подскажите, в чём это можно делать «на лету», не отвлекаясь на нюансы вроде отступов, оформления в виде специальных тэгов и прочего. И чтобы конечно, потом это можно было конвертировать в обычный man, txt, html опционально.

 

Spoofing
()

Руководство: Как сделать свою сборку Ubuntu LiveCD в три простых шага

Форум — Talks

Ubuntu.png

Будет полезно тем, кто хочет делать свои сборки на основе Ubuntu, добавив туда необходимый инструментарий хакера или сменить обои рабочего стола.

Возьмём за основу любой образ любой редакции Ubuntu.

# wget https://mirror.yandex.ru/ubuntu-releases/20.04/ubuntu-20.04-desktop-amd64.iso

Примонтируем.

# mkdir ubuntu-iso
# mount ubuntu-20.04-desktop-amd64.iso ubuntu-iso

И распакуем содержимое корневого раздела Live-образа.

# mkdir squashfs-root
# unsquashfs ubuntu-iso/casper/filesystem.squashfs squashfs-root/

Теперь можно выполнить chroot squashfs-root/ /bin/bash для настройки системы. echo nameserver 8.8.8.8 > /etc/resolv.conf, apt update && apt list --upgradable | less && apt upgrade, ну и так далее по списку.

После того, как вы закончите её настраивать, осталось выполнить две команды.

Делай раз.

# mkinitramfs `mktemp -d` --overlay squashfs-root --squashfs-xz --output initrd

Делай два.

# mkdir -p iso/boot
# cp squashfs-root/boot/vmlinuz-*-generic iso/boot/vmlinuz
# cp initrd iso/boot/initrd
# mkbootisofs iso/ > mybuntu.iso

Вы великолепны, mybuntu.iso можно записывать на флешку.

Скачать mkbootstrap / mkinitramfs / mkbootisofs ( https://github.com/sp00f1ng/boobstrap ).

 ,

Spoofing
()

Как лучше сжимать initramfs. Серия тестов.

Форум — Talks

Пока идут обсуждения о включении zstd в ядро, можно потестить размер получаемых образов и сделать некоторые выводы. Просто оставлю это здесь, возможно кому-то окажется полезным, когда встанет вопрос о создании загрузочного дистрибутива.

В качестве «эталона» возьмём Gentoo. Скачиваем stage3 amd64, распаковываем, размер дистрибутива:

# du -sh gentoo/
1.1G	gentoo/
# du -s gentoo/
1104960	gentoo/

plain = 1.1G

Простейший initramfs, используя саму директорию Gentoo для создания образа.

Для работоспособности нужно только сделать симлинк ln -s sbin/init init.

Это просто cpio без всякого сжатия.

# mkinitramfs gentoo/ > initrd 
1938832 blocks
# du -sh initrd
947M	initrd
# du -s initrd
969420	initrd

cpio = 947M

В том же режиме «standalone» директории упакуем в gzip.

# mkinitramfs gentoo/ | gzip -c -9 -v > initrd.gz
1938832 blocks
 67.1%
# du -sh initrd.gz 
312M	initrd.gz
# du -s initrd.gz 
318628	initrd.gz

gzip = 312M

xz, самый распространённый из самых «сильных» форматов сжатия на данный момент.

# mkinitramfs gentoo/ | xz -c -C "crc32" -T 0 -9 -e -v > initrd.xz
1938832 blocks
  100 %       167.3 MiB / 946.7 MiB = 0.177   8.6 MiB/s       1:49             
# du -hs initrd.xz
168M	initrd.xz
# du -s initrd.xz
171308	initrd.xz

xz = 168M

Теперь взглянем на современный, инновационный, сногшибательный, духозахватывающий, неповторимый zstd!

# mkinitramfs gentoo/ | zstd -T0 --ultra -100500 -v - > initrd.zst
Note: 8 physical core(s) detected
Warning : compression level higher than max, reduced to 22 
(L22) Buffered : 932 MB - Consumed :   2 MB - Compressed :   0 MB => 33.15%   
# du -sh initrd.zst 
173M	initrd.zst
# du -s initrd.zst 
176432	initrd.zst

zstd = 173M

А разговоров то было.... Ну, справедливости ради стоит отметить, сильная его сторона вовсе не в возможностях сжатия, а в скорости распаковки. Условную планку «xz» по уровню сжатия пока ещё не преодолели.

Теперь давайте взглянем на альтернативный метод предоставления системы из initramfs, как «слой» с использованием SquashFS с сохранием данных в tmpfs.

# mkinitramfs `mktemp -d` --overlay gentoo --squashfs-xz --output $PWD/initrd.squashfs.xz
Parallel mksquashfs: Using 16 processors
Creating 4.0 filesystem on /tmp/tmp.scQzUt6MLO/overlays/10-gentoo, block size 1048576.
[============================================================] 53192/53192 100%
# du -sh initrd.squashfs.xz 
217M	initrd.squashfs.xz
# du -s initrd.squashfs.xz 
221292	initrd.squashfs.xz

squashfs.xz = 217M

Вот это да, initramfs с системой упакованной в squashfs + xz получился немногим больше чем просто initramfs + xz.

Какие из этого можно сделать выводы?

  • Если вы ограничены в объёме RAM, но хотите работать в tmpfs, тогда используйте squashfs + xz или squashfs + zstd.

# mkinitramfs `mktemp -d` --overlay chroot --output $PWD/initrd --squashfs-xz

  • Если выделить пару-тройку GB под систему не проблема, тогда используйте overlay без squashfs, и будет вам уютный tmpfs без глюков самого overlayfs.

# mkinitramfs `mktemp -d` --overlay chroot --output $PWD/initrd

Специальный приглашённый гость: mkinitramfs из пакета ( https://github.com/sp00f1ng/boobstrap ).

А всё это, как водится, реклама. А на сегодня всё. До новых встреч. :-) :-|

 , ,

Spoofing
()

CRUX невиноват, это всё смуззихлёбы

Форум — Talks

CRUX отличается своей стройностью, лёгкостью и лаконичным дизайном, ничего лишнего, в него входят только простые и проверенные решения, например start-stop-daemon из Debian для запуска демонов и signify из OpenBSD для валидации портов.

Репозиторий core полностью самодостаточен и при этом в нём нет ниодного лишнего пакета «просто чтоб было», т.е. имея установленный один только core можно во-первых, пересобирать систему (проще говоря @world) целиком хоть до посинения, во-вторых, отталкиваясь от одного core, собирать всю остальную систему целиком, а это X11, и далее по списку все остальные приложения. «просто чтоб было» уходит в opt репозиторий, то, что может пригодиться, например linux-firmware, ppp, wpa_supplicant и всё тому подобное, что необходимо введения дистрибутива в рабочее состояние на десктопах. Ну и xorg, сооветственно, для «рабочего стола». core, opt, xorg наше всё.

Единственное, что могло угрожать существованию этого упорядоченного мира, это смуззихлёбы, которые решают, что для сборки gcc теперь нужен python3, и этот день к сожалению настал. А если gcc без python3 невозможен, и нами не будут придуманы обходные пути наименьшего сопротивления, значит теперь python3 придётся включать в core. Не мы такие, жизнь такая.

Релиз CRUX 3.6 состоится, как он только будет готов (ц), но тем временем можно подготовиться и узнать, что же нас ждёт.

https://crux.nu/Wiki/TODO36

Если вам нет никакого дела до CRUX, вы подумайте, что тоже самое ждёт абсолютно все дистрибутивы, включая Linux From Scratch.

  • zstd просто ещё один архиватор, как gzip, bzip2, lzma и другие. Пусть будет.
  • Новая версия dhcpcd потребует отдельного пользователя для запуска демона, ну ок.
  • libuv, которая не сделает погоды.

Такие дела.

 ,

Spoofing
()

Возможно я изобретаю велосипед, но...

Форум — Talks

https://github.com/sp00f1ng/boobstrap

Картинко.

Для тех, кто читает это впервые. Изначально я написал три простых утилиты, mkbootstrap устанавливает дистрибутив (Arch, Debian, CRUX) в chroot/ директорию, mkinitramfs создаёт initramfs-образ из директории, ему можно указать chroot/ директорию как --overlay, и тогда она упакует её в squashfs-архив, дистрибутив будет работать в tmpfs (CRUX/core занимает 150мб в squashfs). И конечно же, mkbootisofs, которая делает из директории загрузочный (BIOS / UEFI) ISO, который хоть на флешку, хоть виртуалке скорми. Оригинальный тред [Комплекс загрузочных скриптов boobstrap].

Так вот, я решил пойти немного дальше, и добавил:

boobstrap run --template netboot -- "sleep 5 ; ping 8.8.8.8 -c 10 ; poweroff"

Вам понятно, что делает эта команда?

boobstrap run \
    --template default
    "/root/.ssh/authorized_keys=$HOME/.ssh/id_rsa.pub" \
    "/tmp/add_remote_file=./from_local_file" \
    -- "/etc/rc.d/sshd start"

А так?

boobstrap run --timeout 3600 "/etc/rc.local=./git_clone_and_try_to_build_my_project"

Может быть так понятнее?

Во-первых, это система шаблонов. Указывая, какой шаблон использовать и используя все три утилиты mkbootstrap / mkinitramfs / mkbootisofs, мы собираем кастомный загрузочный ISO, например шаблон netboot, который соберёт самый маленький, базовый CRUX.ISO в 50мбайт.

Во-вторых, в шаблон прямо «на лету» можно добавлять свои файлы в любом количестве. /remote=/local. Например, предустановить ssh-ключ с последующим запуском sshd чтобы хост был сразу доступен после загрузки.

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

А если я ещё добавлю к этому PXE ...........

ставь лайк если тоже поймал флэшбек увидев pxe и многоточие вместе

Я наверное изобретаю велосипед. Или не? Ну это не просто менеджер виртуальных машин, что было бы понятно, а он сперва собирает ISO-образ, в сооветствии с вашей конфигурацией, какую укажете одной командой, а затем выполняет её запуск. Делает полезную работу и может выключиться. Добавить к этому PXE, чтобы дело не огранивалось одним локалхостом, а можно было эти конфигурации физическим хостам отдавать, и вообще красота будет. Да? Да. И всё это — в tmpfs.

Дискач?

 ,

Spoofing
()

Как сделать прозрачный cd для find | cpio?

Форум — General

Пишу скрипт для генерации initrd, там нужно сделать find . | cpio из текущей директории, т.е. обязательно туда зайти, иначе cpio создаст initrd внутри которого будет лишняя директория, файлы будут лежать не в корне initrd как ./init, а как например, ./path/init.

https://github.com/sp00f1ng/boobstrap/blob/master/boobstrap.in#L175-L179

	cd $DIRECTORY
	case $OUTPUT in
		""|"-") find . -print0 | cpio --null --create --format=newc --verbose ;;
		*) find . -print0 | cpio --null --create --format=newc --verbose > $OUTPUT ;;
	esac

Из-за этого cd ломается весь скрипт, потому что когда делается cpio > initrd.img, мы находимся уже в другой директории, не откуда запускался скрипт, соответсвенно пытаясь сделать условный cpio > path/initrd.img, этот path/ находится там, где скрипт запущен, а не там, куда хочет записать cpio.

Что можно придумать в данной ситуации?

И да, всё делается на чистом POSIX shell, без башизмов.

 , ,

Spoofing
()

Собираю Gentoo Desktop Userfriendly

Форум — Linux-install

Только начал, и сразу обнаружил, что у Гентушников оказывается нету сконфигурированного ядра :( Бида-бида, как же мне теперь сделать дистрибутив который будет работать у всех?

Пишу скрипт для автосборки (https://github.com/sp00f1ng/boobstrap/blob/master/linux-autobuild/gentoo-auto...), который будет собирать генту в загрузочный ISO каждые 24 часа с использованием моих утилит (https://github.com/sp00f1ng/boobstrap). Вся настройка производится внутри функции configure, которая выполняется внутри chroot'а. Буду рад любым предложениям, что должен включать в себя «Gentoo Desktop».

Сразу скажу, в Генте я нуб, специфичных вещей не знаю, как раз поэтому считаю необходимым собрать userfriendly дистрибутив, который можно будет использовать как Live для просмотра ютубов.

И сразу вопрос. Конфигурации для ядра чтобы у всех работало, в Генте нету? Ну я тогда включу nouveau, amdgpu и звук, и больше ничего не знаю.

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

 

Spoofing
()

Комплекс загрузочных скриптов boobstrap

Форум — Talks

Это черновой вариант моих скриптов, которые я использую для создания загрузочных BIOS/UEFI ISO-образов с линуксами, которыми я пользуюсь сам для жизни в tmpfs. Тупа рабочий код без проверок и «защит от дурака», только чтобы показать всем как создаются ISO. В следующих версиях уже будут все защиты, все проверки на установленные утилиты и прочая, а пока — просто показываю и прошу ваших советов.

И так, код включает в себя три утилиты:

  • mkbootstrap — утилита аналогична debootstrap, pacstrap, создаёт рабочее окружение в chroot/ директории одной командой.
  • mkinitramfs — утилита создаёт initramfs-образ из директории, подключая chroot/ директории как раздельные «слои» (overlay), используя squashfs для сжатия.
  • mkbootisofs — утилита создаёт из директории загрузочный BIOS/UEFI гибридный образ, который можно записать на CD, DVD или dd'шнуть на USB-флешку.

Для работы всего это безобразия необходимы: grub2/grub2-efi, squashfs-tools, dosfstools, xorriso. В принципе, я считаю это немного, никакой экзотики, удалось обойтись малыми жертвами, ИМХО. Все утилиты надо запускать через boobstrap, т.к. они лежат в одном файле, в будущем сделаю симлинками (или разделю на отдельные файлы).

По порядку.

boobstrap mkbootstrap crux_gnulinux chroot/ --ports-dir /usr/ports/packages [--ports-dir /usr/ports/another] [package name] [...]

Утилита установит все пакеты в заданную chroot/ директорию. Можно указать несколько --ports-dir, можно указать только названия пакетов которые будут найдены в заданных директориях и установлены, например, если вам не нужен весь /usr/ports/core, а только ключевые пакеты, то можно их указать списком. Название crux_gnulinux зарезервированная переменная, в будущем я добавлю поддержку gentoo_gnulinux и других дистрибутивов.

В данный момент утилита не будет работать без pkgadd, чтобы её получить вам придётся скачать CRUX и вытащить её оттуда. Напоминаю, что всё это черновой вариант.

Если вы решились ею воспользоваться, то чтобы она заработала прежде установите pkgadd (если у вас не CRUX):

wget http://ftp.morpheus.net/pub/linux/crux/latest/iso/crux-3.5.iso
mount crux-3.5.iso /mnt/crux-media
tar -xOf /mnt/crux-media/crux/tools/pkgutils#*.pkg.tar.gz usr/bin/pkgadd > /usr/bin/pkgadd
chmod +x /usr/bin/pkgadd

Далее ставим в chroot CRUX одной командой.

mkdir chroot-crux-core/

boobstrap \
  mkbootstrap crux_gnulinux chroot-crux-core/ \
    \
    --ports-dir /mnt/crux-media/crux/core

Если хотим минимальный CRUX, то список пакетов можно перечислить (формат перечисления не важен, я просто для красоты так сделал).

mkdir chroot-crux-core-xtreme/

boobstrap \
  mkbootstrap crux_gnulinux chroot-crux-core-xtreme/ \
    \
    --ports-dir /mnt/crux-media/crux/core \
    \
    acl attr bash bzip2 coreutils dash dhcpcd e2fsprogs elfutils eudev \
    file filesystem findutils gawk glibc grep gzip inetutils iproute2 \
    kbd kmod less libcap libdevmapper libpcre linux-pam lzo ncurses \
    openssh openssl pkgutils procps rc readline shadow start-stop-daemon \
    sysfsutils sysklogd sysvinit tar util-linux wget which xz zlib \
    \
    --ports-dir /mnt/crux-media/crux/opt \
    \
    grub2 grub2-efi

Если хотим вообще всё, то перечисляем все директории без указания пакетов.

mkdir chroot-crux-maximum-edishon/

boobstrap \
  mkbootstrap crux_gnulinux chroot-crux-maximum-edishon/ \
    \
    --ports-dir /mnt/crux-media/crux/core \
    --ports-dir /mnt/crux-media/crux/opt \
    --ports-dir /mnt/crux-media/crux/xorg

Далее.

boobstrap mktinitramfs initramfs/ --overlay overlay-one/ [ --overlay overlay-two/] --output $PWD/initrd

Утилита создаст из директории initramfs/ готовый к употреблению initramfs-образ, в данный момент обязательно требуется указывать --overlay, он же chroot/, в который вы будете загружаться. В будущем я расширю настройки, обязательно сделаю --standalone и другие варианты загрузки прямиком в tmpfs, даже без squashfs, просто tmpfs. Но потом.

Сейчас. В чём суть оверлеев. В chroot/ у нас установлена система, но чтобы её не засорять, мы создадим директорию settings/, куда отдельно складываем все настройки.

Например, я хочу отредактировать файл chroot/etc/rc.local, я не буду делать этого в chroot/, чтобы оставить его «ванильным», а скопирую его в директорию settings/etc/rc.local, отредактирую, и при загрузке initramfs наложит поверх слоя chroot/ ещё один слой settings/, таким образом мы сохраняем ванильную систему ИИИИИ применяем наши настройки поверх неё.

Ду ит. Джаст ду ит.

mkdir initramfs/

boobstrap mkinitramfs initramfs/ \
  --overlay chroot-crux-core-xtreme/ \
  --overlay settings/ \
  --output $PWD/initrd

На выходе получили initrd, в котором лежат два squashfs-образа с chroot-crux-core-xtreme и нашими settings.

Другая ситуация. Мы хотим core отдельно, firefox отдельно, libreoffice отдельно, и, конечно же, наш $HOME отдельно. Только для того, чтобы создать иллюзию порядка в системе, — в конечном счёте все эти слои будут вместе друг на друге, но нам ведь не составит труда удалить или обновить один конкретный слой. Этакий flatpack / snapd на минималках. :)

mkdir initramfs/

boobstrap mkinitramfs initramfs/ \
  --overlay chroot-crux-core/ \
  --overlay chroot-crux-xorg/ \
  --overlay firefox-bin/ \
  --overlay libreoffice/ \
  --overlay fvwm/ \
  --overlay /home/username \
  --overlay /root \
  --output $PWD/initrd

На этом этапе добавив к initrd любое ядро его можно просто загрузить, например, через PXE, но наша с вами цель получить загрузочный ISO, поэтому едем дальше.

boobstrap mkbootisofs directory/ > output.iso

Вот так вот просто, да. Просто берёт просто директорию и всё что в ней есть просто упаковывает в ISO. Просто просто. Не забудьте только положить туда vmlinuz и initrd.

mkdir bootimage/
mkdir bootimage/boot

cp (возьмите где хотите)/vmlinuz bootimage/boot/vmlinuz
cp                      ./initrd bootimage/boot/initrd

boobstrap mkbootisofs bootimage/ > bootable.iso

Можно сразу dd:

boobstrap mkbootisofs bootimage/ | dd of=/dev/sdX status=progress

Давайте ещё один пример приведу.

Gentoo.

1. Скачиваем, распаковываем в chroot

mkdir gentoo-chroot/
wget https://bouncer.gentoo.org/fetch/root/all/releases/amd64/autobuilds/20200605T133220Z/stage3-amd64-20200605T133220Z.tar.xz
tar xf stage3-* -C gentoo-chroot/

2. Упаковываем в initramfs.

mkdir gentoo-initramfs/
boobstrap mkinitramfs gentoo-initramfs/ --overlay gentoo-chroot/ --output $PWD/gentoo-initrd

3. Упаковываем в ISO.

mkdir gentoo-bootimage/
mkdir gentoo-bootimage/boot

cp (возьмите где хотите)/vmlinuz gentoo-bootimage/boot/vmlinuz
cp               ./gentoo-initrd gentoo-bootimage/boot/initrd

boobstrap mkbootisofs gentoo-bootimage > gentoo.iso

4. ?????

5. PROFIT!

Для загрузки в UEFI:

qemu-system-x86_64 \
  -bios $(locate OVMF.fd) \
  -enable-kvm -m 1G -boot d -cdrom gentoo.iso

Для загрузки в BIOS:

qemu-system-x86_64 \
  -enable-kvm -m 1G -boot d -cdrom gentoo.iso

Скриншот: http://dl.voglea.com/boobstrap.png

Скачать: http://dl.voglea.com/boobstrap.html

Ваши пожелания и предложения, кроме как найти себе женщину, приветствуются!

 , ,

Spoofing
()

Как GRUB2 подружить с цветными конями

Форум — General

Разбираюсь с GRUB2, делаю, чтобы, когда загружаешь линуксы через PXE, тебя встречала Флаттершай.

Изначально GRUB2 не хотел вообще работать в графическом режиме. В ответ на background_image выдавал:

error: no video mode activated.

Проблема решается следующей конфигурацией:

insmod all_video
insmod gfxterm
set gfxmode=auto
set gfxpayload=keep
terminal_output gfxterm

При включении графического режима вместо текста вы увидите квадратики. Для решения надо обязательно подключить какой-нибудь шрифт, loadfont unifont.

Теперь вопросы.

Можно ли как-то сообщить GRUB2 перед его загрузкой, какой у меня gfxmode? Допустим, я захочу на телевизоре запустить мультимедиа-дистрибутив, и хочу, чтобы моя Флаттершай была в разрешении 4096x2160. Решение у меня конечно есть, — под каждый хост свой образ, свой GRUB2, соответственно индивидуальная настройка, но интереса ради, имеется ли возможность установить максимально поддерживаемый set gfxmode=4096x2160x32?

Хочу, чтобы конь был не один. Имеет ли GRUB2 поддержку какого-либо рандома? Ну чтобы можно было как-нибудь сделать set theme="/boot/grub/themes/$RANDOM_PONY/theme.txt"

И объясните пожалуйста, как работает search. Потому что оно работает не так, как ожидается.

Дистрибутивы загружаются в UEFI-режиме, что локально, что через PXE, соответственно для UEFI создаются два образа, /EFI/BOOT/BOOTX64.EFI который делается командой:

grub-mkstandalone \
	--format=x86_64-efi \
	--output=./BOOTX64.EFI \
	--modules="" \
	--locales="" \
	--fonts="" \
	--themes="flattershy rainbow pinkiepie"

В него сам GRUB2 складывает все свои модули, ШГ, коней цветных. На выходе получаем EFI-загружаемый файл (типа как ядро с EFI_STUB).

Далее загрузочный BOOTX64.EFI заворачивается в FAT32 раздел.

TMP=$(mktemp -d)

dd if=/dev/zero of=./UEFI.IMG count=8 bs=1M

mkfs.vfat ./UEFI.IMG

mount ./UEFI.IMG $TMP

install -D ./BOOTX64.EFI $TMP/EFI/BOOT/BOOTX64.EFI

umount $TMP
rmdir $TMP

Получившийся UEFI.IMG с конями образ готов.

qemu-system-x86_64 -bios /usr/share/qemu/OVMF.fd UEFI.IMG (скачать попробовать можете отсюда).

Суть в чём.

UEFI.IMG это раздел, на котором хранится BOOTX64.EFI, больше ничего там нет, а уже все файлы GRUB2 хранятся внутри самого BOOTX64.EFI. Это понятно.

В grub.cfg я указываю в самом начале: set theme="/boot/grub/themes/flattershy/theme.txt", и только ПОТОМ уже делаю search --no-floppy --file --set root /boot/vmlinuz-5.7.0.

Нооо проблема в том, что GRUB2 сперва успешно выполняет search, а на set theme ругается, что такой темы оформления нет: конечно её нет, GRUB2 уже переключился на другой раздел, в другой корень (root), и естественно, там этой темы нет и быть не может, она лежит в грабовском BOOTX64.EFI!

Как быть? Я конечно могу установить эти темы рядом с /boot/vmlinuz, но для чистоты картины мне бы всё же хотелось, чтобы GRUB2 загружался, сперва применял все настройки включая цветных коней, а уже только потом чрутался в другой раздел.

Может надо как-то его заставить подождать, прежде чем делать search?

P.S.: пример сборки CRUX/FVWM в котором задействован GRUB2 с конями iso (http://dl.voglea.com/dist/crux_gnulinux/amd64/current/crux-amd64-desktop-x11-...).

 ,

Spoofing
()

CRUX в редакции MATE

Форум — Talks

http://62.109.19.86/dist/crux-amd64-mate.iso

Для тех, кто хотел бы пощупать CRUX, но ставить/разбираться лень. Загрузочный ISO с последними версиями пакетов на момент создания треда. Ядро Linux 5.7 ваниль, я не гарантирую, что оно у всех заведётся, включены только intel, nouveau и amd_gpu, ну и звук ещё. inb4: не умеешь — не берись.

Пишу скрипты для создания образов дистрибутивов и решил поделиться результатами работы.

Там же рядом ещё лежит, http://62.109.19.86/dist/crux-amd64-netboot.iso, минимально возможный CRUX, включающий в себя всего 47 пакетов, только чтобы загрузился и работал в сети.

acl			inetutils		rc
attr			iproute2		readline
bash			kbd			shadow
bzip2			kmod			start-stop-daemon
coreutils		less			sysfsutils
dhcpcd			libcap			sysklogd
e2fsprogs		libdevmapper		sysvinit
elfutils		libpcre			tar
eudev			linux			util-linux
file			linux-pam		vim
filesystem		lzo			wget
findutils		ncurses			which
gawk			openssh			xz
glibc			openssl			zlib
grep			pkgutils
gzip			procps

Ну а вообще, вы хотели бы видеть сборки на основе CRUX?

 , ,

Spoofing
()

От чего может различаться скорость одинаковых SSD?

Форум — Linux-hardware

Два одинаковых SSD kingston A400 120GB

На одном время создания новой ФС занимает 12 секунд, на другом команда выполняется за 2 секунды.

# fdisk -l
Disk /dev/sdb: 111.81 GiB, 120034123776 bytes, 234441648 sectors
Disk model: KINGSTON SA400S3
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xd139cfcf

Device     Boot Start       End   Sectors   Size Id Type
/dev/sdb1  *     2048 234441647 234439600 111.8G 83 Linux


Disk /dev/sdc: 111.81 GiB, 120034123776 bytes, 234441648 sectors
Disk model: KINGSTON SA400S3
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xf1bd474b

Device     Boot Start       End   Sectors   Size Id Type
/dev/sdc1  *     2048 234441647 234439600 111.8G 83 Linux
# time mke2fs -t ext4 /dev/sdb1
mke2fs 1.45.6 (20-Mar-2020)
/dev/sdb1 contains a ext4 file system
	created on Wed Jun  3 15:09:09 2020
Proceed anyway? (y,N) y
Discarding device blocks: done                            
Creating filesystem with 29304950 4k blocks and 7331840 inodes
Filesystem UUID: 062c2b75-634c-4003-8fa9-a5bce4ce8f67
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (131072 blocks): done
Writing superblocks and filesystem accounting information: done   


real	0m12.232s
user	0m0.002s
sys	0m0.016s
# time mke2fs -t ext4 /dev/sdc1
mke2fs 1.45.6 (20-Mar-2020)
/dev/sdc1 contains a ext4 file system
	created on Wed Jun  3 15:09:05 2020
Proceed anyway? (y,N) y
Discarding device blocks: done                            
Creating filesystem with 29304950 4k blocks and 7331840 inodes
Filesystem UUID: 30e38fb4-02e3-4ffa-ba62-d45a74f88c2f
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (131072 blocks): done
Writing superblocks and filesystem accounting information: done   


real	0m2.996s
user	0m0.001s
sys	0m0.012s

 

Spoofing
()

Помогите с написанием скриптов на Bash

Форум — Development

Пишу bootstrap-скрипты на Bash, которые

1) из дистрибутива делают chroot [CRUXSTRAP: в мире полезных утилит прибыло, оцените]

2) из chroot делают образ типа squashfs или любой другой, хоть tar-архив

3) скрипт который создаёт initramfs образ, опционально рядом кладёт образ с системой [Загрузка любого дистрибутива в RAM]

4) и скрипт, который всё это упаковывает в ISO, который могёт в BIOS/UEFI загрузку

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

всё это оттестировано на железках и виртуалках, работает, и мне хотелось бы как-то теперь всё упорядочить, но не знаю как, поэтому взываю к помощи ухо-горло-носа. чтобы не стыдно было поделиться с вами.

поделитесь, какими вы вообще видите названия и метод использования этих скриптов?

ну потому что, можно сделать так, чтобы вообще было типа

dd if=$(mkbootable $(mkinitramfs $(mkchroot $(mktemp -d)))) of=/dev/sdb

забано, но сомнительно. не? а может через bash pipe? а может стандартные mk... --arg --arg --arg?

поделитесь мнением, какие вы вообще желали бы видеть опции использования в таких вот скриптах.

спасибо.

 , ,

Spoofing
()

Предлагаю обсудить главную новость ядра.

Форум — Talks

https://lkml.org/lkml/2020/5/28/1237

Новым стандартом кодинга стало 100 символов в ширину. Линус разрешил.

Да-да, очень смищьно, но тем не менее. При запуске все эмуляторы терминалов, даже в DE, имеют соотношение 80х24, кто-то специально это настраивает? Нет, просто стандарт. А теперь его так вот грубо ломают.

Или как там он говорил... curl https://lkml.org/lkml/2012/12/23/75 | grep WE\ DO\ NOT\ BREAK.

Ну такое себе короче.

В тред так же приглашается главный специалист по таким вопросам saahriktu.

P.S.: прошу обратить внимание, что сообщение было отредактировано не мной. если в данном сообщении вы увидите оскорбления или ещё какую непотребщину, то скорее всего, это модераторы, пользуясь служебным положением, оставляют свои сообщения от имени пользователя.

 ,

Spoofing
()

Посоветуйте в какие DLC поиграть

Форум — Talks

Основной контент GNU/Linux пройден, все локации открыты практически на 100%, опробованы так же различные игровые клиенты. Даже в подземелье к центру ядра спускался!

Квесты по типу домен+почта+сайт пройдены не один десяток раз, сам себе сложности придумывал чтобы было интереснее проходить их в очередной раз. Основной контент хоть и обновляется, — дейлики нужно выполнять хотя бы еженедельно, следить за новостями и накатывать обновления, ну это такое себе, дело тривиальное.

Профессии типа «вебмастер», «админ», «мейнтейнер» изучил, для ПвЕ мне достаточно. Маунта одного приручил, tmpfs, его хватает для основного контента, других пока не рассматриваю, — в RAIDы вот ещё не ходил, говорят zfs самый сложный маунт.

Вроде весь контент доступен, а заняться толком нечем.

Я думаю попробовать различные DLC, типа NextCloud, Minecraft Server, Matrix, Mastodon инстанс.

Сразу скажу, что ПвП не люблю, поэтому всякие там TOR не предлагать.

Посоветуйте, в какие DLC поинтереснее можно покатать?

 ,

Spoofing
()

Чем можно зашифровать tmpfs?

Форум — Security

В QEMU есть замечательная команда dump-guest-memory по протоколу qmp, так что даже линукс работающий в tmpfs выдаст всё своё содержимое. В связи с чем возникает вопрос. Чем можно зашифровать tmpfs?

Какие вообще есть средства в Linux, чтобы шифровать всю память в принципе? Это должно быть что-то очень низкоуровневое, чтобы наверняка. Где вообще гарантия, что все явки-пароли в памяти не утекут от простого dump гостевой ОС?

 , ,

Spoofing
()

RSS подписка на новые темы