вторник, 9 ноября 2010 г.

sade - редактор диска, часть 6.

Вчера сделал MFC в stable/8 последних изменений в gpart. Теперь в грядущем релизе 8.2-RELEASE будут и возможность уничтожения таблицы без необходимости удаления всех её разделов, и восстановление повреждённой GPT. На ближайшее будущее новых идей относительно gpart вроде больше нет. Поэтому потихоньку вернулся к sade.

Первым делом привёл всё к работоспособному виду. На данный момент, работать оно может только в 9.0-CURRENT из-за некоторых изменений, о которых я уже раньше писал. Затем, перелопатил весь код работы с файловыми системами, который приводил меня в уныние. Я отказался от идеи сделать какой-то универсальный интерфейс frontend-backend, который изначально пытался делать. Пока из-за отсутствия опыта работы с различными FS у меня не вырисовывается стройной картины того, как можно эту работу "универсально" организовать.

Решил начать с малого. Переписал редактор файловых систем, теперь он предназначен для работы с UFS и весь код этой самой работы сосредоточен в файле ufsed.c. Что уже сдеалано: основное окно редактора предоставляет возможность посмотреть список найденных разделов с типом freebsd-ufs (в терминалогии gpart). При навигации по этому списку отображается информация о файловой системе, если она имеется на этом разделе, примерно вот так это выглядит:
Логика такая. Что делал пользователь, когда у него не было sade? :) Он действовал по такому алгоритму:
  1. Создание таблицы разделов;
  2. Создание слайса FreeBSD;
  3. Создание разметки bsdlabel;
  4. Создание файловой системы;
  5. Сохранение информации о ней в /etc/fstab.
Я решил придерживаться этого алгоритма внутри sade. Запустив sade, заходим в редактор разделов и выбираем из списка устройство, на котором создаём таблицу разделов, внутри неё создаём слайсы. Внутри слайса, если у него тип "freebsd" создаём таблицу BSD и размечаем разделы, выбирая "freebsd-ufs" или "freebsd-swap". Этим редакотором покрываются  первые 3 пункта + возможность записи загрузочного кода.
 Далее мы сохраняем всё что насоздавали в редакторе разделов, выходим в главное меню и заходим в редактор файловых систем. Там видим выше указанное окно. Сейчас у нас есть возможность создать новые файловые системы либо изменить уже существующие. Диалог создания файловой системы:
Простейшую историю команд я реализовал, т.е. теперь любые действия не выполняются немедленно, а сохраняются в историю, которая применяется во время сохранения изменений, либо откатывается полностью. В общем-то, так же, как и в редакторе разделов.
Для существующих файловых систем можно выбрать команду "Modify", которая открывает следующий диалог:
По сути этот диалог является UI для утилиты tunefs. А предыдущий - для newfs. На данный момент редактор не делает никаких изменений, т.е. команды записываются в историю, но не выполняются, даже при сохранении. Нужно обдумать как это более правильно сделать. 
Дальше планирую сделать возможность редактировать fstab, ну и, собственно, само сохранение изменений.

7 комментариев:

  1. пользовался sade(8) в FreeBSD 8.2-BETA1.
    Хорошая штука, только кое-что не понравилось

    ОтветитьУдалить
  2. Этот sade пока не входит в состав базовой системы, так что то, чем вы пользовались, это всего лишь вырезанный из sysinstall функционал...

    ОтветитьУдалить
  3. круто, значит будем ждать =)

    ОтветитьУдалить
  4. ну что, когда будет в базе? =)

    ОтветитьУдалить
  5. Пора выкатывать новый sade, мне кажется. Там в рассылке превью bsdconfig, и неплохо было бы там вместо нанешнего заюзать ваш sade

    ОтветитьУдалить
  6. Да, я вспоминаю про него с ностальгией :)
    Но вот какая дилема:
    1. Из базы выкинута поддержка старой libdialog, а у меня всё на неё завязано. Переделывать на новую libdialog - это выкинуть половину всего кода, и четверть ещё переделать заново :)
    Это я ещё глубоко не разбирался с новой библиотекой и не могу точно ответить, получится ли там сделать такие же удобные (как сейчас уже сделаны) диалоги.
    2. У нас уже имеется parted из комплекта bsdinstall. Который в общем-то вполне справляется с возложенными на него задачами.

    Вот. И как-то нужно решить "нужно ли оно нам" vs. "потратить столько времени" на всё это :)

    ОтветитьУдалить
  7. > 2. У нас уже имеется parted из комплекта bsdinstall. Который в общем-то вполне справляется с возложенными на него задачами.

    В смысле bsdinstall partedit?

    > И как-то нужно решить "нужно ли оно нам" vs. "потратить столько времени" на всё это :)
    Да, наверное, не стоит тогда трогать его. Скорей пилить существующие решения

    ОтветитьУдалить