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.

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

программа поддерживает только актуальные на сегодняшний день технологии

генерацию только для загрузки на системах с поддержкой EFI

Выходит, что системы на C2D и подобные уже неактуальны? Кто-то зажрался.

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

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

mittorn ★★★★★ ()

Нужность, конечно, сомнительна, но этот проект по крайней мере безобидный.

if bytes >= 1024*1024*1024:
    return "{:0.1f}G".format(bytes / 1024**3)

1024*1024*1024

1024**3

Это специально, чтобы приостановиться секунд на 10 и подумать, почему написано один раз так, а другой так, мол раз так написали, значит зачем-то надо?

return loopdev + "p" + str(partno)

Расскажите ему про .format()

def luks_format_home(args, loopdev, run_build_script, cached):

    if args.encrypt is None:
        return
    if args.home_partno is None:
        return
    if run_build_script:
        return
    if cached:
        return

    with complete_step("LUKS formatting home partition"):
        luks_format(partition(loopdev, args.home_partno), args.passphrase)

def luks_format_srv(args, loopdev, run_build_script, cached):

    if args.encrypt is None:
        return
    if args.srv_partno is None:
        return
    if run_build_script:
        return
    if cached:
        return

    with complete_step("LUKS formatting server data partition"):
luks_format(partition(loopdev, args.srv_partno), args.passphrase)

А нельзя это «home» и home_partno просто как один из аргументов передавать было, смысл копипастить-то?

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

Да уж… А если потом решит ещё 50 форматов поддерживать, тоже каждому по elif и t = [t:-4] напишет? В чём проблема такого подхода:

def strip_suffixes(path):
    t, suffix = path.rsplit('.', 1)
    if suffix in ("xz", "raw", "tar"):
        return t
    return path

Psych218 ★★★★★ ()

представляющий собой обёртку над утилитами dnf --installroot, debootstrap, pacstrap и zypper.
Это означает поддержку только таблиц разделов GPT (и отсутсвие поддержки MBR), возможность генерации образов, основанных только на systemd, и генерацию только для загрузки на системах с поддержкой EFI (не MBR/BIOS).

В общем суммируя - на хрен ненужный очередной костыль.

cheez ★★ ()

возможность генерации образов, основанных только на systemd

Наверно хочет вытеснить остальные утилиты, чтобы можно было генерить только линукса на systemd и остальные немногие совсем исчезли!

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

Да уж… А если потом решит ещё 50 форматов поддерживать, тоже каждому по elif и t = [t:-4] напишет? В чём проблема такого подхода:

проблема в том, что он учит питон и ещё не знает про os.path. а на системд он стало быть учил си, или на чём то поделие написано.

path, ext = os.path.splitext(path)

не говоря уже о том, что strip_suffixes() не делает то, что заявлено и не отрезает расширение файла если это не .xz, .raw или .tar.

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

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

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

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

alwayslate ()

Что из чего

Я не понял, что у этого сценария на входе и что он выдаёт?

Из чего генерится образ? Из репозитерия пакетов? Из имеющейся установки ОС?

Результат работы можно только в контейнере запускать? Или можно запустить на железе? Если последнее, то почему это «генератор образов», а не установщик?

Camel ★★★★★ ()

Надо давно поймать Поттеринга было. А то на следующем этапе он станет переписывать systemd на Питоне с использованием только греческих букв с диакритикою.

Vudod ★★★★★ ()
Ответ на: Что из чего от Camel

Re: Что из чего

Из чего генерится образ? Из репозитерия пакетов? Из имеющейся установки ОС?
dnf --installroot, debootstrap, pacstrap and zypper

Как вот эти пареньки генерят, так оно и должно.

Результат работы можно только в контейнере запускать?
systemd-nspawn -bi image.raw

Можно в контейнере.

Или можно запустить на железе?
qemu-kvm -m 512 -smp 2 -bios /usr/share/edk2/ovmf/OVMF_CODE.fd -drive format=raw,file=image.raw

Раз в qemu можно, то можно и на железе.
Да и не зря в новости про EFI.

Если последнее, то почему это «генератор образов», а не установщик?

Потому что может генерить готовые образы, а не рутфс, не?

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

Может он разработчик на каком-нибудь другом сложном и крутом ЯП, а питон для галочки за пару недель выучил. Потому что иначе, я завысил представление о навыках профессионального питонщика и надо было вкатываться туда, а не туда где я сейчас (хотя я не жалуюсь)

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

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

правильный вопрос был задан: «почему его никто не остановит». в редхате некому проконтролировать его работу или что?

anonymous ()

Кстати, забыли intelfx.

А по делу — ненужно, я и без такой штуки спокойно делал образы, зачем мне это поделие, если аффтар считает, что [:-4] для определения расширения — норма?

awesomelackware ()

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

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

ecko ★★★★ ()

«Только для актуальных технологий» в данном случае значит, что кроме этой штуке вам один хрен придётся сделать всё то же самое, но другим инструментом. Это просто для того, чтобы образ потом где нибудь развернулся.

kirill_rrr ★★★★★ ()

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

сижу на BIOS/MBR/sysvinit и этого неугомонного лёньку шлю вслед за всеми его поделиями.

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

Да хоть на JS. Вынесение кода в обособленные логически связанные и обозримые модули удешевит поддержку и ускорит вход для новых разработчиков. Две с лишним тысячи строк это уже перебор для скрипта.

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

Особенно если учесть, что написание этого вброса мы обсуждали вместе.

ЗЫ: Новость сама по себе вброс, и это хорошо. У неадекватов так горит лишь от упоминания Леннарта. Интересно, почему?

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

аффтар считает, что [:-4] для определения расширения — норма?

Будь любезен, прокомментируюй, почему [:-4] == '.tgz' может не определить расширение .tgz? (спойлер: кому не плевать на файл «.tgz»?)

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

Будь любезен, прокомментируюй, почему [:-4] == '.tgz' может не определить расширение .tgz? (спойлер: кому не плевать на файл «.tgz»?)

Ты не поверишь, но оно может.
Выше уже показали как сделать нормально, но ты же тред-то не читал.

awesomelackware ()