=========================================================================
.....................................УБЕДИТЕЛЬНАЯ ПРОСЬБА
перед тем как писать первое что пришло в голову осильте пожалуйста весь пост =========================================================================
Как-то давно я высказал мысль о том, что было бы неплохо запихнуть portage tree в базу.
Много воды утекло с тех пор. Я успел два раза сменить работу. Сейчас в моих задачах часто мелькает sql. Универовский курс и так был плох + я его еще и не слушал внимательно (ведь всего лишь зачет). И тут я вспомнил о своей идее..
Цели (в порядке убивания важности)
- максимально возможно (в рамках задачи) изучить sql
- подтянуть знание python/ruby (почему ruby, см ниже)
- если удастся — «получить» новую версию package management system (PMS) в Gentoo (но в то же время это не самоцель) или хотя бы разродится GLEP`ом (желательно в статусе accepted) и [полу]рабочим кодом.
- все что есть в README.md на github`е
- возможно что-то еще, что я забыл
За месяц в свободное время (+ частично забивая болт на работу) я успел налабать достаточно говно^Wкода, которий генерит такой же список, как и
emerge -pO world
emerge -pO `cat /var/lib/portage/world`
vv@crusader ~/work/own/ruby/portage3/source/tools $ ./01_prepare_fast_storage.rb -r
Checking if '/dev/shm' path is present on target system.. OK
Checking if '/dev/shm' is a directory on target system.. OK
Checking if '/dev/shm' is writable on target system.. OK
Checking if '/dev/shm' has enough space on target system.. OK
Starting exctact portage snapshot.. Done
vv@crusader ~/work/own/ruby/portage3/source/tools $ ./02_generate_new_profiles.rb
cp: omitting directory `profiles/arch'
... << SKIPPED
cp: omitting directory `profiles/default/linux/x86'
vv@crusader ~/work/own/ruby/portage3/source/tools $ ./03_patch_profiles_list.rb
vv@crusader ~/work/own/ruby/portage3/source/tools $ ./04_patch_package-mask.rb
vv@crusader ~/work/own/ruby/portage3/source/tools $ ./05_patch_ebuilds.rb
vv@crusader ~/work/own/ruby/portage3/source/tools $ ./06_create_db.rb
Everything is OK. Database was created at:
/dev/shm/portage3_data/test-20120206-223124.sqlite
vv@crusader ~/work/own/ruby/portage3/source/tools $ time ./07_fill_db.rb
././tables_population/26_ebuilds.rb:19: warning: already initialized constant VERSION
././tables_population/28_profile_masks.rb:21: warning: already initialized constant VERSION
././tables_population/29_users_keywords.rb:20: warning: already initialized constant VERSION
././tables_population/30_users_mask.rb:20: warning: already initialized constant VERSION
real 2m38.133s
user 2m4.067s
sys 0m32.847s
vv@crusader ~/work/own/ruby/portage3/source/tools $ mv /dev/shm/portage3_data/test-20120206-223124.sqlite /tmp/
vv@crusader ~/work/own/ruby/portage3/source/tools $ cd ../src/
vv@crusader ~/work/own/ruby/portage3/source/src $ time `./emerge_pO_world.rb -f /tmp/test-20120206-223124.sqlite > /tmp/p3_fin`
real 0m0.559s
user 0m0.200s
sys 0m0.020s
vv@crusader ~/work/own/ruby/portage3/source/src $ cat /usr/local/bin/et
#!/bin/sh
emerge -pO `cat /var/lib/portage/world` | grep ebuild | awk '{print $4}' | sort > /tmp/p2_fin
vv@crusader ~/work/own/ruby/portage3/source/src $ time `et`
real 0m13.956s
user 0m4.603s
sys 0m0.226s
vv@crusader ~/work/own/ruby/portage3/source/src $ diff /tmp/p2_fin /tmp/p3_fin
vv@crusader ~/work/own/ruby/portage3/source/src $
Как видите быстрее в ~27 раз. Тестировал на __обычной__ генте, на ноуте 5-летней давности (Toshiba Satellite m100-221)
Что есть
- source code на github`е, основная ветка сейчас — keywords2
- желание пилить дальше (или участвовать/помогать)
- пачка скриптов на руби, 2 sql файла и todo-файл (infos/issues)
- новые нескучные обои^W^Wпрофили (см папку profiles_v2). Обьяснения ниже
- новых профилей только 2: x86/linux/* & amd64/linux/*. Внимание: у меня stable х86 и тестил я только на нем. Возможно Вам удастся завести и на других arch`ах (без или с минимальными хаками кода и базы)
- поддержка keywords (~/+) на всех уровнях
- поддержка package.[un]mask (masked()/unmasked(-)) на всех уровнях
- поддержка /etc/portage/package.{keywords,mask,unmask} в виде __файлов__
RUBY? WTF!!!
У меня есть несколько наколенных скриптов написаних на питоне. Они верой и правдой служат мне каждый день. Но на работе меня попросили перейти на красный. И вот, после руби, возвращаться на питон не хочется вообще. Чтобы не разводить холивар, причины пропущу.
Я прекрасно понимаю, что не может быть и речи о попадании моего творения в «продакшен», пока все не будет переписано на питоне. После того, как сие (переписывание) случится, обязуюсь в рамках проекта дальше кодить на питоне.
PROFILES. 2 beers or not 2 beers
Сначала они мне показались слишком запутанными, разбросанными, с наследованием на каждом углу итп итд. Я решил упростить схему до следующего
${portage_home}/profiles/base/{hardware architecture}/{software platform/}/[({feature}/)?]/{release}/{target}/[({blah-blah}/)*]
- hardware architecture - x86, amd64, sparc64 etc
- software platform - linux, freebsd, winnt, (да-да; см. profiles/profiles.desc) etc
- feature - default, ulibc (или как там ее), hardened etc
- release - 10.0, 2008.0 etc
- targer - server, desktop, developer etc
- blah-blah - kde, gnome, etc
Но потом я начал понимать, что не все так радужно, как казалось. Пока оставил как есть. «to be continued» как говорится.
Чего хочу от ВАС
- так как я в базах до этого был почти полный ноль то:
- критики/советов/etc о том, как спроектирована база (portage.sqlite.sql)
- критики/советов/etc о том, как упростить и сделать быстрее запросы в emerge_pO_world.rb
- советов о том, какая база здесь будет лучше и быстрее в использовании.
- быть разработчиком/контрибутором. есть желающие?
- а тестером? а если у вас нестандартная arch — так вообще замечательно
- осуществить/помочь с переходом на python
Чего нет
- достаточно свободного времени
- хорошей обработки ошибок. сейчас оно просто вываливается. Если ничего не работает, но и нет ошибок запускайте каждый скрипт по отдельности
- нормальных debug сообщений
- нормальной поддержки версий (см. портянку в 26_ebuilds.rb:155, а также в файле issues)
- [RC]DEPENDS
- use flags
- overlays
- буквенные слоты
- ...
- этот список можно продолжать очень долго
Что НЕ хочу от ВАС
- «тред не читай & сразу отвечай»
- советов о том, что gentoo/portage/sql/python/ruby/ ZuBB/etc не нужен
- советов о том что любой кусок кода в папке tools говно. Возможно так и есть. Сейчас это не главное
- не создавайте ишки c feature requests/blue sky ideas на гитхабе. Пока видимые задачи/проблемы/баги явно в фаворе
Что будет дальше
- мердж всех веток в мастер
- я беру паузу на месяц-полтора. буду чередовать работу/отдых/катание на Буковеле по виходным/ДР`я в компании/etc
- если будет заинтересованность здесь, то сделаю небольшой cleanup кода и анонс в G+/Gentoo Forums(/еще гдето?)
Кушать подано! (С)
PS: пардоньте мой «французский». Это не мой родной язык
PS2: ах да mail: zv@sylvv AT почта «самой хорошей корпорации в мире» DOT ком
PS3: извините за длинный пост