LINUX.ORG.RU

Леннарт Поттеринг представил mkosi, инструмент для генерации образов ОС

 


3

4

Следом за casync, Леннарт Поттеринг представил ещё один свой проект — mkosi (Make Operating System Image).

mkosi предназначен для генерации загрузочных образов операционных систем, представляющий собой обёртку над утилитами dnf --installroot, debootstrap, pacstrap и zypper.

Поддерживается создание образов на базе дистрибутивов Fedora, Debian, Ubuntu, Arch Linux, openSUSE. Созданный образ можно запустить из контейнера командой «systemd-nspawn -b -i image.raw».

mkosi позиционируется как legacy-free, т. е. программа поддерживает только актуальные на сегодняшний день технологии. Это означает поддержку только таблиц разделов GPT (и отсутсвие поддержки MBR), возможность генерации образов, основанных только на systemd, и генерацию только для загрузки на системах с поддержкой EFI (не MBR/BIOS).

Проект написан на языке python, распространяется под лицензией LGPL-2.1.

Репозиторий на github — https://github.com/systemd/mkosi.

>>> Подробности



Проверено: Shaman007 ()
Последнее исправление: JB (всего исправлений: 3)

Да отнимите же у этого поттера волшебную палочку. Он нас всех угробит.

anonymous
()
Ответ на: комментарий от kawaii_neko

Я проявлю настойчивость: приведи контрпример.

Чего? Ты упоротый?
Контрпример к чему?
Это просто плохой стиль, определять-то оно будет, но может спровоцировать баги типа (когда ему переписать захочется):

for ext in (".tar", ".tgz", ".squashfs"):
    if file_name[:4] == ext:
        …

А потом он найдёт такой баг и накостылит, а потом опять, вместо того, чтобы написать нормально, как показали выше.

awesomelackware
() автор топика
Ответ на: комментарий от anonymous

Где оное микрософтина?

По качеству. Что у тех сделано с миллиардом допущений, что у это ребятишки.

nihirash ★★★
()
Ответ на: комментарий от awesomelackware

Это просто плохой стиль

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

goingUp ★★★★★
()
Ответ на: комментарий от goingUp

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

Предлагаю это сделать девизом винды.

hint: плохой код — больше багов.

awesomelackware
() автор топика
Ответ на: комментарий от goingUp

Твоя реальность весьма нереалистична. Ведь из-за этого мы и не юзаем вантуз.

batya
()
Ответ на: комментарий от Weres

Чего употребляем?
Вот из исходников mkosi:

def strip_suffixes(path):
    t = path
    while True:
        if t.endswith(".xz"):
            t = t[:-3]
        elif t.endswith(".raw"):
            t = t[:-4]
        elif t.endswith(".tar"):
            t = t[:-4]
        else:
            break

return t

awesomelackware
() автор топика
Ответ на: комментарий от RazrFalcon

Для скриптоты это как раз норм. Проще тагять один файл, чем десяток.

На этот случай существуют директории.

anonymous
()
Ответ на: комментарий от Weres

Так и должно быть.
Это был пример бага, который может случится при неосторожном юзанье [:-4], а ты вообще сообщение не читаешь, видимо.

awesomelackware
() автор топика
Ответ на: комментарий от Shadow
import argparse
import configparser
import contextlib
import ctypes, ctypes.util
import crypt
import getpass
import hashlib
import os
import platform
import shutil
import stat
import subprocess
import sys
import tempfile
import time
import urllib.request
import uuid


Да вроде без.

awesomelackware
() автор топика
Ответ на: комментарий от kawaii_neko

Ох ты ж, я неправильно сформулировал:

Ты не поверишь, но оно будет правильно определять (но только трёхбуквенное).

awesomelackware
() автор топика
Ответ на: комментарий от awesomelackware

Ох ты ж, я неправильно сформулировал

Ленарт берет последние четыре буквы, чтобы проверить только расширение .tgz, для остальных расширений выбираются отдельно N последних букв — он делает правильно, но неэффективно.

kawaii_neko ★★★★
()
Ответ на: комментарий от kawaii_neko

Я уже выше написал, к чему это может привести.

он делает правильно

У меня для тебя плохие новости.
Что, новому расширению — новый elif!

awesomelackware
() автор топика
Ответ на: комментарий от expelled

Принимается.

Тогда хотя бы так:

def strip_suffixes(path):
    EXTS = (".xz", ".raw", ".tar")
    while any(path.endswith(x) for x in EXTS):
        path = os.path.splitext(path)[0]
    return path

Вообще по уму, оно ещё и делает не то, как называется. Получается лапша — видя где-нибудь strip_suffixes(path), думаешь, что оно любые расширения отсекает, приходится лезть в код фукнции, чтобы узнать какие. Эти суффиксы бы не внутри задавать хорошо. Как-нибудь так:

def strip_suffixes(path, *suffixes):
    filename, ext = os.path.splitext(path)
    if ext not in suffixes:
        return path
    return strip_suffixes(filename, *suffixes)

Ну или без рекурсии через while по вкусу:

def strip_suffixes(path, *exts):
    while any(path.endswith(x) for x in exts):
        path = os.path.splitext(path)[0]
    return path

И вызывать соответственно как strip_suffixes(path, ".tar", ".xz", ".raw"). Было бы гораздо логичнее.

Psych218 ★★★★★
()
Последнее исправление: Psych218 (всего исправлений: 3)
Ответ на: комментарий от batya

32 года. Всяким говном «потому что модно» не пользуюсь.

dzidzitop ★★
()
Ответ на: комментарий от BceM_IIpuBeT

Когда-то не смог поставить с флешки седьмой дебиан на UEFI/GPT. А связка BIOS/MBR работает и каши не просит. Мифические преимущества GPT для моего компьютера неприменимы в принципе. А давиться UEFI не буду.

