Давненько я ничего сюда не писал. В связи с ремонтом в квартире всё никак не могу найти времени..
Итак, к чему такой subj? Май прошёл для меня плодотворно. Не только в связи с ремонтом в квартире, который проходит, на мой взгляд, ударными темпами, но и из-за событий связанных со мной и FreeBSD. 3-го июня меня "наказали" коммит битом в дерево src. Теперь я официально стал src-коммитером FreeBSD. :-)
Длилась эта процедура чуть больше месяца. Всё началось с предложения Константина (kib@) стать коммитером, на которое я дал согласие. Затем он написал обращение в FreeBSD Core Team с предложением "наказать" меня за мои деяния. На что core@ дало согласие. Моими менторами стали Константин Белоусов (kib@) и Александр Мотин (mav@). Далее последовали создание аккаунта на кластере freebsd.org и первые, традиционные коммиты.
Менторы курируют начинающих разработчиков. Советуясь с ними я должен освоить основные правила, которые применяются в проекте. Ну и главное, я должен согласовывать с ними все изменения, которые я собираюсь вносить в дерево исходных кодов FreeBSD. У меня два ментора. Причина в том, что сфера моих интересов слабо пересекается с интересами моих менторов. В качестве своих интересов я обозначил: подсистемы ядра GEOM, ATA, IPFW и файловые системы. Вот этим и буду заниматься в ближайшем будущем. Так же, я планирую перевести разработку sade в svn репозиторий FreeBSD. Так будет и мне проще, да и вдруг, кто-то решит помощь оказать?
понедельник, 7 июня 2010 г.
четверг, 29 апреля 2010 г.
sade - редактор диска, часть 5.
Немного новостей о ходе работы. Марсель закоммитил два исправления, о которых я упоминал ранее. Теперь, вроде бы нет препятствующих разработке багов.
Я же выделил код и объявления структур и функций для работы с устройствами, партициями и файловыми системами в отдельную группу файлов. Позже оформлю их в виде библиотеки. Написал код для получения информации о файловых системах и сохранения его в список, которой используется внутри редактора файловых систем. Сделал базовую реализацию редактора, пока что он отображает список партиций имеющих тип freebsd-swap и freebsd-ufs:
На список команд не обращайте внимание, это copy-paste из редактора партиций. В принципе, кроме того что видно в списке сейчас, информационная структура хранит ещё данные о том смонтирована ли файловая система и опции монтирования из /etc/fstab.
Сделал так же проверку на наличие меток glabel, под которыми данное устройство может быть смонтировано или записано в fstab. Правда пока эта проверка достаточно формальная, потому как перебрать все возможные метки какие могут быть - достаточно нетривиальная задача.
Дальше буду думать, какие команды добавить в этот редактор и потихоньку их реализовывать.
Ещё надо что-то придумать с механизмом commit/undo для этого редактора. Небольшой набросок механизма ведения истории действий с возможностью отката и сохранения я сделал, но ясной картины как я буду его использовать пока нет.
Я же выделил код и объявления структур и функций для работы с устройствами, партициями и файловыми системами в отдельную группу файлов. Позже оформлю их в виде библиотеки. Написал код для получения информации о файловых системах и сохранения его в список, которой используется внутри редактора файловых систем. Сделал базовую реализацию редактора, пока что он отображает список партиций имеющих тип freebsd-swap и freebsd-ufs:
На список команд не обращайте внимание, это copy-paste из редактора партиций. В принципе, кроме того что видно в списке сейчас, информационная структура хранит ещё данные о том смонтирована ли файловая система и опции монтирования из /etc/fstab.
Сделал так же проверку на наличие меток glabel, под которыми данное устройство может быть смонтировано или записано в fstab. Правда пока эта проверка достаточно формальная, потому как перебрать все возможные метки какие могут быть - достаточно нетривиальная задача.
Дальше буду думать, какие команды добавить в этот редактор и потихоньку их реализовывать.
Ещё надо что-то придумать с механизмом commit/undo для этого редактора. Небольшой набросок механизма ведения истории действий с возможностью отката и сохранения я сделал, но ясной картины как я буду его использовать пока нет.
пятница, 23 апреля 2010 г.
gpart resize - лёд тронулся.
Ну вот, переодическое "капанье на мозг" :-) дало первые результаты. Marcel закоммитил мой патч, добавляющий поддержку изменения размера провайдеров внутри схемы. Константин Белоусов (kib@) посоветовал не забыть через некоторое время напомнить ему сделать MFC. Думаю недельки через 3-4 можно будет начинать "напоминать" :-)
А пока, отправил ему письмо с благодарностью и ссылками на следующие два патча :-)
А пока, отправил ему письмо с благодарностью и ссылками на следующие два патча :-)
gpart recover - восстановление таблицы GPT
Когда я писал патч для изменения размеров партиций, я пытался решить свою задачу, что, в принципе, мне удалось. Тут в списке рассылки freebsd-geom@ появился человек, заинтересованный в изменении размера носителя, на котором находится схема GPT. У него используется RAID контроллер, который позволяет наращивать дисковое пространство, что-то вроде `zpool attach`. Вставил ещё диск, подключил его к рейду и вот - у тебя уже больше свободного места. Проблема только в том, что GPT хранит две копии метаданных - в начале диска и в конце.
Соответственно, после увеличения размера носителя, вторая копия будет находится уже не в конце и система при подключении этой GPT схемы выдаст в лог такие строчки:
Соответственно, после увеличения размера носителя, вторая копия будет находится уже не в конце и система при подключении этой GPT схемы выдаст в лог такие строчки:
GEOM: md0: the secondary GPT table is corrupt or invalid. GEOM: md0: using the primary only -- recovery suggested.Но, на данный момент, штатной возможности восстановить метаданные нет. Она есть в планах на wiki.freebsd.org. И я уже спрашивал Марселя о том, что он думает на этот счёт, но ответа не получил. Поэтому немного почитав код реализации схемы GPT, сделал набросок патча, который помимо восстановления метаданных позволяет выполнять такую "махинацию" с изменением размера носителя. Патч и пример использования можно посмотреть тут.
четверг, 22 апреля 2010 г.
sade - редактор диска, часть 4
После небольшого перерыва решил продолжить эпопею с sade.
От marcel@ по прежнему тишина, поэтому думаю придётся отказаться от использования geom_part.so в пользу libgeom. В связи с этим предстоит частичное дублирование кода из geom_part.so у себя. В основном это будет код записи загрузочного кода и автоподбора параметров. Но зато стандартно и без лишних костылей...
После непродолжительных обсуждений в IRC и некоторого обдумывания придумал, как примерно будет выглядеть интерфейс для работы с ZFS и создания файловых систем. К тому же решил, что будет полезной возможность создания RAID при помощи GEOM классов. Поэтому добавил главное меню, в котором пока 3 пункта:
Пока что работает только второй, но дело сдвинулось с мёртвой точки.
По моей логике работа с sade будет выглядеть примерно так:
От marcel@ по прежнему тишина, поэтому думаю придётся отказаться от использования geom_part.so в пользу libgeom. В связи с этим предстоит частичное дублирование кода из geom_part.so у себя. В основном это будет код записи загрузочного кода и автоподбора параметров. Но зато стандартно и без лишних костылей...
После непродолжительных обсуждений в IRC и некоторого обдумывания придумал, как примерно будет выглядеть интерфейс для работы с ZFS и создания файловых систем. К тому же решил, что будет полезной возможность создания RAID при помощи GEOM классов. Поэтому добавил главное меню, в котором пока 3 пункта:
Пока что работает только второй, но дело сдвинулось с мёртвой точки.
По моей логике работа с sade будет выглядеть примерно так:
- Сначала пользователь может зайти в раздел RAID (если ему нужно это) и там выбрать устройства, которые он планирует объединить в RAID. Причём кроме обычных gmirror и gstripe думаю туда же добавить и возможность создания ZFS пула из нескольких устройств (т.е. mirror, raidz, raidz2). Возможно стоит туда же втиснуть возможность конфигурирования gjournal, geli,... Но про последние пока не думал, да и не использовал я их по сути.
- После создания конфигурации для RAID, либо сразу, если она не нужна, пользователь заходит во второй пункт. Тут уже открывается список устройств, из которых можно выбрать только одно (единовременно) и дальше типовой функционал gpart. Создание схемы, добавление партиций на неё и запись загрузочного кода. Сюда же входит создание разметки BSD. Для ZFS будет отдельный редактор, больше похожий на редактор файловых систем. Он будет открываться при выборе ZFS пула из списка устройств. Или когда пользователь выберет в списке возможных схем "создание ZFS пула".
Вообще, работу с ZFS думаю реализовать по аналогии с партициями. Создание пула соответствует созданию схемы, а создание датасетов - созданию партиций. Т.е. например, когда в редакторе партиций нажать Enter на партиции с типом freebsd-zfs, то будет предложено создать пул на ней (если конечно там его ещё нет), после чего откроется редактор ZFS, в котором можно создавать датасеты. - После создания партиций пользователь должен будет выйти в главное меню и выбрать третий пункт. Это будет тоже отдельный редактор, над созданием которого сейчас я начинаю работать. Это будет список, пока я планирую выводить 4 столбика:
имя_провайдера<--->тип_ФС<--->Размер<--->Точка монтирования
В список поддерживаемых ФС пока планирую включить: ufs, zfs, swap. Ещё там может отображаться "empty" и "unknown". "empty" для свежесозданных партиций, а "unknown" для случая когда нет прав для того чтобы определить тип ФС или ещё чего-то непредвиденного.
среда, 14 апреля 2010 г.
Монтирование флэшек с FAT в XFCE
Уже довольно давно пользуюсь XFCE4 в качестве DE. XFCE и Xorg установлены с поддержкой HAL. У меня лично монтирование флешек во FreeBSD проблем не вызывает - "sudo mount_msdosfs /dev/da0s1 ..." и делов-то. Но настраивая компьютер родителям, подумал что им, далёким от IT людям, такой способ не очень подходит. В принципе, при подключении флэшки на рабочем столе XFCE появляется иконка и монтирование выполняется вполне автоматически, только вот проблемка - файлы с кириллицей в именах в файловом менеджере не видно. Да ещё эти права доступа...
И вот, решил "доковырять" то, что давно уже нужно было сделать - монтирование с нужными опциями. Через PolicyKit настроил разрешения на монтирование для пользователя homeuser, под котором будут заходить в систему родители:
В файле /usr/local/etc/xdg/xfce4/mount.rc можно выбрать значения опций по-умолчанию для монтирования различных типов файловых систем. Вот такие опции выбрал я:
В результате, при подключении флэшки на рабочем столе появляется иконка диска, на которой можно вызвать команду "Подключить том", либо просто два раза кликнуть и откроется Thunar с уже смонтированным содержимым. Причём, файлы с кириллицей в именах будут корректно отображаться и пользователь сможет записывать и удалять их.
И вот, решил "доковырять" то, что давно уже нужно было сделать - монтирование с нужными опциями. Через PolicyKit настроил разрешения на монтирование для пользователя homeuser, под котором будут заходить в систему родители:
<match user="homeuser"> <match action="org.freedesktop.hal.storage.mount-removable"> <return result="yes"/> </match> <match action="org.freedesktop.hal.storage.mount-fixed"> <return result="yes"/> </match> <match action="org.freedesktop.hal.storage.eject"> <return result="yes"/> </match> <match action="org.freedesktop.hal.storage.unmount-others"> <return result="yes"/> </match> </match>После этого занялся поиском того, как настроить опции "по-умолчанию" для монтируемых устройств. Сначала я думал сделать это внутри политик HAL, но потом случайно наткнулся на способ, который предоставляет XFCE.
В файле /usr/local/etc/xdg/xfce4/mount.rc можно выбрать значения опций по-умолчанию для монтирования различных типов файловых систем. Вот такие опции выбрал я:
[vfat] # FreeBSD specific option longnames=true -L=ru_RU.UTF-8 -D=CP866 -m=0664 -M=0775 -u=homeuserСписок возможных опций можно посмотреть в выводе lshal после подключения флэшки. Искать нужно строку volume.mount.valid_options. В ней содержатся разрешённые HAL'ом опции, которые можно передать ему для монтирования. Их же можно найти в файле /usr/local/share/hal/fdi/policy/10osvendor/20-storage-methods.fdi. По-умолчанию для FreeBSD эти опции разрешены и соответствуют перечисленным в мануале mount_msdosfs(8).
В результате, при подключении флэшки на рабочем столе появляется иконка диска, на которой можно вызвать команду "Подключить том", либо просто два раза кликнуть и откроется Thunar с уже смонтированным содержимым. Причём, файлы с кириллицей в именах будут корректно отображаться и пользователь сможет записывать и удалять их.
воскресенье, 11 апреля 2010 г.
sade - редактор диска, часть 3
По совету Константина (kib@) опубликовал RFC в списках рассылки freebsd-current@ и freebsd-geom@ на тему переписывания sade(8). Как оказалось я не единственный, кто этим занимается, но другим, пока что, показать совсем нечего. Поэтому решил продолжать сам.
Закончил все функции редактора и нашёл ещё один "полубаг" в реализации схемы APM. Класс не находит метаданные схемы APM, если после её создания не было создано ниодной партиции. Но в общем-то это не так страшно.
Из плюсов этого RFC было то, что ответил Marcel. Написал что он очень занят, но патчи нужно всётаки коммитить, попросил переслать всё, что я ему посылал до этого. Переслал. Опять тишина...
Исправил баг в схеме MBR, который вызывал панику при отмене удаления схемы. Модифицировал подобным же образом все схемы, которые могут зависеть от геометрии провайдера. Ответа пока тоже нет...
Выложил всё, что накодил для sade вместе со скриншотами. Если кто желает, можете потестить, только осторожно, механизмы вызова паники я вроде бы описывал ранее.
На данный момент прогресс дальнейшего развития практически прекратился. Нужно время на обдумывание того, как будет выглядеть для пользователя дальнейший функционал. Пока, с переменным успехом, думаю над двумя вещами: диалог записи загрузочного кода и то, как будут создаваться файловые системы.
По загрузочному коду довольно много неясности вносит наличие множества различных вариантов и отсутсвие опыта использования большинства из них :)
Для разных схем есть различные реализации загрузочного кода, из которых сам я пробовал только mbr и boot0 для MBR схемы, и gptzfsboot с pmbr для схемы GPT. А ведь есть ещё и другие схемы, которые используются на аппартных архитектурах, которые я вообще не видел, таких как PC98 и APM. Наверное, сделаю только то, что сам пробовал, а дальше уж видно будет.
По файловым системам тоже пока вопросов больше чем ответов. По сути, FreeBSD работает только с двумя файловыми системами - UFS и ZFS. С ZFS отдельная история, так как она не обычная файловая система, а ещё и в некоторой степени LVM. Поэтому, думаю что стоит начать с реализации только UFS. Дальше опять вопросы - где должен быть реализован функционал создания файловых систем? Внутри редактора партиций или же в отдельном редакторе? С точки зрения моей логики, вроде бы удобнее создать файловую систему сразу после создания партиции. Но опять же, куда в редакторе размещать все элементы интерфейса? Где отображать точку монтирования, опции для newfs и т.п.?
Короче, работы ещё полно...
Закончил все функции редактора и нашёл ещё один "полубаг" в реализации схемы APM. Класс не находит метаданные схемы APM, если после её создания не было создано ниодной партиции. Но в общем-то это не так страшно.
Из плюсов этого RFC было то, что ответил Marcel. Написал что он очень занят, но патчи нужно всётаки коммитить, попросил переслать всё, что я ему посылал до этого. Переслал. Опять тишина...
Исправил баг в схеме MBR, который вызывал панику при отмене удаления схемы. Модифицировал подобным же образом все схемы, которые могут зависеть от геометрии провайдера. Ответа пока тоже нет...
Выложил всё, что накодил для sade вместе со скриншотами. Если кто желает, можете потестить, только осторожно, механизмы вызова паники я вроде бы описывал ранее.
На данный момент прогресс дальнейшего развития практически прекратился. Нужно время на обдумывание того, как будет выглядеть для пользователя дальнейший функционал. Пока, с переменным успехом, думаю над двумя вещами: диалог записи загрузочного кода и то, как будут создаваться файловые системы.
По загрузочному коду довольно много неясности вносит наличие множества различных вариантов и отсутсвие опыта использования большинства из них :)
Для разных схем есть различные реализации загрузочного кода, из которых сам я пробовал только mbr и boot0 для MBR схемы, и gptzfsboot с pmbr для схемы GPT. А ведь есть ещё и другие схемы, которые используются на аппартных архитектурах, которые я вообще не видел, таких как PC98 и APM. Наверное, сделаю только то, что сам пробовал, а дальше уж видно будет.
По файловым системам тоже пока вопросов больше чем ответов. По сути, FreeBSD работает только с двумя файловыми системами - UFS и ZFS. С ZFS отдельная история, так как она не обычная файловая система, а ещё и в некоторой степени LVM. Поэтому, думаю что стоит начать с реализации только UFS. Дальше опять вопросы - где должен быть реализован функционал создания файловых систем? Внутри редактора партиций или же в отдельном редакторе? С точки зрения моей логики, вроде бы удобнее создать файловую систему сразу после создания партиции. Но опять же, куда в редакторе размещать все элементы интерфейса? Где отображать точку монтирования, опции для newfs и т.п.?
Короче, работы ещё полно...
Подписаться на:
Сообщения (Atom)