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)
Ответ на: комментарий от awesomelackware

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

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

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

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

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

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

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

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

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

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

Потом автора хочется малость убить, но это мелочи, да?

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

Потом автора хочется малость убить, но это мелочи, да?

За 1024*1024*1024 или за [:-4]? Это уже перфекционизм на грани невроза.

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

За 1024*1024*1024 или за [:-4]? Это уже перфекционизм на грани невроза.

Да, я перфекционист. Но я это осознаю и могу контролировать.

Я скорее всего взял бы и сохранил в переменную(возможно однобуквенную) возведение 2 в 30 степень без пояснение.

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

Мне не нравится то как тут ищут расширение. С высокой вероятностью есть библиотечный метод для этой цели. Зачем велосипедить? Откуда взялась цифра 4? Где гарантия того что сюда не придёт однажды что-то отличное от 4? Почему не искать последнюю точку? Там есть код который паникует в случае чего, говоря о том что расширение не верное?

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

Я скорее всего взял бы и сохранил в переменную(возможно однобуквенную) возведение 2 в 30 степень без пояснение.

Вот ты сделал бы так, Psych218 возвел бы 1024**3, Поттеринг написал 1024*1024*1024. Кто же из вас прав? А разгадка-то проста, проблема сама по себе не стоит и выеденного яйца.

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

Вот ты сделал бы так, Psych218 возвел бы 1024**3, Поттеринг написал 1024*1024*1024. Кто же из вас прав? А разгадка-то проста, проблема сама по себе не стоит и выеденного яйца.

Мне не принципиально возведение в степень. Я уже изложил то что мне не нравится.

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

Вот ты сделал бы так, Psych218 возвел бы 1024**3, Поттеринг написал 1024*1024*1024.

Проблема не в том, какой из двух вариантов выбрать. Просто хорошо бы выбрать один, раз уж взялись писать «магические числа». Или оба раза 1024*1024*1024 или оба раза 1024**3. В одном участке кода так очевиднее. Это само по себе мелочь, но там весь код такого уровня.

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

def format_bytes(size):
    if size < 1:
        return "{:0.1f}B".format(size)
    units = "BKMGT"
    for p in range(len(units)-1, -1, -1):
        if size >= 1024**p:
            return "{:0.1f}{}".format(size / 1024**p, units[p])
и в случае желания добавить бóльшие единицы, просто дописывать их в конец units (можно заменить строку на список и исользовать не однобуквенные), а не дописывать новый if с копипастой return'а каждый раз. Хотя первый return я бы переписал, чтобы возвращалось целое число без точки, если меньше килобайта, потому что дробные байты в данном случае вряд ли что-то нормальное (но тут не уверен, может там и дробные норма каким-то образом).

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

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

Код говно. По пунктам:

  1. глядя на него не сразу понимаешь, что тут вообще творится
  2. идентификатор для «Bytes» дублируется
  3. неэффективно — присутствует операция возведения в степень (которая делается аж 5 раз, чтобы нарисовать байтики, которые могут быть очень частым кейсом!)
kawaii_neko ★★★★
()
Ответ на: комментарий от Bahamut

Можно добавить кеширование

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

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

Код говно

Возможно. Но оригинальный код как минимум не лучше.

глядя на него не сразу понимаешь, что тут вообще творится

Всё же понятнее, чем в оригинале.

идентификатор для «Bytes» дублируется

Один раз. В оригинале трижды. Как сделать лучше?

неэффективно — присутствует операция возведения в степень (которая делается аж 5 раз, чтобы нарисовать байтики, которые могут быть очень частым кейсом!)

Она делается не обязательно 5 раз, а до момента, пока не найдётся нужное. Собственно, как и в оригинале (множественное умножение не быстрее возведения в степень). Да, можно сделать там например {1024: «K», 1048576: «M», 1073741824: «G».....}, но это преждевременная оптимизация и экономия на спичках (если бы такие оптимизации требовались, писалось бы вообще не на питоне), к тому же, повторю, в оригинале этого тоже нет, есть куча ифов с 1024*1024*1024, что абсолютно в той же степени неэффективно.

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

И чем же тебе не угодил такой подход?

Зачем думать, как число фибоначчи за O(n), если можно взять момоизацию и наивный экспоненциальный алгоритм порхать как бабочку?

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

множественное умножение не быстрее возведения в степень

У тебя на каждой итерации возведение в степень. Это точно медленнее перемножения целых.

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

Вот за что люблю скриптовиков, так это за подобные пассы: «Ну у меня язык тормозной, так что N или N² не шибко заметно будет»

куча ифов с 1024*1024*1024

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

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

Зачем думать, как число фибоначчи за O(n)

а не O(log n) ? таки допускает представление: матрица [1 1; 1 0] ^ n

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

Проблема не в том, какой из двух вариантов выбрать. Просто хорошо бы выбрать один, раз уж взялись писать «магические числа». Или оба раза 1024*1024*1024 или оба раза 1024**3. В одном участке кода так очевиднее. Это само по себе мелочь, но там весь код такого уровня.

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

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