dzidzitop ★★
()
Ответ на: комментарий от dzidzitop

GPT можно использовать и на legacy-BIOS.

Мифические преимущества

Таблица в начале и в конце, 128 разделов, нету extended разделов.

BceM_IIpuBeT ★★☆☆☆
()
Ответ на: комментарий от awesomelackware

Контрпример к чему?

Читд: ты не посмотрел в код Леннарта, где он чинно-благородно сравнивает отдельный слайс для каждого расширения, но взял какую-то хреноту от местного питониста и распространил на нее свои заблуждения (see Леннарт Поттеринг представил mkosi, инструмент для генерации образов ОС (комментарий))

Найс траллинг аттемпт. 1/10 за старание.

kawaii_neko ★★★★
()
Ответ на: комментарий от kawaii_neko

Слишком толсто.
Я выше этот самый код Леннарта, но ты же не читаешь.

def strip_suffixes(path):
    t = path
    while True:
        if t.endswith(".xz"):
            t = t[:-3]
        elif t.endswith(".raw"):
            t = t[:-4]
        elif t.endswith(".tar"):
            t = t[:-4]
        else:
            break

return t

А, я понял, это выше вот не Леннарт написал.
Что ещё придумаешь, чтобы его оправдать?

awesomelackware
() автор топика
Ответ на: комментарий от BceM_IIpuBeT

1) У меня не больше трёх разделов на каждом HDD

2) Таблицы в начале в конце мне надёжности не добавят. Пользуюсь бэкапами. А то, что заголовок битого диска прочитается, восстановление данных сильно не упростит.

3) Extended разделы - просто разделы. Мне они не мешают.

Но если у меня появятся винты на 3-4 TB, то, из-за ограничений MBR на размер раздела, может и будет GPT на них.

А на системном HDD играться без причины не буду.

dzidzitop ★★
()
Последнее исправление: dzidzitop (всего исправлений: 1)
Ответ на: комментарий от awesomelackware

А, я понял, это выше вот не Леннарт написал.

Это написал Леннарт и оно работает всегда (ты согласился, что для файла '.tgz' считать '.tgz' расширением — это ок).

Код подвержен проблемам копипасты и опечатки — да, но он работает всегда.

kawaii_neko ★★★★
()
Ответ на: комментарий от kawaii_neko

Код подвержен проблемам копипасты и опечатки — да, но он работает всегда.

Предлагаю это сделать вторым девизом венды.

Ну ты прям толст-толст, шёл бы отсюда.

awesomelackware
() автор топика
Ответ на: комментарий от awesomelackware

Предлагаю это сделать вторым девизом венды.

Какой бы не был код винды, он решает свои задачи и стоит значительно дороже, чем жастфофан-поделки любого из участников этого треда (надеюсь, Линуса среди нас нет)

Ну ты прям толст-толст, шёл бы отсюда.

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

kawaii_neko ★★★★
()
Ответ на: комментарий от kawaii_neko

Какой бы не был код винды, он решает свои задачи и стоит значительно дороже, чем жастфофан-поделки любого из участников этого треда (надеюсь, Линуса среди нас нет)

Ахахаха.

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

Что? «Шпервадобейся»? Толстота-а-а-а.

Дальше я твои сообщения в этом треде игнорирую, общаться с поттерингофилом, который готов на всё ради своего властелина, бессмысленно.

awesomelackware
() автор топика
Ответ на: комментарий от kawaii_neko

Какой бы не был код винды, он решает свои задачи

Судя по недавней ддос атаке на укр. правительственные органы — не только свои.

BceM_IIpuBeT ★★☆☆☆
()

Мне кажется, что Леннарт нормальный, просто он троллит всё сообщество. Он понимает, что 99% безграмотных линуксоидов его говноподелия все схавают, а 1% будут срать терабайтами бугуртов на линуксовых форумах. Может он прям сейчас читает ЛОР и ржёт со всех нас.

anonymous
()
Ответ на: комментарий от awesomelackware

Говнокод — это не приговор. Огромное количество свободного софта имеет такие исходники, что без поллитры не разберёшься. Но тут же Поттеринг, грех не поругаться, правда?

Deleted
()

Уязвимости надо пилить или как обычно, в комплекте?

queen3 ★★★★★
()
Ответ на: комментарий от Virtuos86

Нет. С тем же успехом там используются и debootstrap/apt-get для Ubuntu и Debian, zypper для OpenSUSE и pacstrap/pacman для archlinux. Думаю, что основной причиной является то, что отладка этой утилиты происходит в основном под федорой.

Под убунтой, например, ничего не работает сразу по двум причинам:

1. Для Debian и Ubuntu используется один и тот же шаблон вызова debootstrap. В этом вызове есть аргумент --merged-usr, который в убунтовской версии просто отсутствует;

2. Неверный алгоритм определения релиза приводит к тому, что моя Ubuntu 17.04 определяется именно как «17.04», что и передаётся debootstrap. debootstrap такого релиза не знает, ему нужно передавать «zesty»

Deleted
()
Ответ на: комментарий от Deleted

Говнокод — это не приговор. Огромное количество свободного софта имеет такие исходники, что без поллитры не разберёшься

Я сказал, что этим проектам можно, а Поттерингу — нет? Нет, я такого не говорил, упырь мел.

awesomelackware
() автор топика
Ответ на: комментарий от kawaii_neko

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

Можно я?

https://github.com/NightmareZ/MakarovPhysics

https://github.com/NightmareZ/FlowchartBuilder

Bahamut
()
Ответ на: комментарий от awesomelackware

Я сказал, что этим проектам можно, а Поттерингу — нет?

Нет, но именно ты был тем, кто триггернулся на мой коммент.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.